Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
[ Download CSV Export ]
Contract Name:
OpenWorldBeRealBadge
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-07-14 */ // Sources flattened with hardhat v2.9.9 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File contracts/OpenWorldBeRealBadge.sol pragma solidity ^0.8.4; contract OpenWorldBeRealBadge is ERC1155, AccessControl, ERC1155Supply { uint256 public number = 1; uint256[] public idList; bytes32 public constant URI_SETTER_ROLE = keccak256("URI_SETTER_ROLE"); bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); bool public transferable = false; bool public unlimited = false; event ChangeTransferable(bool indexed transferable); event ChangeUnlimited(bool indexed unlimited); event ChangeNumber(uint256 indexed number); event ChangeIdList(uint256[] indexed idList); constructor() ERC1155("ipfs://QmZ7RrNYTKVhNX995o8nTUuKW5NjPWqMiETq9J4ZJWQC1s/{id}.json") { _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(URI_SETTER_ROLE, msg.sender); _grantRole(MINTER_ROLE, msg.sender); } function name() public pure returns (string memory) { return "OpenWorld BeReal Badge"; } function symbol() public pure returns (string memory) { return "BeReal"; } function getIdList() public view returns (uint256[] memory) { return idList; } function setIdList(uint256[] memory _idList) public onlyRole(DEFAULT_ADMIN_ROLE) { idList = _idList; emit ChangeIdList(_idList); } function setTransferable(bool _transferable) public onlyRole(DEFAULT_ADMIN_ROLE) { transferable = _transferable; emit ChangeTransferable(_transferable); } function setUnlimited(bool _unlimited) public onlyRole(DEFAULT_ADMIN_ROLE) { unlimited = _unlimited; emit ChangeUnlimited(_unlimited); } function setNumber(uint256 _number) public onlyRole(DEFAULT_ADMIN_ROLE) { number = _number; emit ChangeNumber(_number); } function setURI(string memory newuri) public onlyRole(URI_SETTER_ROLE) { _setURI(newuri); } function mint(address account, uint256 id, uint256 amount, bytes memory data) public onlyRole(MINTER_ROLE) { require(_isInIdList(id), "Mint: id not in the id list"); _mint(account, id, amount, data); } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyRole(MINTER_ROLE) { for(uint256 i = 0; i < ids.length; i++) { require(_isInIdList(ids[i]), "Mint: id not in the id list"); } _mintBatch(to, ids, amounts, data); } function mintBatchDefault(address[] memory addresses, uint256[] memory ids) public onlyRole(MINTER_ROLE) { require(addresses.length == ids.length); for (uint256 i = 0; i < addresses.length; i++) { require(_isInIdList(ids[i]), "Mint: id not in the id list"); _mint(addresses[i], ids[i], 1, ""); } } function mintBatchAddresses(address[] memory addresses, uint256[] memory ids, uint256[] memory amounts) public onlyRole(MINTER_ROLE) { require(addresses.length == ids.length); for (uint256 i = 0; i < addresses.length; i++) { require(_isInIdList(ids[i]), "Mint: id not in the id list"); _mint(addresses[i], ids[i], amounts[i], ""); } } function _isInIdList(uint256 _id) internal view returns (bool) { for(uint256 i = 0; i < idList.length; i++) { if(idList[i] == _id) { return true; } } return false; } 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); } function _afterTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal override { if (!transferable) { require(hasRole(MINTER_ROLE, operator), "Transfer: can not transfer"); } if (!unlimited) { uint256 _number = 0; for (uint256 i = 0; i < idList.length; i++) { _number += balanceOf(to, idList[i]); } require(_number <= number, "Mint: already minted"); } super._afterTokenTransfer(operator, from, to, ids, amounts, data); } function supportsInterface(bytes4 interfaceId) public view override(ERC1155, AccessControl) returns (bool) { return super.supportsInterface(interfaceId); } }
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":"uint256[]","name":"idList","type":"uint256[]"}],"name":"ChangeIdList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"number","type":"uint256"}],"name":"ChangeNumber","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"transferable","type":"bool"}],"name":"ChangeTransferable","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"unlimited","type":"bool"}],"name":"ChangeUnlimited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"URI_SETTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIdList","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatchAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"mintBatchDefault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"number","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","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":"_idList","type":"uint256[]"}],"name":"setIdList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"setNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_transferable","type":"bool"}],"name":"setTransferable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_unlimited","type":"bool"}],"name":"setUnlimited","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260016005556000600760006101000a81548160ff0219169083151502179055506000600760016101000a81548160ff0219169083151502179055503480156200004c57600080fd5b506040518060600160405280603f81526020016200512f603f91396200007881620000f860201b60201c565b506200008e6000801b336200011460201b60201c565b620000c07f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c336200011460201b60201c565b620000f27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336200011460201b60201c565b6200038e565b80600290805190602001906200011092919062000279565b5050565b6200012682826200020660201b60201c565b620002025760016003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001a76200027160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b828054620002879062000329565b90600052602060002090601f016020900481019282620002ab5760008555620002f7565b82601f10620002c657805160ff1916838001178555620002f7565b82800160010185558215620002f7579182015b82811115620002f6578251825591602001919060010190620002d9565b5b5090506200030691906200030a565b5090565b5b80821115620003255760008160009055506001016200030b565b5090565b600060028204905060018216806200034257607f821691505b602082108114156200035957620003586200035f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614d91806200039e6000396000f3fe608060405234801561001057600080fd5b50600436106102055760003560e01c8063731133e91161011a578063a22cb465116100ad578063d53913931161007c578063d5391393146105fa578063d547741f14610618578063e985e9c514610634578063f242432a14610664578063fed1adfd1461068057610205565b8063a22cb46514610572578063ac0fc11c1461058e578063bd85b039146105ac578063cb457d47146105dc57610205565b806392ff0d31116100e957806392ff0d31146104fc57806395d89b411461051a5780639cd2370714610538578063a217fddf1461055457610205565b8063731133e9146104745780637f345710146104905780638381f58a146104ae57806391d14854146104cc57610205565b80631fe5e37d1161019d57806336568abe1161016c57806336568abe146103ac5780633fb5c1cb146103c85780634e1273f4146103e45780634f558e79146104145780636313531f1461044457610205565b80631fe5e37d14610328578063248a9ca3146103445780632eb2c2d6146103745780632f2ff15d1461039057610205565b80630ceb7649116101d95780630ceb7649146102a45780630e89341c146102c057806316d7c276146102f05780631f7fdffa1461030c57610205565b8062fdd58e1461020a57806301ffc9a71461023a57806302fe53051461026a57806306fdde0314610286575b600080fd5b610224600480360381019061021f91906136f1565b61069c565b604051610231919061429c565b60405180910390f35b610254600480360381019061024f919061397a565b610765565b6040516102619190614024565b60405180910390f35b610284600480360381019061027f91906139cc565b610777565b005b61028e6107ae565b60405161029b919061405a565b60405180910390f35b6102be60048036038101906102b99190613814565b6107eb565b005b6102da60048036038101906102d59190613a0d565b6109ac565b6040516102e7919061405a565b60405180910390f35b61030a600480360381019061030591906138ab565b610a40565b005b6103266004803603810190610321919061360a565b610aaa565b005b610342600480360381019061033d91906137a8565b610b8f565b005b61035e60048036038101906103599190613915565b610d10565b60405161036b919061403f565b60405180910390f35b61038e600480360381019061038991906134bc565b610d30565b005b6103aa60048036038101906103a5919061393e565b610dd1565b005b6103c660048036038101906103c1919061393e565b610df2565b005b6103e260048036038101906103dd9190613a0d565b610e75565b005b6103fe60048036038101906103f991906137a8565b610eba565b60405161040b9190613fcb565b60405180910390f35b61042e60048036038101906104299190613a0d565b61106b565b60405161043b9190614024565b60405180910390f35b61045e60048036038101906104599190613a0d565b61107f565b60405161046b919061429c565b60405180910390f35b61048e6004803603810190610489919061372d565b6110a3565b005b610498611128565b6040516104a5919061403f565b60405180910390f35b6104b661114c565b6040516104c3919061429c565b60405180910390f35b6104e660048036038101906104e1919061393e565b611152565b6040516104f39190614024565b60405180910390f35b6105046111bd565b6040516105119190614024565b60405180910390f35b6105226111d0565b60405161052f919061405a565b60405180910390f35b610552600480360381019061054d91906138ec565b61120d565b005b61055c611267565b604051610569919061403f565b60405180910390f35b61058c600480360381019061058791906136b5565b61126e565b005b610596611284565b6040516105a39190613fcb565b60405180910390f35b6105c660048036038101906105c19190613a0d565b6112dc565b6040516105d3919061429c565b60405180910390f35b6105e46112f9565b6040516105f19190614024565b60405180910390f35b61060261130c565b60405161060f919061403f565b60405180910390f35b610632600480360381019061062d919061393e565b611330565b005b61064e60048036038101906106499190613480565b611351565b60405161065b9190614024565b60405180910390f35b61067e6004803603810190610679919061357b565b6113e5565b005b61069a600480360381019061069591906138ec565b611486565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561070d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610704906140dc565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610770826114e0565b9050919050565b7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c6107a18161155a565b6107aa8261156e565b5050565b60606040518060400160405280601681526020017f4f70656e576f726c642042655265616c20426164676500000000000000000000815250905090565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108158161155a565b825184511461082357600080fd5b60005b84518110156109a55761087884828151811061086b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611588565b6108b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ae9061415c565b60405180910390fd5b6109928582815181106108f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610934577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858481518110610975577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160405180602001604052806000815250611611565b808061099d90614643565b915050610826565b5050505050565b6060600280546109bb906145e0565b80601f01602080910402602001604051908101604052809291908181526020018280546109e7906145e0565b8015610a345780601f10610a0957610100808354040283529160200191610a34565b820191906000526020600020905b815481529060010190602001808311610a1757829003601f168201915b50505050509050919050565b6000801b610a4d8161155a565b8160069080519060200190610a63929190613116565b5081604051610a729190613eb8565b60405180910390207fd6f53abbd6fac738a9bf3e007020916eb9305ce773fecd5ce274471a203361a960405160405180910390a25050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610ad48161155a565b60005b8451811015610b7b57610b29858281518110610b1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611588565b610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f9061415c565b60405180910390fd5b8080610b7390614643565b915050610ad7565b50610b88858585856117c2565b5050505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610bb98161155a565b8151835114610bc757600080fd5b60005b8351811015610d0a57610c1c838281518110610c0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611588565b610c5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c529061415c565b60405180910390fd5b610cf7848281518110610c97577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151848381518110610cd8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600160405180602001604052806000815250611611565b8080610d0290614643565b915050610bca565b50505050565b600060036000838152602001908152602001600020600101549050919050565b610d38611a3b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610d7e5750610d7d85610d78611a3b565b611351565b5b610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db49061413c565b60405180910390fd5b610dca8585858585611a43565b5050505050565b610dda82610d10565b610de38161155a565b610ded8383611db1565b505050565b610dfa611a3b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e9061427c565b60405180910390fd5b610e718282611e92565b5050565b6000801b610e828161155a565b81600581905550817f3199ced4b842c863811cf2cf0d7bce820f81f59444f4c7c9abb52edda5d6621860405160405180910390a25050565b60608151835114610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef79061421c565b60405180910390fd5b6000835167ffffffffffffffff811115610f43577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610f715781602001602082028036833780820191505090505b50905060005b84518110156110605761100a858281518110610fbc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110610ffd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161069c565b828281518110611043577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508061105990614643565b9050610f77565b508091505092915050565b600080611077836112dc565b119050919050565b6006818154811061108f57600080fd5b906000526020600020016000915090505481565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66110cd8161155a565b6110d684611588565b611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c9061415c565b60405180910390fd5b61112185858585611611565b5050505050565b7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c81565b60055481565b60006003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600760009054906101000a900460ff1681565b60606040518060400160405280600681526020017f42655265616c0000000000000000000000000000000000000000000000000000815250905090565b6000801b61121a8161155a565b81600760006101000a81548160ff0219169083151502179055508115157f92073bc7a72a739e4fa398eef60fae4c4072cfdbbbea59925e6fc5575c1fce1b60405160405180910390a25050565b6000801b81565b611280611279611a3b565b8383611f74565b5050565b606060068054806020026020016040519081016040528092919081815260200182805480156112d257602002820191906000526020600020905b8154815260200190600101908083116112be575b5050505050905090565b600060046000838152602001908152602001600020549050919050565b600760019054906101000a900460ff1681565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61133982610d10565b6113428161155a565b61134c8383611e92565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113ed611a3b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061143357506114328561142d611a3b565b611351565b5b611472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611469906140fc565b60405180910390fd5b61147f85858585856120e1565b5050505050565b6000801b6114938161155a565b81600760016101000a81548160ff0219169083151502179055508115157f53c052ba2b0e175be4359467665c74f740fd06af2f731baec64fef93b8d3606e60405160405180910390a25050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061155357506115528261237d565b5b9050919050565b61156b81611566611a3b565b61245f565b50565b8060029080519060200190611584929190613163565b5050565b600080600090505b6006805490508110156116065782600682815481106115d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015414156115f357600191505061160c565b80806115fe90614643565b915050611590565b50600090505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116789061425c565b60405180910390fd5b600061168b611a3b565b90506000611698856124fc565b905060006116a5856124fc565b90506116b6836000898585896125c2565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117159190614446565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516117939291906142b7565b60405180910390a46117aa836000898585896125d8565b6117b983600089898989612747565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611832576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118299061425c565b60405180910390fd5b8151835114611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d9061423c565b60405180910390fd5b6000611880611a3b565b9050611891816000878787876125c2565b60005b8451811015611996578381815181106118d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160008087848151811061191a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461197c9190614446565b92505081905550808061198e90614643565b915050611894565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a0e929190613fed565b60405180910390a4611a25816000878787876125d8565b611a348160008787878761292e565b5050505050565b600033905090565b8151835114611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e9061423c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee9061411c565b60405180910390fd5b6000611b01611a3b565b9050611b118187878787876125c2565b60005b8451811015611d0e576000858281518110611b58577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000858381518110611b9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c359061419c565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cf39190614446565b9250508190555050505080611d0790614643565b9050611b14565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d85929190613fed565b60405180910390a4611d9b8187878787876125d8565b611da981878787878761292e565b505050505050565b611dbb8282611152565b611e8e5760016003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e33611a3b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611e9c8282611152565b15611f705760006003600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611f15611a3b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda906141fc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120d49190614024565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121489061411c565b60405180910390fd5b600061215b611a3b565b90506000612168856124fc565b90506000612175856124fc565b90506121858389898585896125c2565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561221c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122139061419c565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d19190614446565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161234e9291906142b7565b60405180910390a4612364848a8a86868a6125d8565b612372848a8a8a8a8a612747565b505050505050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061244857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612458575061245782612b15565b5b9050919050565b6124698282611152565b6124f85761248e8173ffffffffffffffffffffffffffffffffffffffff166014612b7f565b61249c8360001c6020612b7f565b6040516020016124ad929190613ecf565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef919061405a565b60405180910390fd5b5050565b60606000600167ffffffffffffffff811115612541577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561256f5781602001602082028036833780820191505090505b50905082816000815181106125ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b6125d0868686868686612e79565b505050505050565b600760009054906101000a900460ff16612656576126167f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a687611152565b612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c9061417c565b60405180910390fd5b5b600760019054906101000a900460ff16612731576000805b6006805490508110156126e9576126c986600683815481106126b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015461069c565b826126d49190614446565b915080806126e190614643565b91505061266e565b5060055481111561272f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612726906141dc565b60405180910390fd5b505b61273f8686868686866130e3565b505050505050565b6127668473ffffffffffffffffffffffffffffffffffffffff166130eb565b15612926578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016127ac959493929190613f71565b602060405180830381600087803b1580156127c657600080fd5b505af19250505080156127f757506040513d601f19601f820116820180604052508101906127f491906139a3565b60015b61289d57612803614719565b806308c379a014156128605750612818614c52565b806128235750612862565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612857919061405a565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128949061407c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b906140bc565b60405180910390fd5b505b505050505050565b61294d8473ffffffffffffffffffffffffffffffffffffffff166130eb565b15612b0d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612993959493929190613f09565b602060405180830381600087803b1580156129ad57600080fd5b505af19250505080156129de57506040513d601f19601f820116820180604052508101906129db91906139a3565b60015b612a84576129ea614719565b806308c379a01415612a4757506129ff614c52565b80612a0a5750612a49565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3e919061405a565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7b9061407c565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b02906140bc565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060006002836002612b92919061449c565b612b9c9190614446565b67ffffffffffffffff811115612bdb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612c0d5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612c6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612cf5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612d35919061449c565b612d3f9190614446565b90505b6001811115612e2b577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612da7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110612de4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612e24906145b6565b9050612d42565b5060008414612e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e669061409c565b60405180910390fd5b8091505092915050565b612e8786868686868661310e565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612f855760005b8351811015612f8357828181518110612f01577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160046000868481518110612f46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020019081526020016000206000828254612f6b9190614446565b9250508190555080612f7c90614643565b9050612ebf565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130db5760005b83518110156130d9576000848281518110613001577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110613046577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060046000848152602001908152602001600020549050818110156130ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a2906141bc565b60405180910390fd5b8181036004600085815260200190815260200160002081905550505050806130d290614643565b9050612fbd565b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b828054828255906000526020600020908101928215613152579160200282015b82811115613151578251825591602001919060010190613136565b5b50905061315f91906131e9565b5090565b82805461316f906145e0565b90600052602060002090601f01602090048101928261319157600085556131d8565b82601f106131aa57805160ff19168380011785556131d8565b828001600101855582156131d8579182015b828111156131d75782518255916020019190600101906131bc565b5b5090506131e591906131e9565b5090565b5b808211156132025760008160009055506001016131ea565b5090565b600061321961321484614305565b6142e0565b9050808382526020820190508285602086028201111561323857600080fd5b60005b85811015613268578161324e888261335a565b84526020840193506020830192505060018101905061323b565b5050509392505050565b600061328561328084614331565b6142e0565b905080838252602082019050828560208602820111156132a457600080fd5b60005b858110156132d457816132ba888261346b565b8452602084019350602083019250506001810190506132a7565b5050509392505050565b60006132f16132ec8461435d565b6142e0565b90508281526020810184848401111561330957600080fd5b613314848285614574565b509392505050565b600061332f61332a8461438e565b6142e0565b90508281526020810184848401111561334757600080fd5b613352848285614574565b509392505050565b60008135905061336981614ce8565b92915050565b600082601f83011261338057600080fd5b8135613390848260208601613206565b91505092915050565b600082601f8301126133aa57600080fd5b81356133ba848260208601613272565b91505092915050565b6000813590506133d281614cff565b92915050565b6000813590506133e781614d16565b92915050565b6000813590506133fc81614d2d565b92915050565b60008151905061341181614d2d565b92915050565b600082601f83011261342857600080fd5b81356134388482602086016132de565b91505092915050565b600082601f83011261345257600080fd5b813561346284826020860161331c565b91505092915050565b60008135905061347a81614d44565b92915050565b6000806040838503121561349357600080fd5b60006134a18582860161335a565b92505060206134b28582860161335a565b9150509250929050565b600080600080600060a086880312156134d457600080fd5b60006134e28882890161335a565b95505060206134f38882890161335a565b945050604086013567ffffffffffffffff81111561351057600080fd5b61351c88828901613399565b935050606086013567ffffffffffffffff81111561353957600080fd5b61354588828901613399565b925050608086013567ffffffffffffffff81111561356257600080fd5b61356e88828901613417565b9150509295509295909350565b600080600080600060a0868803121561359357600080fd5b60006135a18882890161335a565b95505060206135b28882890161335a565b94505060406135c38882890161346b565b93505060606135d48882890161346b565b925050608086013567ffffffffffffffff8111156135f157600080fd5b6135fd88828901613417565b9150509295509295909350565b6000806000806080858703121561362057600080fd5b600061362e8782880161335a565b945050602085013567ffffffffffffffff81111561364b57600080fd5b61365787828801613399565b935050604085013567ffffffffffffffff81111561367457600080fd5b61368087828801613399565b925050606085013567ffffffffffffffff81111561369d57600080fd5b6136a987828801613417565b91505092959194509250565b600080604083850312156136c857600080fd5b60006136d68582860161335a565b92505060206136e7858286016133c3565b9150509250929050565b6000806040838503121561370457600080fd5b60006137128582860161335a565b92505060206137238582860161346b565b9150509250929050565b6000806000806080858703121561374357600080fd5b60006137518782880161335a565b94505060206137628782880161346b565b93505060406137738782880161346b565b925050606085013567ffffffffffffffff81111561379057600080fd5b61379c87828801613417565b91505092959194509250565b600080604083850312156137bb57600080fd5b600083013567ffffffffffffffff8111156137d557600080fd5b6137e18582860161336f565b925050602083013567ffffffffffffffff8111156137fe57600080fd5b61380a85828601613399565b9150509250929050565b60008060006060848603121561382957600080fd5b600084013567ffffffffffffffff81111561384357600080fd5b61384f8682870161336f565b935050602084013567ffffffffffffffff81111561386c57600080fd5b61387886828701613399565b925050604084013567ffffffffffffffff81111561389557600080fd5b6138a186828701613399565b9150509250925092565b6000602082840312156138bd57600080fd5b600082013567ffffffffffffffff8111156138d757600080fd5b6138e384828501613399565b91505092915050565b6000602082840312156138fe57600080fd5b600061390c848285016133c3565b91505092915050565b60006020828403121561392757600080fd5b6000613935848285016133d8565b91505092915050565b6000806040838503121561395157600080fd5b600061395f858286016133d8565b92505060206139708582860161335a565b9150509250929050565b60006020828403121561398c57600080fd5b600061399a848285016133ed565b91505092915050565b6000602082840312156139b557600080fd5b60006139c384828501613402565b91505092915050565b6000602082840312156139de57600080fd5b600082013567ffffffffffffffff8111156139f857600080fd5b613a0484828501613441565b91505092915050565b600060208284031215613a1f57600080fd5b6000613a2d8482850161346b565b91505092915050565b6000613a428383613e8b565b60208301905092915050565b6000613a5a8383613ea9565b60208301905092915050565b613a6f816144f6565b82525050565b6000613a80826143cf565b613a8a81856143fd565b9350613a95836143bf565b8060005b83811015613ac6578151613aad8882613a36565b9750613ab8836143f0565b925050600181019050613a99565b5085935050505092915050565b6000613ade826143cf565b613ae8818561440e565b9350613af3836143bf565b8060005b83811015613b24578151613b0b8882613a4e565b9750613b16836143f0565b925050600181019050613af7565b5085935050505092915050565b613b3a81614508565b82525050565b613b4981614514565b82525050565b6000613b5a826143da565b613b648185614419565b9350613b74818560208601614583565b613b7d8161473b565b840191505092915050565b6000613b93826143e5565b613b9d818561442a565b9350613bad818560208601614583565b613bb68161473b565b840191505092915050565b6000613bcc826143e5565b613bd6818561443b565b9350613be6818560208601614583565b80840191505092915050565b6000613bff60348361442a565b9150613c0a82614759565b604082019050919050565b6000613c2260208361442a565b9150613c2d826147a8565b602082019050919050565b6000613c4560288361442a565b9150613c50826147d1565b604082019050919050565b6000613c68602b8361442a565b9150613c7382614820565b604082019050919050565b6000613c8b60298361442a565b9150613c968261486f565b604082019050919050565b6000613cae60258361442a565b9150613cb9826148be565b604082019050919050565b6000613cd160328361442a565b9150613cdc8261490d565b604082019050919050565b6000613cf4601b8361442a565b9150613cff8261495c565b602082019050919050565b6000613d17601a8361442a565b9150613d2282614985565b602082019050919050565b6000613d3a602a8361442a565b9150613d45826149ae565b604082019050919050565b6000613d5d60288361442a565b9150613d68826149fd565b604082019050919050565b6000613d8060148361442a565b9150613d8b82614a4c565b602082019050919050565b6000613da360178361443b565b9150613dae82614a75565b601782019050919050565b6000613dc660298361442a565b9150613dd182614a9e565b604082019050919050565b6000613de960298361442a565b9150613df482614aed565b604082019050919050565b6000613e0c60288361442a565b9150613e1782614b3c565b604082019050919050565b6000613e2f60218361442a565b9150613e3a82614b8b565b604082019050919050565b6000613e5260118361443b565b9150613e5d82614bda565b601182019050919050565b6000613e75602f8361442a565b9150613e8082614c03565b604082019050919050565b613e948161456a565b82525050565b613ea38161456a565b82525050565b613eb28161456a565b82525050565b6000613ec48284613ad3565b915081905092915050565b6000613eda82613d96565b9150613ee68285613bc1565b9150613ef182613e45565b9150613efd8284613bc1565b91508190509392505050565b600060a082019050613f1e6000830188613a66565b613f2b6020830187613a66565b8181036040830152613f3d8186613a75565b90508181036060830152613f518185613a75565b90508181036080830152613f658184613b4f565b90509695505050505050565b600060a082019050613f866000830188613a66565b613f936020830187613a66565b613fa06040830186613e9a565b613fad6060830185613e9a565b8181036080830152613fbf8184613b4f565b90509695505050505050565b60006020820190508181036000830152613fe58184613a75565b905092915050565b600060408201905081810360008301526140078185613a75565b9050818103602083015261401b8184613a75565b90509392505050565b60006020820190506140396000830184613b31565b92915050565b60006020820190506140546000830184613b40565b92915050565b600060208201905081810360008301526140748184613b88565b905092915050565b6000602082019050818103600083015261409581613bf2565b9050919050565b600060208201905081810360008301526140b581613c15565b9050919050565b600060208201905081810360008301526140d581613c38565b9050919050565b600060208201905081810360008301526140f581613c5b565b9050919050565b6000602082019050818103600083015261411581613c7e565b9050919050565b6000602082019050818103600083015261413581613ca1565b9050919050565b6000602082019050818103600083015261415581613cc4565b9050919050565b6000602082019050818103600083015261417581613ce7565b9050919050565b6000602082019050818103600083015261419581613d0a565b9050919050565b600060208201905081810360008301526141b581613d2d565b9050919050565b600060208201905081810360008301526141d581613d50565b9050919050565b600060208201905081810360008301526141f581613d73565b9050919050565b6000602082019050818103600083015261421581613db9565b9050919050565b6000602082019050818103600083015261423581613ddc565b9050919050565b6000602082019050818103600083015261425581613dff565b9050919050565b6000602082019050818103600083015261427581613e22565b9050919050565b6000602082019050818103600083015261429581613e68565b9050919050565b60006020820190506142b16000830184613e9a565b92915050565b60006040820190506142cc6000830185613e9a565b6142d96020830184613e9a565b9392505050565b60006142ea6142fb565b90506142f68282614612565b919050565b6000604051905090565b600067ffffffffffffffff8211156143205761431f6146ea565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561434c5761434b6146ea565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614378576143776146ea565b5b6143818261473b565b9050602081019050919050565b600067ffffffffffffffff8211156143a9576143a86146ea565b5b6143b28261473b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006144518261456a565b915061445c8361456a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144915761449061468c565b5b828201905092915050565b60006144a78261456a565b91506144b28361456a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144eb576144ea61468c565b5b828202905092915050565b60006145018261454a565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145a1578082015181840152602081019050614586565b838111156145b0576000848401525b50505050565b60006145c18261456a565b915060008214156145d5576145d461468c565b5b600182039050919050565b600060028204905060018216806145f857607f821691505b6020821081141561460c5761460b6146bb565b5b50919050565b61461b8261473b565b810181811067ffffffffffffffff8211171561463a576146396146ea565b5b80604052505050565b600061464e8261456a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146815761468061468c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156147385760046000803e61473560005161474c565b90505b90565b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d696e743a206964206e6f7420696e20746865206964206c6973740000000000600082015250565b7f5472616e736665723a2063616e206e6f74207472616e73666572000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f4d696e743a20616c7265616479206d696e746564000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600060443d1015614c6257614ce5565b614c6a6142fb565b60043d036004823e80513d602482011167ffffffffffffffff82111715614c92575050614ce5565b808201805167ffffffffffffffff811115614cb05750505050614ce5565b80602083010160043d038501811115614ccd575050505050614ce5565b614cdc82602001850186614612565b82955050505050505b90565b614cf1816144f6565b8114614cfc57600080fd5b50565b614d0881614508565b8114614d1357600080fd5b50565b614d1f81614514565b8114614d2a57600080fd5b50565b614d368161451e565b8114614d4157600080fd5b50565b614d4d8161456a565b8114614d5857600080fd5b5056fea2646970667358221220a97ec13341b60c0cd7e7de8f571384348ab05e2664c6d299500d7b30ac6c2aef64736f6c63430008040033697066733a2f2f516d5a3752724e59544b56684e583939356f386e5455754b57354e6a5057714d69455471394a345a4a57514331732f7b69647d2e6a736f6e
Deployed ByteCode Sourcemap
51720:4713:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21009:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56220:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53528:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52553:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54606:392;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20753:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52859:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53896:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54243:355;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45989:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22948:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46382:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47430:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53372:144;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21406:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50504:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51830:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53641:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51860:70;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51798:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44449:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52006:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52663:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53020:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43554:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22003:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52759:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50293:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52045:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51937:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46774:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22230:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22470:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53205:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21009:231;21095:7;21142:1;21123:21;;:7;:21;;;;21115:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21210:9;:13;21220:2;21210:13;;;;;;;;;;;:22;21224:7;21210:22;;;;;;;;;;;;;;;;21203:29;;21009:231;;;;:::o;56220:210::-;56357:4;56386:36;56410:11;56386:23;:36::i;:::-;56379:43;;56220:210;;;:::o;53528:105::-;51902:28;44045:16;44056:4;44045:10;:16::i;:::-;53610:15:::1;53618:6;53610:7;:15::i;:::-;53528:105:::0;;:::o;52553:102::-;52590:13;52616:31;;;;;;;;;;;;;;;;;;;52553:102;:::o;54606:392::-;51975:24;44045:16;44056:4;44045:10;:16::i;:::-;54778:3:::1;:10;54758:9;:16;:30;54750:39;;;::::0;::::1;;54805:9;54800:191;54824:9;:16;54820:1;:20;54800:191;;;54870:19;54882:3;54886:1;54882:6;;;;;;;;;;;;;;;;;;;;;;54870:11;:19::i;:::-;54862:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;54936:43;54942:9;54952:1;54942:12;;;;;;;;;;;;;;;;;;;;;;54956:3;54960:1;54956:6;;;;;;;;;;;;;;;;;;;;;;54964:7;54972:1;54964:10;;;;;;;;;;;;;;;;;;;;;;54936:43;;;;;;;;;;;::::0;:5:::1;:43::i;:::-;54842:3;;;;;:::i;:::-;;;;54800:191;;;;54606:392:::0;;;;:::o;20753:105::-;20813:13;20846:4;20839:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20753:105;;;:::o;52859:153::-;43599:4;52920:18;;44045:16;44056:4;44045:10;:16::i;:::-;52960:7:::1;52951:6;:16;;;;;;;;;;;;:::i;:::-;;52996:7;52983:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;52859:153:::0;;:::o;53896:339::-;51975:24;44045:16;44056:4;44045:10;:16::i;:::-;54061:9:::1;54057:126;54080:3;:10;54076:1;:14;54057:126;;;54120:19;54132:3;54136:1;54132:6;;;;;;;;;;;;;;;;;;;;;;54120:11;:19::i;:::-;54112:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;54092:3;;;;;:::i;:::-;;;;54057:126;;;;54193:34;54204:2;54208:3;54213:7;54222:4;54193:10;:34::i;:::-;53896:339:::0;;;;;:::o;54243:355::-;51975:24;44045:16;44056:4;44045:10;:16::i;:::-;54387:3:::1;:10;54367:9;:16;:30;54359:39;;;::::0;::::1;;54414:9;54409:182;54433:9;:16;54429:1;:20;54409:182;;;54479:19;54491:3;54495:1;54491:6;;;;;;;;;;;;;;;;;;;;;;54479:11;:19::i;:::-;54471:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;54545:34;54551:9;54561:1;54551:12;;;;;;;;;;;;;;;;;;;;;;54565:3;54569:1;54565:6;;;;;;;;;;;;;;;;;;;;;;54573:1;54545:34;;;;;;;;;;;::::0;:5:::1;:34::i;:::-;54451:3;;;;;:::i;:::-;;;;54409:182;;;;54243:355:::0;;;:::o;45989:131::-;46063:7;46090:6;:12;46097:4;46090:12;;;;;;;;;;;:22;;;46083:29;;45989:131;;;:::o;22948:442::-;23189:12;:10;:12::i;:::-;23181:20;;:4;:20;;;:60;;;;23205:36;23222:4;23228:12;:10;:12::i;:::-;23205:16;:36::i;:::-;23181:60;23159:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23330:52;23353:4;23359:2;23363:3;23368:7;23377:4;23330:22;:52::i;:::-;22948:442;;;;;:::o;46382:147::-;46465:18;46478:4;46465:12;:18::i;:::-;44045:16;44056:4;44045:10;:16::i;:::-;46496:25:::1;46507:4;46513:7;46496:10;:25::i;:::-;46382:147:::0;;;:::o;47430:218::-;47537:12;:10;:12::i;:::-;47526:23;;:7;:23;;;47518:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;47614:26;47626:4;47632:7;47614:11;:26::i;:::-;47430:218;;:::o;53372:144::-;43599:4;53424:18;;44045:16;44056:4;44045:10;:16::i;:::-;53464:7:::1;53455:6;:16;;;;53500:7;53487:21;;;;;;;;;;53372:144:::0;;:::o;21406:524::-;21562:16;21623:3;:10;21604:8;:15;:29;21596:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21692:30;21739:8;:15;21725:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21692:63;;21773:9;21768:122;21792:8;:15;21788:1;:19;21768:122;;;21848:30;21858:8;21867:1;21858:11;;;;;;;;;;;;;;;;;;;;;;21871:3;21875:1;21871:6;;;;;;;;;;;;;;;;;;;;;;21848:9;:30::i;:::-;21829:13;21843:1;21829:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;21809:3;;;;:::i;:::-;;;21768:122;;;;21909:13;21902:20;;;21406:524;;;;:::o;50504:122::-;50561:4;50617:1;50585:29;50611:2;50585:25;:29::i;:::-;:33;50578:40;;50504:122;;;:::o;51830:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53641:247::-;51975:24;44045:16;44056:4;44045:10;:16::i;:::-;53790:15:::1;53802:2;53790:11;:15::i;:::-;53782:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;53848:32;53854:7;53863:2;53867:6;53875:4;53848:5;:32::i;:::-;53641:247:::0;;;;;:::o;51860:70::-;51902:28;51860:70;:::o;51798:25::-;;;;:::o;44449:147::-;44535:4;44559:6;:12;44566:4;44559:12;;;;;;;;;;;:20;;:29;44580:7;44559:29;;;;;;;;;;;;;;;;;;;;;;;;;44552:36;;44449:147;;;;:::o;52006:32::-;;;;;;;;;;;;;:::o;52663:88::-;52702:13;52728:15;;;;;;;;;;;;;;;;;;;52663:88;:::o;53020:177::-;43599:4;53081:18;;44045:16;44056:4;44045:10;:16::i;:::-;53127:13:::1;53112:12;;:28;;;;;;;;;;;;;;;;;;53175:13;53156:33;;;;;;;;;;;;53020:177:::0;;:::o;43554:49::-;43599:4;43554:49;;;:::o;22003:155::-;22098:52;22117:12;:10;:12::i;:::-;22131:8;22141;22098:18;:52::i;:::-;22003:155;;:::o;52759:92::-;52801:16;52837:6;52830:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52759:92;:::o;50293:113::-;50355:7;50382:12;:16;50395:2;50382:16;;;;;;;;;;;;50375:23;;50293:113;;;:::o;52045:29::-;;;;;;;;;;;;;:::o;51937:62::-;51975:24;51937:62;:::o;46774:149::-;46858:18;46871:4;46858:12;:18::i;:::-;44045:16;44056:4;44045:10;:16::i;:::-;46889:26:::1;46901:4;46907:7;46889:11;:26::i;:::-;46774:149:::0;;;:::o;22230:168::-;22329:4;22353:18;:27;22372:7;22353:27;;;;;;;;;;;;;;;:37;22381:8;22353:37;;;;;;;;;;;;;;;;;;;;;;;;;22346:44;;22230:168;;;;:::o;22470:401::-;22686:12;:10;:12::i;:::-;22678:20;;:4;:20;;;:60;;;;22702:36;22719:4;22725:12;:10;:12::i;:::-;22702:16;:36::i;:::-;22678:60;22656:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;22818:45;22836:4;22842:2;22846;22850:6;22858:4;22818:17;:45::i;:::-;22470:401;;;;;:::o;53205:159::-;43599:4;53260:18;;44045:16;44056:4;44045:10;:16::i;:::-;53303:10:::1;53291:9;;:22;;;;;;;;;;;;;;;;;;53345:10;53329:27;;;;;;;;;;;;53205:159:::0;;:::o;44153:204::-;44238:4;44277:32;44262:47;;;:11;:47;;;;:87;;;;44313:36;44337:11;44313:23;:36::i;:::-;44262:87;44255:94;;44153:204;;;:::o;44900:105::-;44967:30;44978:4;44984:12;:10;:12::i;:::-;44967:10;:30::i;:::-;44900:105;:::o;27176:88::-;27250:6;27243:4;:13;;;;;;;;;;;;:::i;:::-;;27176:88;:::o;55006:240::-;55063:4;55084:9;55096:1;55084:13;;55080:136;55103:6;:13;;;;55099:1;:17;55080:136;;;55154:3;55141:6;55148:1;55141:9;;;;;;;;;;;;;;;;;;;;;;;;:16;55138:67;;;55185:4;55178:11;;;;;55138:67;55118:3;;;;;:::i;:::-;;;;55080:136;;;;55233:5;55226:12;;55006:240;;;;:::o;27650:729::-;27817:1;27803:16;;:2;:16;;;;27795:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27870:16;27889:12;:10;:12::i;:::-;27870:31;;27912:20;27935:21;27953:2;27935:17;:21::i;:::-;27912:44;;27967:24;27994:25;28012:6;27994:17;:25::i;:::-;27967:52;;28032:66;28053:8;28071:1;28075:2;28079:3;28084:7;28093:4;28032:20;:66::i;:::-;28132:6;28111:9;:13;28121:2;28111:13;;;;;;;;;;;:17;28125:2;28111:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28191:2;28154:52;;28187:1;28154:52;;28169:8;28154:52;;;28195:2;28199:6;28154:52;;;;;;;:::i;:::-;;;;;;;;28219:65;28239:8;28257:1;28261:2;28265:3;28270:7;28279:4;28219:19;:65::i;:::-;28297:74;28328:8;28346:1;28350:2;28354;28358:6;28366:4;28297:30;:74::i;:::-;27650:729;;;;;;;:::o;28735:813::-;28927:1;28913:16;;:2;:16;;;;28905:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29000:7;:14;28986:3;:10;:28;28978:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29072:16;29091:12;:10;:12::i;:::-;29072:31;;29116:66;29137:8;29155:1;29159:2;29163:3;29168:7;29177:4;29116:20;:66::i;:::-;29200:9;29195:103;29219:3;:10;29215:1;:14;29195:103;;;29276:7;29284:1;29276:10;;;;;;;;;;;;;;;;;;;;;;29251:9;:17;29261:3;29265:1;29261:6;;;;;;;;;;;;;;;;;;;;;;29251:17;;;;;;;;;;;:21;29269:2;29251:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;29231:3;;;;;:::i;:::-;;;;29195:103;;;;29351:2;29315:53;;29347:1;29315:53;;29329:8;29315:53;;;29355:3;29360:7;29315:53;;;;;;;:::i;:::-;;;;;;;;29381:65;29401:8;29419:1;29423:2;29427:3;29432:7;29441:4;29381:19;:65::i;:::-;29459:81;29495:8;29513:1;29517:2;29521:3;29526:7;29535:4;29459:35;:81::i;:::-;28735:813;;;;;:::o;17685:98::-;17738:7;17765:10;17758:17;;17685:98;:::o;25186:1146::-;25413:7;:14;25399:3;:10;:28;25391:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25505:1;25491:16;;:2;:16;;;;25483:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25562:16;25581:12;:10;:12::i;:::-;25562:31;;25606:60;25627:8;25637:4;25643:2;25647:3;25652:7;25661:4;25606:20;:60::i;:::-;25684:9;25679:421;25703:3;:10;25699:1;:14;25679:421;;;25735:10;25748:3;25752:1;25748:6;;;;;;;;;;;;;;;;;;;;;;25735:19;;25769:14;25786:7;25794:1;25786:10;;;;;;;;;;;;;;;;;;;;;;25769:27;;25813:19;25835:9;:13;25845:2;25835:13;;;;;;;;;;;:19;25849:4;25835:19;;;;;;;;;;;;;;;;25813:41;;25892:6;25877:11;:21;;25869:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26025:6;26011:11;:20;25989:9;:13;25999:2;25989:13;;;;;;;;;;;:19;26003:4;25989:19;;;;;;;;;;;;;;;:42;;;;26082:6;26061:9;:13;26071:2;26061:13;;;;;;;;;;;:17;26075:2;26061:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25679:421;;;25715:3;;;;:::i;:::-;;;25679:421;;;;26147:2;26117:47;;26141:4;26117:47;;26131:8;26117:47;;;26151:3;26156:7;26117:47;;;;;;;:::i;:::-;;;;;;;;26177:59;26197:8;26207:4;26213:2;26217:3;26222:7;26231:4;26177:19;:59::i;:::-;26249:75;26285:8;26295:4;26301:2;26305:3;26310:7;26319:4;26249:35;:75::i;:::-;25186:1146;;;;;;:::o;48931:238::-;49015:22;49023:4;49029:7;49015;:22::i;:::-;49010:152;;49086:4;49054:6;:12;49061:4;49054:12;;;;;;;;;;;:20;;:29;49075:7;49054:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;49137:12;:10;:12::i;:::-;49110:40;;49128:7;49110:40;;49122:4;49110:40;;;;;;;;;;49010:152;48931:238;;:::o;49301:239::-;49385:22;49393:4;49399:7;49385;:22::i;:::-;49381:152;;;49456:5;49424:6;:12;49431:4;49424:12;;;;;;;;;;;:20;;:29;49445:7;49424:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;49508:12;:10;:12::i;:::-;49481:40;;49499:7;49481:40;;49493:4;49481:40;;;;;;;;;;49381:152;49301:239;;:::o;31920:331::-;32075:8;32066:17;;:5;:17;;;;32058:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32178:8;32140:18;:25;32159:5;32140:25;;;;;;;;;;;;;;;:35;32166:8;32140:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32224:8;32202:41;;32217:5;32202:41;;;32234:8;32202:41;;;;;;:::i;:::-;;;;;;;;31920:331;;;:::o;23854:974::-;24056:1;24042:16;;:2;:16;;;;24034:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24113:16;24132:12;:10;:12::i;:::-;24113:31;;24155:20;24178:21;24196:2;24178:17;:21::i;:::-;24155:44;;24210:24;24237:25;24255:6;24237:17;:25::i;:::-;24210:52;;24275:60;24296:8;24306:4;24312:2;24316:3;24321:7;24330:4;24275:20;:60::i;:::-;24348:19;24370:9;:13;24380:2;24370:13;;;;;;;;;;;:19;24384:4;24370:19;;;;;;;;;;;;;;;;24348:41;;24423:6;24408:11;:21;;24400:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24548:6;24534:11;:20;24512:9;:13;24522:2;24512:13;;;;;;;;;;;:19;24526:4;24512:19;;;;;;;;;;;;;;;:42;;;;24597:6;24576:9;:13;24586:2;24576:13;;;;;;;;;;;:17;24590:2;24576:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24652:2;24621:46;;24646:4;24621:46;;24636:8;24621:46;;;24656:2;24660:6;24621:46;;;;;;;:::i;:::-;;;;;;;;24680:59;24700:8;24710:4;24716:2;24720:3;24725:7;24734:4;24680:19;:59::i;:::-;24752:68;24783:8;24793:4;24799:2;24803;24807:6;24815:4;24752:30;:68::i;:::-;23854:974;;;;;;;;;:::o;20032:310::-;20134:4;20186:26;20171:41;;;:11;:41;;;;:110;;;;20244:37;20229:52;;;:11;:52;;;;20171:110;:163;;;;20298:36;20322:11;20298:23;:36::i;:::-;20171:163;20151:183;;20032:310;;;:::o;45295:505::-;45384:22;45392:4;45398:7;45384;:22::i;:::-;45379:414;;45572:41;45600:7;45572:41;;45610:2;45572:19;:41::i;:::-;45686:38;45714:4;45706:13;;45721:2;45686:19;:38::i;:::-;45477:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45423:358;;;;;;;;;;;:::i;:::-;;;;;;;;45379:414;45295:505;;:::o;36184:198::-;36250:16;36279:22;36318:1;36304:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36279:41;;36342:7;36331:5;36337:1;36331:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;36369:5;36362:12;;;36184:198;;;:::o;55254:291::-;55471:66;55498:8;55508:4;55514:2;55518:3;55523:7;55532:4;55471:26;:66::i;:::-;55254:291;;;;;;:::o;55553:659::-;55750:12;;;;;;;;;;;55745:115;;55787:30;51975:24;55808:8;55787:7;:30::i;:::-;55779:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;55745:115;55877:9;;;;;;;;;;;55872:255;;55903:15;55942:9;55937:114;55961:6;:13;;;;55957:1;:17;55937:114;;;56011:24;56021:2;56025:6;56032:1;56025:9;;;;;;;;;;;;;;;;;;;;;;;;56011;:24::i;:::-;56000:35;;;;;:::i;:::-;;;55976:3;;;;;:::i;:::-;;;;55937:114;;;;56084:6;;56073:7;:17;;56065:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;55872:255;;56139:65;56165:8;56175:4;56181:2;56185:3;56190:7;56199:4;56139:25;:65::i;:::-;55553:659;;;;;;:::o;34611:744::-;34826:15;:2;:13;;;:15::i;:::-;34822:526;;;34879:2;34862:38;;;34901:8;34911:4;34917:2;34921:6;34929:4;34862:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34858:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35210:6;35203:14;;;;;;;;;;;:::i;:::-;;;;;;;;34858:479;;;35259:62;;;;;;;;;;:::i;:::-;;;;;;;;34858:479;34996:43;;;34984:55;;;:8;:55;;;;34980:154;;35064:50;;;;;;;;;;:::i;:::-;;;;;;;;34980:154;34935:214;34822:526;34611:744;;;;;;:::o;35363:813::-;35603:15;:2;:13;;;:15::i;:::-;35599:570;;;35656:2;35639:43;;;35683:8;35693:4;35699:3;35704:7;35713:4;35639:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35635:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36031:6;36024:14;;;;;;;;;;;:::i;:::-;;;;;;;;35635:523;;;36080:62;;;;;;;;;;:::i;:::-;;;;;;;;35635:523;35812:48;;;35800:60;;;:8;:60;;;;35796:159;;35885:50;;;;;;;;;;:::i;:::-;;;;;;;;35796:159;35719:251;35599:570;35363:813;;;;;;:::o;18770:157::-;18855:4;18894:25;18879:40;;;:11;:40;;;;18872:47;;18770:157;;;:::o;41112:451::-;41187:13;41213:19;41258:1;41249:6;41245:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;41235:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41213:47;;41271:15;:6;41278:1;41271:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;41297;:6;41304:1;41297:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;41328:9;41353:1;41344:6;41340:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;41328:26;;41323:135;41360:1;41356;:5;41323:135;;;41395:12;41416:3;41408:5;:11;41395:25;;;;;;;;;;;;;;;;;;41383:6;41390:1;41383:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;41445:1;41435:11;;;;;41363:3;;;;:::i;:::-;;;41323:135;;;;41485:1;41476:5;:10;41468:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41548:6;41534:21;;;41112:451;;;;:::o;50701:931::-;50940:66;50967:8;50977:4;50983:2;50987:3;50992:7;51001:4;50940:26;:66::i;:::-;51039:1;51023:18;;:4;:18;;;51019:160;;;51063:9;51058:110;51082:3;:10;51078:1;:14;51058:110;;;51142:7;51150:1;51142:10;;;;;;;;;;;;;;;;;;;;;;51118:12;:20;51131:3;51135:1;51131:6;;;;;;;;;;;;;;;;;;;;;;51118:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;51094:3;;;;:::i;:::-;;;51058:110;;;;51019:160;51209:1;51195:16;;:2;:16;;;51191:434;;;51233:9;51228:386;51252:3;:10;51248:1;:14;51228:386;;;51288:10;51301:3;51305:1;51301:6;;;;;;;;;;;;;;;;;;;;;;51288:19;;51326:14;51343:7;51351:1;51343:10;;;;;;;;;;;;;;;;;;;;;;51326:27;;51372:14;51389:12;:16;51402:2;51389:16;;;;;;;;;;;;51372:33;;51442:6;51432;:16;;51424:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51573:6;51564;:15;51545:12;:16;51558:2;51545:16;;;;;;;;;;;:34;;;;51228:386;;;51264:3;;;;:::i;:::-;;;51228:386;;;;51191:434;50701:931;;;;;;:::o;34383:220::-;;;;;;;:::o;9728:326::-;9788:4;10045:1;10023:7;:19;;;:23;10016:30;;9728:326;;;:::o;33207:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:139::-;3045:5;3083:6;3070:20;3061:29;;3099:33;3126:5;3099:33;:::i;:::-;3051:87;;;;:::o;3144:137::-;3189:5;3227:6;3214:20;3205:29;;3243:32;3269:5;3243:32;:::i;:::-;3195:86;;;;:::o;3287:141::-;3343:5;3374:6;3368:13;3359:22;;3390:32;3416:5;3390:32;:::i;:::-;3349:79;;;;:::o;3447:271::-;3502:5;3551:3;3544:4;3536:6;3532:17;3528:27;3518:2;;3569:1;3566;3559:12;3518:2;3609:6;3596:20;3634:78;3708:3;3700:6;3693:4;3685:6;3681:17;3634:78;:::i;:::-;3625:87;;3508:210;;;;;:::o;3738:273::-;3794:5;3843:3;3836:4;3828:6;3824:17;3820:27;3810:2;;3861:1;3858;3851:12;3810:2;3901:6;3888:20;3926:79;4001:3;3993:6;3986:4;3978:6;3974:17;3926:79;:::i;:::-;3917:88;;3800:211;;;;;:::o;4017:139::-;4063:5;4101:6;4088:20;4079:29;;4117:33;4144:5;4117:33;:::i;:::-;4069:87;;;;:::o;4162:407::-;4230:6;4238;4287:2;4275:9;4266:7;4262:23;4258:32;4255:2;;;4303:1;4300;4293:12;4255:2;4346:1;4371:53;4416:7;4407:6;4396:9;4392:22;4371:53;:::i;:::-;4361:63;;4317:117;4473:2;4499:53;4544:7;4535:6;4524:9;4520:22;4499:53;:::i;:::-;4489:63;;4444:118;4245:324;;;;;:::o;4575:1241::-;4729:6;4737;4745;4753;4761;4810:3;4798:9;4789:7;4785:23;4781:33;4778:2;;;4827:1;4824;4817:12;4778:2;4870:1;4895:53;4940:7;4931:6;4920:9;4916:22;4895:53;:::i;:::-;4885:63;;4841:117;4997:2;5023:53;5068:7;5059:6;5048:9;5044:22;5023:53;:::i;:::-;5013:63;;4968:118;5153:2;5142:9;5138:18;5125:32;5184:18;5176:6;5173:30;5170:2;;;5216:1;5213;5206:12;5170:2;5244:78;5314:7;5305:6;5294:9;5290:22;5244:78;:::i;:::-;5234:88;;5096:236;5399:2;5388:9;5384:18;5371:32;5430:18;5422:6;5419:30;5416:2;;;5462:1;5459;5452:12;5416:2;5490:78;5560:7;5551:6;5540:9;5536:22;5490:78;:::i;:::-;5480:88;;5342:236;5645:3;5634:9;5630:19;5617:33;5677:18;5669:6;5666:30;5663:2;;;5709:1;5706;5699:12;5663:2;5737:62;5791:7;5782:6;5771:9;5767:22;5737:62;:::i;:::-;5727:72;;5588:221;4768:1048;;;;;;;;:::o;5822:955::-;5926:6;5934;5942;5950;5958;6007:3;5995:9;5986:7;5982:23;5978:33;5975:2;;;6024:1;6021;6014:12;5975:2;6067:1;6092:53;6137:7;6128:6;6117:9;6113:22;6092:53;:::i;:::-;6082:63;;6038:117;6194:2;6220:53;6265:7;6256:6;6245:9;6241:22;6220:53;:::i;:::-;6210:63;;6165:118;6322:2;6348:53;6393:7;6384:6;6373:9;6369:22;6348:53;:::i;:::-;6338:63;;6293:118;6450:2;6476:53;6521:7;6512:6;6501:9;6497:22;6476:53;:::i;:::-;6466:63;;6421:118;6606:3;6595:9;6591:19;6578:33;6638:18;6630:6;6627:30;6624:2;;;6670:1;6667;6660:12;6624:2;6698:62;6752:7;6743:6;6732:9;6728:22;6698:62;:::i;:::-;6688:72;;6549:221;5965:812;;;;;;;;:::o;6783:1095::-;6928:6;6936;6944;6952;7001:3;6989:9;6980:7;6976:23;6972:33;6969:2;;;7018:1;7015;7008:12;6969:2;7061:1;7086:53;7131:7;7122:6;7111:9;7107:22;7086:53;:::i;:::-;7076:63;;7032:117;7216:2;7205:9;7201:18;7188:32;7247:18;7239:6;7236:30;7233:2;;;7279:1;7276;7269:12;7233:2;7307:78;7377:7;7368:6;7357:9;7353:22;7307:78;:::i;:::-;7297:88;;7159:236;7462:2;7451:9;7447:18;7434:32;7493:18;7485:6;7482:30;7479:2;;;7525:1;7522;7515:12;7479:2;7553:78;7623:7;7614:6;7603:9;7599:22;7553:78;:::i;:::-;7543:88;;7405:236;7708:2;7697:9;7693:18;7680:32;7739:18;7731:6;7728:30;7725:2;;;7771:1;7768;7761:12;7725:2;7799:62;7853:7;7844:6;7833:9;7829:22;7799:62;:::i;:::-;7789:72;;7651:220;6959:919;;;;;;;:::o;7884:401::-;7949:6;7957;8006:2;7994:9;7985:7;7981:23;7977:32;7974:2;;;8022:1;8019;8012:12;7974:2;8065:1;8090:53;8135:7;8126:6;8115:9;8111:22;8090:53;:::i;:::-;8080:63;;8036:117;8192:2;8218:50;8260:7;8251:6;8240:9;8236:22;8218:50;:::i;:::-;8208:60;;8163:115;7964:321;;;;;:::o;8291:407::-;8359:6;8367;8416:2;8404:9;8395:7;8391:23;8387:32;8384:2;;;8432:1;8429;8422:12;8384:2;8475:1;8500:53;8545:7;8536:6;8525:9;8521:22;8500:53;:::i;:::-;8490:63;;8446:117;8602:2;8628:53;8673:7;8664:6;8653:9;8649:22;8628:53;:::i;:::-;8618:63;;8573:118;8374:324;;;;;:::o;8704:809::-;8799:6;8807;8815;8823;8872:3;8860:9;8851:7;8847:23;8843:33;8840:2;;;8889:1;8886;8879:12;8840:2;8932:1;8957:53;9002:7;8993:6;8982:9;8978:22;8957:53;:::i;:::-;8947:63;;8903:117;9059:2;9085:53;9130:7;9121:6;9110:9;9106:22;9085:53;:::i;:::-;9075:63;;9030:118;9187:2;9213:53;9258:7;9249:6;9238:9;9234:22;9213:53;:::i;:::-;9203:63;;9158:118;9343:2;9332:9;9328:18;9315:32;9374:18;9366:6;9363:30;9360:2;;;9406:1;9403;9396:12;9360:2;9434:62;9488:7;9479:6;9468:9;9464:22;9434:62;:::i;:::-;9424:72;;9286:220;8830:683;;;;;;;:::o;9519:693::-;9637:6;9645;9694:2;9682:9;9673:7;9669:23;9665:32;9662:2;;;9710:1;9707;9700:12;9662:2;9781:1;9770:9;9766:17;9753:31;9811:18;9803:6;9800:30;9797:2;;;9843:1;9840;9833:12;9797:2;9871:78;9941:7;9932:6;9921:9;9917:22;9871:78;:::i;:::-;9861:88;;9724:235;10026:2;10015:9;10011:18;9998:32;10057:18;10049:6;10046:30;10043:2;;;10089:1;10086;10079:12;10043:2;10117:78;10187:7;10178:6;10167:9;10163:22;10117:78;:::i;:::-;10107:88;;9969:236;9652:560;;;;;:::o;10218:981::-;10370:6;10378;10386;10435:2;10423:9;10414:7;10410:23;10406:32;10403:2;;;10451:1;10448;10441:12;10403:2;10522:1;10511:9;10507:17;10494:31;10552:18;10544:6;10541:30;10538:2;;;10584:1;10581;10574:12;10538:2;10612:78;10682:7;10673:6;10662:9;10658:22;10612:78;:::i;:::-;10602:88;;10465:235;10767:2;10756:9;10752:18;10739:32;10798:18;10790:6;10787:30;10784:2;;;10830:1;10827;10820:12;10784:2;10858:78;10928:7;10919:6;10908:9;10904:22;10858:78;:::i;:::-;10848:88;;10710:236;11013:2;11002:9;10998:18;10985:32;11044:18;11036:6;11033:30;11030:2;;;11076:1;11073;11066:12;11030:2;11104:78;11174:7;11165:6;11154:9;11150:22;11104:78;:::i;:::-;11094:88;;10956:236;10393:806;;;;;:::o;11205:405::-;11289:6;11338:2;11326:9;11317:7;11313:23;11309:32;11306:2;;;11354:1;11351;11344:12;11306:2;11425:1;11414:9;11410:17;11397:31;11455:18;11447:6;11444:30;11441:2;;;11487:1;11484;11477:12;11441:2;11515:78;11585:7;11576:6;11565:9;11561:22;11515:78;:::i;:::-;11505:88;;11368:235;11296:314;;;;:::o;11616:256::-;11672:6;11721:2;11709:9;11700:7;11696:23;11692:32;11689:2;;;11737:1;11734;11727:12;11689:2;11780:1;11805:50;11847:7;11838:6;11827:9;11823:22;11805:50;:::i;:::-;11795:60;;11751:114;11679:193;;;;:::o;11878:262::-;11937:6;11986:2;11974:9;11965:7;11961:23;11957:32;11954:2;;;12002:1;11999;11992:12;11954:2;12045:1;12070:53;12115:7;12106:6;12095:9;12091:22;12070:53;:::i;:::-;12060:63;;12016:117;11944:196;;;;:::o;12146:407::-;12214:6;12222;12271:2;12259:9;12250:7;12246:23;12242:32;12239:2;;;12287:1;12284;12277:12;12239:2;12330:1;12355:53;12400:7;12391:6;12380:9;12376:22;12355:53;:::i;:::-;12345:63;;12301:117;12457:2;12483:53;12528:7;12519:6;12508:9;12504:22;12483:53;:::i;:::-;12473:63;;12428:118;12229:324;;;;;:::o;12559:260::-;12617:6;12666:2;12654:9;12645:7;12641:23;12637:32;12634:2;;;12682:1;12679;12672:12;12634:2;12725:1;12750:52;12794:7;12785:6;12774:9;12770:22;12750:52;:::i;:::-;12740:62;;12696:116;12624:195;;;;:::o;12825:282::-;12894:6;12943:2;12931:9;12922:7;12918:23;12914:32;12911:2;;;12959:1;12956;12949:12;12911:2;13002:1;13027:63;13082:7;13073:6;13062:9;13058:22;13027:63;:::i;:::-;13017:73;;12973:127;12901:206;;;;:::o;13113:375::-;13182:6;13231:2;13219:9;13210:7;13206:23;13202:32;13199:2;;;13247:1;13244;13237:12;13199:2;13318:1;13307:9;13303:17;13290:31;13348:18;13340:6;13337:30;13334:2;;;13380:1;13377;13370:12;13334:2;13408:63;13463:7;13454:6;13443:9;13439:22;13408:63;:::i;:::-;13398:73;;13261:220;13189:299;;;;:::o;13494:262::-;13553:6;13602:2;13590:9;13581:7;13577:23;13573:32;13570:2;;;13618:1;13615;13608:12;13570:2;13661:1;13686:53;13731:7;13722:6;13711:9;13707:22;13686:53;:::i;:::-;13676:63;;13632:117;13560:196;;;;:::o;13762:179::-;13831:10;13852:46;13894:3;13886:6;13852:46;:::i;:::-;13930:4;13925:3;13921:14;13907:28;;13842:99;;;;:::o;13947:195::-;14024:10;14045:54;14095:3;14087:6;14045:54;:::i;:::-;14131:4;14126:3;14122:14;14108:28;;14035:107;;;;:::o;14148:118::-;14235:24;14253:5;14235:24;:::i;:::-;14230:3;14223:37;14213:53;;:::o;14302:732::-;14421:3;14450:54;14498:5;14450:54;:::i;:::-;14520:86;14599:6;14594:3;14520:86;:::i;:::-;14513:93;;14630:56;14680:5;14630:56;:::i;:::-;14709:7;14740:1;14725:284;14750:6;14747:1;14744:13;14725:284;;;14826:6;14820:13;14853:63;14912:3;14897:13;14853:63;:::i;:::-;14846:70;;14939:60;14992:6;14939:60;:::i;:::-;14929:70;;14785:224;14772:1;14769;14765:9;14760:14;;14725:284;;;14729:14;15025:3;15018:10;;14426:608;;;;;;;:::o;15070:776::-;15207:3;15236:54;15284:5;15236:54;:::i;:::-;15306:104;15403:6;15398:3;15306:104;:::i;:::-;15299:111;;15434:56;15484:5;15434:56;:::i;:::-;15513:7;15544:1;15529:292;15554:6;15551:1;15548:13;15529:292;;;15630:6;15624:13;15657:71;15724:3;15709:13;15657:71;:::i;:::-;15650:78;;15751:60;15804:6;15751:60;:::i;:::-;15741:70;;15589:232;15576:1;15573;15569:9;15564:14;;15529:292;;;15533:14;15837:3;15830:10;;15212:634;;;;;;;:::o;15852:109::-;15933:21;15948:5;15933:21;:::i;:::-;15928:3;15921:34;15911:50;;:::o;15967:118::-;16054:24;16072:5;16054:24;:::i;:::-;16049:3;16042:37;16032:53;;:::o;16091:360::-;16177:3;16205:38;16237:5;16205:38;:::i;:::-;16259:70;16322:6;16317:3;16259:70;:::i;:::-;16252:77;;16338:52;16383:6;16378:3;16371:4;16364:5;16360:16;16338:52;:::i;:::-;16415:29;16437:6;16415:29;:::i;:::-;16410:3;16406:39;16399:46;;16181:270;;;;;:::o;16457:364::-;16545:3;16573:39;16606:5;16573:39;:::i;:::-;16628:71;16692:6;16687:3;16628:71;:::i;:::-;16621:78;;16708:52;16753:6;16748:3;16741:4;16734:5;16730:16;16708:52;:::i;:::-;16785:29;16807:6;16785:29;:::i;:::-;16780:3;16776:39;16769:46;;16549:272;;;;;:::o;16827:377::-;16933:3;16961:39;16994:5;16961:39;:::i;:::-;17016:89;17098:6;17093:3;17016:89;:::i;:::-;17009:96;;17114:52;17159:6;17154:3;17147:4;17140:5;17136:16;17114:52;:::i;:::-;17191:6;17186:3;17182:16;17175:23;;16937:267;;;;;:::o;17210:366::-;17352:3;17373:67;17437:2;17432:3;17373:67;:::i;:::-;17366:74;;17449:93;17538:3;17449:93;:::i;:::-;17567:2;17562:3;17558:12;17551:19;;17356:220;;;:::o;17582:366::-;17724:3;17745:67;17809:2;17804:3;17745:67;:::i;:::-;17738:74;;17821:93;17910:3;17821:93;:::i;:::-;17939:2;17934:3;17930:12;17923:19;;17728:220;;;:::o;17954:366::-;18096:3;18117:67;18181:2;18176:3;18117:67;:::i;:::-;18110:74;;18193:93;18282:3;18193:93;:::i;:::-;18311:2;18306:3;18302:12;18295:19;;18100:220;;;:::o;18326:366::-;18468:3;18489:67;18553:2;18548:3;18489:67;:::i;:::-;18482:74;;18565:93;18654:3;18565:93;:::i;:::-;18683:2;18678:3;18674:12;18667:19;;18472:220;;;:::o;18698:366::-;18840:3;18861:67;18925:2;18920:3;18861:67;:::i;:::-;18854:74;;18937:93;19026:3;18937:93;:::i;:::-;19055:2;19050:3;19046:12;19039:19;;18844:220;;;:::o;19070:366::-;19212:3;19233:67;19297:2;19292:3;19233:67;:::i;:::-;19226:74;;19309:93;19398:3;19309:93;:::i;:::-;19427:2;19422:3;19418:12;19411:19;;19216:220;;;:::o;19442:366::-;19584:3;19605:67;19669:2;19664:3;19605:67;:::i;:::-;19598:74;;19681:93;19770:3;19681:93;:::i;:::-;19799:2;19794:3;19790:12;19783:19;;19588:220;;;:::o;19814:366::-;19956:3;19977:67;20041:2;20036:3;19977:67;:::i;:::-;19970:74;;20053:93;20142:3;20053:93;:::i;:::-;20171:2;20166:3;20162:12;20155:19;;19960:220;;;:::o;20186:366::-;20328:3;20349:67;20413:2;20408:3;20349:67;:::i;:::-;20342:74;;20425:93;20514:3;20425:93;:::i;:::-;20543:2;20538:3;20534:12;20527:19;;20332:220;;;:::o;20558:366::-;20700:3;20721:67;20785:2;20780:3;20721:67;:::i;:::-;20714:74;;20797:93;20886:3;20797:93;:::i;:::-;20915:2;20910:3;20906:12;20899:19;;20704:220;;;:::o;20930:366::-;21072:3;21093:67;21157:2;21152:3;21093:67;:::i;:::-;21086:74;;21169:93;21258:3;21169:93;:::i;:::-;21287:2;21282:3;21278:12;21271:19;;21076:220;;;:::o;21302:366::-;21444:3;21465:67;21529:2;21524:3;21465:67;:::i;:::-;21458:74;;21541:93;21630:3;21541:93;:::i;:::-;21659:2;21654:3;21650:12;21643:19;;21448:220;;;:::o;21674:402::-;21834:3;21855:85;21937:2;21932:3;21855:85;:::i;:::-;21848:92;;21949:93;22038:3;21949:93;:::i;:::-;22067:2;22062:3;22058:12;22051:19;;21838:238;;;:::o;22082:366::-;22224:3;22245:67;22309:2;22304:3;22245:67;:::i;:::-;22238:74;;22321:93;22410:3;22321:93;:::i;:::-;22439:2;22434:3;22430:12;22423:19;;22228:220;;;:::o;22454:366::-;22596:3;22617:67;22681:2;22676:3;22617:67;:::i;:::-;22610:74;;22693:93;22782:3;22693:93;:::i;:::-;22811:2;22806:3;22802:12;22795:19;;22600:220;;;:::o;22826:366::-;22968:3;22989:67;23053:2;23048:3;22989:67;:::i;:::-;22982:74;;23065:93;23154:3;23065:93;:::i;:::-;23183:2;23178:3;23174:12;23167:19;;22972:220;;;:::o;23198:366::-;23340:3;23361:67;23425:2;23420:3;23361:67;:::i;:::-;23354:74;;23437:93;23526:3;23437:93;:::i;:::-;23555:2;23550:3;23546:12;23539:19;;23344:220;;;:::o;23570:402::-;23730:3;23751:85;23833:2;23828:3;23751:85;:::i;:::-;23744:92;;23845:93;23934:3;23845:93;:::i;:::-;23963:2;23958:3;23954:12;23947:19;;23734:238;;;:::o;23978:366::-;24120:3;24141:67;24205:2;24200:3;24141:67;:::i;:::-;24134:74;;24217:93;24306:3;24217:93;:::i;:::-;24335:2;24330:3;24326:12;24319:19;;24124:220;;;:::o;24350:108::-;24427:24;24445:5;24427:24;:::i;:::-;24422:3;24415:37;24405:53;;:::o;24464:118::-;24551:24;24569:5;24551:24;:::i;:::-;24546:3;24539:37;24529:53;;:::o;24588:116::-;24673:24;24691:5;24673:24;:::i;:::-;24668:3;24661:37;24651:53;;:::o;24710:335::-;24872:3;24894:125;25015:3;25006:6;24894:125;:::i;:::-;24887:132;;25036:3;25029:10;;24876:169;;;;:::o;25051:967::-;25433:3;25455:148;25599:3;25455:148;:::i;:::-;25448:155;;25620:95;25711:3;25702:6;25620:95;:::i;:::-;25613:102;;25732:148;25876:3;25732:148;:::i;:::-;25725:155;;25897:95;25988:3;25979:6;25897:95;:::i;:::-;25890:102;;26009:3;26002:10;;25437:581;;;;;:::o;26024:1053::-;26347:4;26385:3;26374:9;26370:19;26362:27;;26399:71;26467:1;26456:9;26452:17;26443:6;26399:71;:::i;:::-;26480:72;26548:2;26537:9;26533:18;26524:6;26480:72;:::i;:::-;26599:9;26593:4;26589:20;26584:2;26573:9;26569:18;26562:48;26627:108;26730:4;26721:6;26627:108;:::i;:::-;26619:116;;26782:9;26776:4;26772:20;26767:2;26756:9;26752:18;26745:48;26810:108;26913:4;26904:6;26810:108;:::i;:::-;26802:116;;26966:9;26960:4;26956:20;26950:3;26939:9;26935:19;26928:49;26994:76;27065:4;27056:6;26994:76;:::i;:::-;26986:84;;26352:725;;;;;;;;:::o;27083:751::-;27306:4;27344:3;27333:9;27329:19;27321:27;;27358:71;27426:1;27415:9;27411:17;27402:6;27358:71;:::i;:::-;27439:72;27507:2;27496:9;27492:18;27483:6;27439:72;:::i;:::-;27521;27589:2;27578:9;27574:18;27565:6;27521:72;:::i;:::-;27603;27671:2;27660:9;27656:18;27647:6;27603:72;:::i;:::-;27723:9;27717:4;27713:20;27707:3;27696:9;27692:19;27685:49;27751:76;27822:4;27813:6;27751:76;:::i;:::-;27743:84;;27311:523;;;;;;;;:::o;27840:373::-;27983:4;28021:2;28010:9;28006:18;27998:26;;28070:9;28064:4;28060:20;28056:1;28045:9;28041:17;28034:47;28098:108;28201:4;28192:6;28098:108;:::i;:::-;28090:116;;27988:225;;;;:::o;28219:634::-;28440:4;28478:2;28467:9;28463:18;28455:26;;28527:9;28521:4;28517:20;28513:1;28502:9;28498:17;28491:47;28555:108;28658:4;28649:6;28555:108;:::i;:::-;28547:116;;28710:9;28704:4;28700:20;28695:2;28684:9;28680:18;28673:48;28738:108;28841:4;28832:6;28738:108;:::i;:::-;28730:116;;28445:408;;;;;:::o;28859:210::-;28946:4;28984:2;28973:9;28969:18;28961:26;;28997:65;29059:1;29048:9;29044:17;29035:6;28997:65;:::i;:::-;28951:118;;;;:::o;29075:222::-;29168:4;29206:2;29195:9;29191:18;29183:26;;29219:71;29287:1;29276:9;29272:17;29263:6;29219:71;:::i;:::-;29173:124;;;;:::o;29303:313::-;29416:4;29454:2;29443:9;29439:18;29431:26;;29503:9;29497:4;29493:20;29489:1;29478:9;29474:17;29467:47;29531:78;29604:4;29595:6;29531:78;:::i;:::-;29523:86;;29421:195;;;;:::o;29622:419::-;29788:4;29826:2;29815:9;29811:18;29803:26;;29875:9;29869:4;29865:20;29861:1;29850:9;29846:17;29839:47;29903:131;30029:4;29903:131;:::i;:::-;29895:139;;29793:248;;;:::o;30047:419::-;30213:4;30251:2;30240:9;30236:18;30228:26;;30300:9;30294:4;30290:20;30286:1;30275:9;30271:17;30264:47;30328:131;30454:4;30328:131;:::i;:::-;30320:139;;30218:248;;;:::o;30472:419::-;30638:4;30676:2;30665:9;30661:18;30653:26;;30725:9;30719:4;30715:20;30711:1;30700:9;30696:17;30689:47;30753:131;30879:4;30753:131;:::i;:::-;30745:139;;30643:248;;;:::o;30897:419::-;31063:4;31101:2;31090:9;31086:18;31078:26;;31150:9;31144:4;31140:20;31136:1;31125:9;31121:17;31114:47;31178:131;31304:4;31178:131;:::i;:::-;31170:139;;31068:248;;;:::o;31322:419::-;31488:4;31526:2;31515:9;31511:18;31503:26;;31575:9;31569:4;31565:20;31561:1;31550:9;31546:17;31539:47;31603:131;31729:4;31603:131;:::i;:::-;31595:139;;31493:248;;;:::o;31747:419::-;31913:4;31951:2;31940:9;31936:18;31928:26;;32000:9;31994:4;31990:20;31986:1;31975:9;31971:17;31964:47;32028:131;32154:4;32028:131;:::i;:::-;32020:139;;31918:248;;;:::o;32172:419::-;32338:4;32376:2;32365:9;32361:18;32353:26;;32425:9;32419:4;32415:20;32411:1;32400:9;32396:17;32389:47;32453:131;32579:4;32453:131;:::i;:::-;32445:139;;32343:248;;;:::o;32597:419::-;32763:4;32801:2;32790:9;32786:18;32778:26;;32850:9;32844:4;32840:20;32836:1;32825:9;32821:17;32814:47;32878:131;33004:4;32878:131;:::i;:::-;32870:139;;32768:248;;;:::o;33022:419::-;33188:4;33226:2;33215:9;33211:18;33203:26;;33275:9;33269:4;33265:20;33261:1;33250:9;33246:17;33239:47;33303:131;33429:4;33303:131;:::i;:::-;33295:139;;33193:248;;;:::o;33447:419::-;33613:4;33651:2;33640:9;33636:18;33628:26;;33700:9;33694:4;33690:20;33686:1;33675:9;33671:17;33664:47;33728:131;33854:4;33728:131;:::i;:::-;33720:139;;33618:248;;;:::o;33872:419::-;34038:4;34076:2;34065:9;34061:18;34053:26;;34125:9;34119:4;34115:20;34111:1;34100:9;34096:17;34089:47;34153:131;34279:4;34153:131;:::i;:::-;34145:139;;34043:248;;;:::o;34297:419::-;34463:4;34501:2;34490:9;34486:18;34478:26;;34550:9;34544:4;34540:20;34536:1;34525:9;34521:17;34514:47;34578:131;34704:4;34578:131;:::i;:::-;34570:139;;34468:248;;;:::o;34722:419::-;34888:4;34926:2;34915:9;34911:18;34903:26;;34975:9;34969:4;34965:20;34961:1;34950:9;34946:17;34939:47;35003:131;35129:4;35003:131;:::i;:::-;34995:139;;34893:248;;;:::o;35147:419::-;35313:4;35351:2;35340:9;35336:18;35328:26;;35400:9;35394:4;35390:20;35386:1;35375:9;35371:17;35364:47;35428:131;35554:4;35428:131;:::i;:::-;35420:139;;35318:248;;;:::o;35572:419::-;35738:4;35776:2;35765:9;35761:18;35753:26;;35825:9;35819:4;35815:20;35811:1;35800:9;35796:17;35789:47;35853:131;35979:4;35853:131;:::i;:::-;35845:139;;35743:248;;;:::o;35997:419::-;36163:4;36201:2;36190:9;36186:18;36178:26;;36250:9;36244:4;36240:20;36236:1;36225:9;36221:17;36214:47;36278:131;36404:4;36278:131;:::i;:::-;36270:139;;36168:248;;;:::o;36422:419::-;36588:4;36626:2;36615:9;36611:18;36603:26;;36675:9;36669:4;36665:20;36661:1;36650:9;36646:17;36639:47;36703:131;36829:4;36703:131;:::i;:::-;36695:139;;36593:248;;;:::o;36847:222::-;36940:4;36978:2;36967:9;36963:18;36955:26;;36991:71;37059:1;37048:9;37044:17;37035:6;36991:71;:::i;:::-;36945:124;;;;:::o;37075:332::-;37196:4;37234:2;37223:9;37219:18;37211:26;;37247:71;37315:1;37304:9;37300:17;37291:6;37247:71;:::i;:::-;37328:72;37396:2;37385:9;37381:18;37372:6;37328:72;:::i;:::-;37201:206;;;;;:::o;37413:129::-;37447:6;37474:20;;:::i;:::-;37464:30;;37503:33;37531:4;37523:6;37503:33;:::i;:::-;37454:88;;;:::o;37548:75::-;37581:6;37614:2;37608:9;37598:19;;37588:35;:::o;37629:311::-;37706:4;37796:18;37788:6;37785:30;37782:2;;;37818:18;;:::i;:::-;37782:2;37868:4;37860:6;37856:17;37848:25;;37928:4;37922;37918:15;37910:23;;37711:229;;;:::o;37946:311::-;38023:4;38113:18;38105:6;38102:30;38099:2;;;38135:18;;:::i;:::-;38099:2;38185:4;38177:6;38173:17;38165:25;;38245:4;38239;38235:15;38227:23;;38028:229;;;:::o;38263:307::-;38324:4;38414:18;38406:6;38403:30;38400:2;;;38436:18;;:::i;:::-;38400:2;38474:29;38496:6;38474:29;:::i;:::-;38466:37;;38558:4;38552;38548:15;38540:23;;38329:241;;;:::o;38576:308::-;38638:4;38728:18;38720:6;38717:30;38714:2;;;38750:18;;:::i;:::-;38714:2;38788:29;38810:6;38788:29;:::i;:::-;38780:37;;38872:4;38866;38862:15;38854:23;;38643:241;;;:::o;38890:132::-;38957:4;38980:3;38972:11;;39010:4;39005:3;39001:14;38993:22;;38962:60;;;:::o;39028:114::-;39095:6;39129:5;39123:12;39113:22;;39102:40;;;:::o;39148:98::-;39199:6;39233:5;39227:12;39217:22;;39206:40;;;:::o;39252:99::-;39304:6;39338:5;39332:12;39322:22;;39311:40;;;:::o;39357:113::-;39427:4;39459;39454:3;39450:14;39442:22;;39432:38;;;:::o;39476:184::-;39575:11;39609:6;39604:3;39597:19;39649:4;39644:3;39640:14;39625:29;;39587:73;;;;:::o;39666:163::-;39783:11;39820:3;39805:18;;39795:34;;;;:::o;39835:168::-;39918:11;39952:6;39947:3;39940:19;39992:4;39987:3;39983:14;39968:29;;39930:73;;;;:::o;40009:169::-;40093:11;40127:6;40122:3;40115:19;40167:4;40162:3;40158:14;40143:29;;40105:73;;;;:::o;40184:148::-;40286:11;40323:3;40308:18;;40298:34;;;;:::o;40338:305::-;40378:3;40397:20;40415:1;40397:20;:::i;:::-;40392:25;;40431:20;40449:1;40431:20;:::i;:::-;40426:25;;40585:1;40517:66;40513:74;40510:1;40507:81;40504:2;;;40591:18;;:::i;:::-;40504:2;40635:1;40632;40628:9;40621:16;;40382:261;;;;:::o;40649:348::-;40689:7;40712:20;40730:1;40712:20;:::i;:::-;40707:25;;40746:20;40764:1;40746:20;:::i;:::-;40741:25;;40934:1;40866:66;40862:74;40859:1;40856:81;40851:1;40844:9;40837:17;40833:105;40830:2;;;40941:18;;:::i;:::-;40830:2;40989:1;40986;40982:9;40971:20;;40697:300;;;;:::o;41003:96::-;41040:7;41069:24;41087:5;41069:24;:::i;:::-;41058:35;;41048:51;;;:::o;41105:90::-;41139:7;41182:5;41175:13;41168:21;41157:32;;41147:48;;;:::o;41201:77::-;41238:7;41267:5;41256:16;;41246:32;;;:::o;41284:149::-;41320:7;41360:66;41353:5;41349:78;41338:89;;41328:105;;;:::o;41439:126::-;41476:7;41516:42;41509:5;41505:54;41494:65;;41484:81;;;:::o;41571:77::-;41608:7;41637:5;41626:16;;41616:32;;;:::o;41654:154::-;41738:6;41733:3;41728;41715:30;41800:1;41791:6;41786:3;41782:16;41775:27;41705:103;;;:::o;41814:307::-;41882:1;41892:113;41906:6;41903:1;41900:13;41892:113;;;41991:1;41986:3;41982:11;41976:18;41972:1;41967:3;41963:11;41956:39;41928:2;41925:1;41921:10;41916:15;;41892:113;;;42023:6;42020:1;42017:13;42014:2;;;42103:1;42094:6;42089:3;42085:16;42078:27;42014:2;41863:258;;;;:::o;42127:171::-;42166:3;42189:24;42207:5;42189:24;:::i;:::-;42180:33;;42235:4;42228:5;42225:15;42222:2;;;42243:18;;:::i;:::-;42222:2;42290:1;42283:5;42279:13;42272:20;;42170:128;;;:::o;42304:320::-;42348:6;42385:1;42379:4;42375:12;42365:22;;42432:1;42426:4;42422:12;42453:18;42443:2;;42509:4;42501:6;42497:17;42487:27;;42443:2;42571;42563:6;42560:14;42540:18;42537:38;42534:2;;;42590:18;;:::i;:::-;42534:2;42355:269;;;;:::o;42630:281::-;42713:27;42735:4;42713:27;:::i;:::-;42705:6;42701:40;42843:6;42831:10;42828:22;42807:18;42795:10;42792:34;42789:62;42786:2;;;42854:18;;:::i;:::-;42786:2;42894:10;42890:2;42883:22;42673:238;;;:::o;42917:233::-;42956:3;42979:24;42997:5;42979:24;:::i;:::-;42970:33;;43025:66;43018:5;43015:77;43012:2;;;43095:18;;:::i;:::-;43012:2;43142:1;43135:5;43131:13;43124:20;;42960:190;;;:::o;43156:180::-;43204:77;43201:1;43194:88;43301:4;43298:1;43291:15;43325:4;43322:1;43315:15;43342:180;43390:77;43387:1;43380:88;43487:4;43484:1;43477:15;43511:4;43508:1;43501:15;43528:180;43576:77;43573:1;43566:88;43673:4;43670:1;43663:15;43697:4;43694:1;43687:15;43714:183;43749:3;43787:1;43769:16;43766:23;43763:2;;;43825:1;43822;43819;43804:23;43847:34;43878:1;43872:8;43847:34;:::i;:::-;43840:41;;43763:2;43753:144;:::o;43903:102::-;43944:6;43995:2;43991:7;43986:2;43979:5;43975:14;43971:28;43961:38;;43951:54;;;:::o;44011:106::-;44055:8;44104:5;44099:3;44095:15;44074:36;;44064:53;;;:::o;44123:239::-;44263:34;44259:1;44251:6;44247:14;44240:58;44332:22;44327:2;44319:6;44315:15;44308:47;44229:133;:::o;44368:182::-;44508:34;44504:1;44496:6;44492:14;44485:58;44474:76;:::o;44556:227::-;44696:34;44692:1;44684:6;44680:14;44673:58;44765:10;44760:2;44752:6;44748:15;44741:35;44662:121;:::o;44789:230::-;44929:34;44925:1;44917:6;44913:14;44906:58;44998:13;44993:2;44985:6;44981:15;44974:38;44895:124;:::o;45025:228::-;45165:34;45161:1;45153:6;45149:14;45142:58;45234:11;45229:2;45221:6;45217:15;45210:36;45131:122;:::o;45259:224::-;45399:34;45395:1;45387:6;45383:14;45376:58;45468:7;45463:2;45455:6;45451:15;45444:32;45365:118;:::o;45489:237::-;45629:34;45625:1;45617:6;45613:14;45606:58;45698:20;45693:2;45685:6;45681:15;45674:45;45595:131;:::o;45732:177::-;45872:29;45868:1;45860:6;45856:14;45849:53;45838:71;:::o;45915:176::-;46055:28;46051:1;46043:6;46039:14;46032:52;46021:70;:::o;46097:229::-;46237:34;46233:1;46225:6;46221:14;46214:58;46306:12;46301:2;46293:6;46289:15;46282:37;46203:123;:::o;46332:227::-;46472:34;46468:1;46460:6;46456:14;46449:58;46541:10;46536:2;46528:6;46524:15;46517:35;46438:121;:::o;46565:170::-;46705:22;46701:1;46693:6;46689:14;46682:46;46671:64;:::o;46741:173::-;46881:25;46877:1;46869:6;46865:14;46858:49;46847:67;:::o;46920:228::-;47060:34;47056:1;47048:6;47044:14;47037:58;47129:11;47124:2;47116:6;47112:15;47105:36;47026:122;:::o;47154:228::-;47294:34;47290:1;47282:6;47278:14;47271:58;47363:11;47358:2;47350:6;47346:15;47339:36;47260:122;:::o;47388:227::-;47528:34;47524:1;47516:6;47512:14;47505:58;47597:10;47592:2;47584:6;47580:15;47573:35;47494:121;:::o;47621:220::-;47761:34;47757:1;47749:6;47745:14;47738:58;47830:3;47825:2;47817:6;47813:15;47806:28;47727:114;:::o;47847:167::-;47987:19;47983:1;47975:6;47971:14;47964:43;47953:61;:::o;48020:234::-;48160:34;48156:1;48148:6;48144:14;48137:58;48229:17;48224:2;48216:6;48212:15;48205:42;48126:128;:::o;48260:711::-;48299:3;48337:4;48319:16;48316:26;48313:2;;;48345:5;;48313:2;48374:20;;:::i;:::-;48449:1;48431:16;48427:24;48424:1;48418:4;48403:49;48482:4;48476:11;48581:16;48574:4;48566:6;48562:17;48559:39;48526:18;48518:6;48515:30;48499:113;48496:2;;;48627:5;;;;48496:2;48673:6;48667:4;48663:17;48709:3;48703:10;48736:18;48728:6;48725:30;48722:2;;;48758:5;;;;;;48722:2;48806:6;48799:4;48794:3;48790:14;48786:27;48865:1;48847:16;48843:24;48837:4;48833:35;48828:3;48825:44;48822:2;;;48872:5;;;;;;;48822:2;48889:57;48937:6;48931:4;48927:17;48919:6;48915:30;48909:4;48889:57;:::i;:::-;48962:3;48955:10;;48303:668;;;;;;;:::o;48977:122::-;49050:24;49068:5;49050:24;:::i;:::-;49043:5;49040:35;49030:2;;49089:1;49086;49079:12;49030:2;49020:79;:::o;49105:116::-;49175:21;49190:5;49175:21;:::i;:::-;49168:5;49165:32;49155:2;;49211:1;49208;49201:12;49155:2;49145:76;:::o;49227:122::-;49300:24;49318:5;49300:24;:::i;:::-;49293:5;49290:35;49280:2;;49339:1;49336;49329:12;49280:2;49270:79;:::o;49355:120::-;49427:23;49444:5;49427:23;:::i;:::-;49420:5;49417:34;49407:2;;49465:1;49462;49455:12;49407:2;49397:78;:::o;49481:122::-;49554:24;49572:5;49554:24;:::i;:::-;49547:5;49544:35;49534:2;;49593:1;49590;49583:12;49534:2;49524:79;:::o
Swarm Source
ipfs://a97ec13341b60c0cd7e7de8f571384348ab05e2664c6d299500d7b30ac6c2aef
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.