Contract Overview
[ Download CSV Export ]
Contract Name:
Shards
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-12-12 */ // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.0 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.0 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: ShardSFT.sol pragma solidity 0.8.9; contract Shards is ERC1155, Ownable { bool public publicSaleActive; uint256 public constant MAX_SUPPLY = 100000000; uint public mintPrice = 0.1 ether; uint256 private tokenCount; modifier whenPublicSaleActive() { require(publicSaleActive, "Public sale is not active"); _; } constructor() ERC1155("ipfs://QmP2ARYVB5ZDhNSXLkcLq1gdYzsr8Pg9hGwfekhbLobgHV") {} function startPublicSale() external onlyOwner { require(!publicSaleActive, "Public sale has already begun"); publicSaleActive = true; } function pausePublicSale() external onlyOwner whenPublicSaleActive { publicSaleActive = false; } function mint(uint256 numNfts) external payable whenPublicSaleActive { require(tokenCount + numNfts <= MAX_SUPPLY, "Minting would exceed max supply"); require(numNfts > 9 && numNfts < 1001, "Must mint at least ten Shards and less than 1000 Shards per transaction"); require(mintPrice * numNfts <= msg.value, "MATIC value sent is not correct"); _mint(msg.sender, 0, numNfts, ""); tokenCount += numNfts; } function getCount() external view returns(uint256) { return tokenCount; } function withdraw () public payable onlyOwner() { require(address(this).balance > 0); uint contractBalance = address(this).balance; payable(_msgSender()).transfer(contractBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numNfts","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pausePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405267016345785d8a00006004553480156200001d57600080fd5b50604051806060016040528060358152602001620037746035913962000049816200007060201b60201c565b506200006a6200005e6200008c60201b60201c565b6200009460201b60201c565b6200026f565b8060029080519060200190620000889291906200015a565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001689062000239565b90600052602060002090601f0160209004810192826200018c5760008555620001d8565b82601f10620001a757805160ff1916838001178555620001d8565b82800160010185558215620001d8579182015b82811115620001d7578251825591602001919060010190620001ba565b5b509050620001e79190620001eb565b5090565b5b8082111562000206576000816000905550600101620001ec565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200025257607f821691505b602082108114156200026957620002686200020a565b5b50919050565b6134f5806200027f6000396000f3fe6080604052600436106101135760003560e01c80636817c76c116100a0578063a87d942c11610064578063a87d942c1461034a578063bc8893b414610375578063e985e9c5146103a0578063f242432a146103dd578063f2fde38b1461040657610113565b80636817c76c14610298578063715018a6146102c35780638da5cb5b146102da578063a0712d6814610305578063a22cb4651461032157610113565b80630e89341c116100e75780630e89341c146101c05780632eb2c2d6146101fd57806332cb6b0c146102265780633ccfd60b146102515780634e1273f41461025b57610113565b8062fdd58e1461011857806301ffc9a7146101555780630c1c972a146101925780630c41f497146101a9575b600080fd5b34801561012457600080fd5b5061013f600480360381019061013a9190611e4f565b61042f565b60405161014c9190611e9e565b60405180910390f35b34801561016157600080fd5b5061017c60048036038101906101779190611f11565b6104f8565b6040516101899190611f59565b60405180910390f35b34801561019e57600080fd5b506101a76105da565b005b3480156101b557600080fd5b506101be6106c3565b005b3480156101cc57600080fd5b506101e760048036038101906101e29190611f74565b6107ab565b6040516101f4919061203a565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190612259565b61083f565b005b34801561023257600080fd5b5061023b6108e0565b6040516102489190611e9e565b60405180910390f35b6102596108e8565b005b34801561026757600080fd5b50610282600480360381019061027d91906123eb565b6109c7565b60405161028f9190612521565b60405180910390f35b3480156102a457600080fd5b506102ad610ae0565b6040516102ba9190611e9e565b60405180910390f35b3480156102cf57600080fd5b506102d8610ae6565b005b3480156102e657600080fd5b506102ef610b6e565b6040516102fc9190612552565b60405180910390f35b61031f600480360381019061031a9190611f74565b610b98565b005b34801561032d57600080fd5b5061034860048036038101906103439190612599565b610d13565b005b34801561035657600080fd5b5061035f610d29565b60405161036c9190611e9e565b60405180910390f35b34801561038157600080fd5b5061038a610d33565b6040516103979190611f59565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c291906125d9565b610d46565b6040516103d49190611f59565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612619565b610dda565b005b34801561041257600080fd5b5061042d600480360381019061042891906126b0565b610e7b565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104979061274f565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d357506105d282610f73565b5b9050919050565b6105e2610fdd565b73ffffffffffffffffffffffffffffffffffffffff16610600610b6e565b73ffffffffffffffffffffffffffffffffffffffff1614610656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064d906127bb565b60405180910390fd5b600360149054906101000a900460ff16156106a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069d90612827565b60405180910390fd5b6001600360146101000a81548160ff021916908315150217905550565b6106cb610fdd565b73ffffffffffffffffffffffffffffffffffffffff166106e9610b6e565b73ffffffffffffffffffffffffffffffffffffffff161461073f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610736906127bb565b60405180910390fd5b600360149054906101000a900460ff1661078e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078590612893565b60405180910390fd5b6000600360146101000a81548160ff021916908315150217905550565b6060600280546107ba906128e2565b80601f01602080910402602001604051908101604052809291908181526020018280546107e6906128e2565b80156108335780601f1061080857610100808354040283529160200191610833565b820191906000526020600020905b81548152906001019060200180831161081657829003601f168201915b50505050509050919050565b610847610fdd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061088d575061088c85610887610fdd565b610d46565b5b6108cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c390612986565b60405180910390fd5b6108d98585858585610fe5565b5050505050565b6305f5e10081565b6108f0610fdd565b73ffffffffffffffffffffffffffffffffffffffff1661090e610b6e565b73ffffffffffffffffffffffffffffffffffffffff1614610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b906127bb565b60405180910390fd5b6000471161097157600080fd5b600047905061097e610fdd565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109c3573d6000803e3d6000fd5b5050565b60608151835114610a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0490612a18565b60405180910390fd5b6000835167ffffffffffffffff811115610a2a57610a29612061565b5b604051908082528060200260200182016040528015610a585781602001602082028036833780820191505090505b50905060005b8451811015610ad557610aa5858281518110610a7d57610a7c612a38565b5b6020026020010151858381518110610a9857610a97612a38565b5b602002602001015161042f565b828281518110610ab857610ab7612a38565b5b60200260200101818152505080610ace90612a96565b9050610a5e565b508091505092915050565b60045481565b610aee610fdd565b73ffffffffffffffffffffffffffffffffffffffff16610b0c610b6e565b73ffffffffffffffffffffffffffffffffffffffff1614610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b59906127bb565b60405180910390fd5b610b6c60006112f9565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600360149054906101000a900460ff16610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90612893565b60405180910390fd5b6305f5e10081600554610bfa9190612adf565b1115610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3290612b81565b60405180910390fd5b600981118015610c4c57506103e981105b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290612c39565b60405180910390fd5b3481600454610c9a9190612c59565b1115610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290612cff565b60405180910390fd5b610cf733600083604051806020016040528060008152506113bf565b8060056000828254610d099190612adf565b9250508190555050565b610d25610d1e610fdd565b8383611555565b5050565b6000600554905090565b600360149054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610de2610fdd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e285750610e2785610e22610fdd565b610d46565b5b610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e90612d91565b60405180910390fd5b610e7485858585856116c2565b5050505050565b610e83610fdd565b73ffffffffffffffffffffffffffffffffffffffff16610ea1610b6e565b73ffffffffffffffffffffffffffffffffffffffff1614610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906127bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e90612e23565b60405180910390fd5b610f70816112f9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8151835114611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090612eb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109090612f47565b60405180910390fd5b60006110a3610fdd565b90506110b3818787878787611944565b60005b84518110156112645760008582815181106110d4576110d3612a38565b5b6020026020010151905060008583815181106110f3576110f2612a38565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90612fd9565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112499190612adf565b925050819055505050508061125d90612a96565b90506110b6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112db929190612ff9565b60405180910390a46112f181878787878761194c565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561142f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611426906130a2565b60405180910390fd5b6000611439610fdd565b905061145a8160008761144b88611b33565b61145488611b33565b87611944565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b99190612adf565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516115379291906130c2565b60405180910390a461154e81600087878787611bad565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bb9061315d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116b59190611f59565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990612f47565b60405180910390fd5b600061173c610fdd565b905061175c81878761174d88611b33565b61175688611b33565b87611944565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90612fd9565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118a89190612adf565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516119259291906130c2565b60405180910390a461193b828888888888611bad565b50505050505050565b505050505050565b61196b8473ffffffffffffffffffffffffffffffffffffffff16611d94565b15611b2b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016119b19594939291906131d2565b602060405180830381600087803b1580156119cb57600080fd5b505af19250505080156119fc57506040513d601f19601f820116820180604052508101906119f9919061324f565b60015b611aa257611a08613289565b806308c379a01415611a655750611a1d6132ab565b80611a285750611a67565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c919061203a565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a99906133b3565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090613445565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611b5257611b51612061565b5b604051908082528060200260200182016040528015611b805781602001602082028036833780820191505090505b5090508281600081518110611b9857611b97612a38565b5b60200260200101818152505080915050919050565b611bcc8473ffffffffffffffffffffffffffffffffffffffff16611d94565b15611d8c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611c12959493929190613465565b602060405180830381600087803b158015611c2c57600080fd5b505af1925050508015611c5d57506040513d601f19601f82011682018060405250810190611c5a919061324f565b60015b611d0357611c69613289565b806308c379a01415611cc65750611c7e6132ab565b80611c895750611cc8565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbd919061203a565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfa906133b3565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613445565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611de682611dbb565b9050919050565b611df681611ddb565b8114611e0157600080fd5b50565b600081359050611e1381611ded565b92915050565b6000819050919050565b611e2c81611e19565b8114611e3757600080fd5b50565b600081359050611e4981611e23565b92915050565b60008060408385031215611e6657611e65611db1565b5b6000611e7485828601611e04565b9250506020611e8585828601611e3a565b9150509250929050565b611e9881611e19565b82525050565b6000602082019050611eb36000830184611e8f565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611eee81611eb9565b8114611ef957600080fd5b50565b600081359050611f0b81611ee5565b92915050565b600060208284031215611f2757611f26611db1565b5b6000611f3584828501611efc565b91505092915050565b60008115159050919050565b611f5381611f3e565b82525050565b6000602082019050611f6e6000830184611f4a565b92915050565b600060208284031215611f8a57611f89611db1565b5b6000611f9884828501611e3a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fdb578082015181840152602081019050611fc0565b83811115611fea576000848401525b50505050565b6000601f19601f8301169050919050565b600061200c82611fa1565b6120168185611fac565b9350612026818560208601611fbd565b61202f81611ff0565b840191505092915050565b600060208201905081810360008301526120548184612001565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61209982611ff0565b810181811067ffffffffffffffff821117156120b8576120b7612061565b5b80604052505050565b60006120cb611da7565b90506120d78282612090565b919050565b600067ffffffffffffffff8211156120f7576120f6612061565b5b602082029050602081019050919050565b600080fd5b600061212061211b846120dc565b6120c1565b9050808382526020820190506020840283018581111561214357612142612108565b5b835b8181101561216c57806121588882611e3a565b845260208401935050602081019050612145565b5050509392505050565b600082601f83011261218b5761218a61205c565b5b813561219b84826020860161210d565b91505092915050565b600080fd5b600067ffffffffffffffff8211156121c4576121c3612061565b5b6121cd82611ff0565b9050602081019050919050565b82818337600083830152505050565b60006121fc6121f7846121a9565b6120c1565b905082815260208101848484011115612218576122176121a4565b5b6122238482856121da565b509392505050565b600082601f8301126122405761223f61205c565b5b81356122508482602086016121e9565b91505092915050565b600080600080600060a0868803121561227557612274611db1565b5b600061228388828901611e04565b955050602061229488828901611e04565b945050604086013567ffffffffffffffff8111156122b5576122b4611db6565b5b6122c188828901612176565b935050606086013567ffffffffffffffff8111156122e2576122e1611db6565b5b6122ee88828901612176565b925050608086013567ffffffffffffffff81111561230f5761230e611db6565b5b61231b8882890161222b565b9150509295509295909350565b600067ffffffffffffffff82111561234357612342612061565b5b602082029050602081019050919050565b600061236761236284612328565b6120c1565b9050808382526020820190506020840283018581111561238a57612389612108565b5b835b818110156123b3578061239f8882611e04565b84526020840193505060208101905061238c565b5050509392505050565b600082601f8301126123d2576123d161205c565b5b81356123e2848260208601612354565b91505092915050565b6000806040838503121561240257612401611db1565b5b600083013567ffffffffffffffff8111156124205761241f611db6565b5b61242c858286016123bd565b925050602083013567ffffffffffffffff81111561244d5761244c611db6565b5b61245985828601612176565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61249881611e19565b82525050565b60006124aa838361248f565b60208301905092915050565b6000602082019050919050565b60006124ce82612463565b6124d8818561246e565b93506124e38361247f565b8060005b838110156125145781516124fb888261249e565b9750612506836124b6565b9250506001810190506124e7565b5085935050505092915050565b6000602082019050818103600083015261253b81846124c3565b905092915050565b61254c81611ddb565b82525050565b60006020820190506125676000830184612543565b92915050565b61257681611f3e565b811461258157600080fd5b50565b6000813590506125938161256d565b92915050565b600080604083850312156125b0576125af611db1565b5b60006125be85828601611e04565b92505060206125cf85828601612584565b9150509250929050565b600080604083850312156125f0576125ef611db1565b5b60006125fe85828601611e04565b925050602061260f85828601611e04565b9150509250929050565b600080600080600060a0868803121561263557612634611db1565b5b600061264388828901611e04565b955050602061265488828901611e04565b945050604061266588828901611e3a565b935050606061267688828901611e3a565b925050608086013567ffffffffffffffff81111561269757612696611db6565b5b6126a38882890161222b565b9150509295509295909350565b6000602082840312156126c6576126c5611db1565b5b60006126d484828501611e04565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612739602b83611fac565b9150612744826126dd565b604082019050919050565b600060208201905081810360008301526127688161272c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127a5602083611fac565b91506127b08261276f565b602082019050919050565b600060208201905081810360008301526127d481612798565b9050919050565b7f5075626c69632073616c652068617320616c726561647920626567756e000000600082015250565b6000612811601d83611fac565b915061281c826127db565b602082019050919050565b6000602082019050818103600083015261284081612804565b9050919050565b7f5075626c69632073616c65206973206e6f742061637469766500000000000000600082015250565b600061287d601983611fac565b915061288882612847565b602082019050919050565b600060208201905081810360008301526128ac81612870565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128fa57607f821691505b6020821081141561290e5761290d6128b3565b5b50919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612970603283611fac565b915061297b82612914565b604082019050919050565b6000602082019050818103600083015261299f81612963565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612a02602983611fac565b9150612a0d826129a6565b604082019050919050565b60006020820190508181036000830152612a31816129f5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612aa182611e19565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ad457612ad3612a67565b5b600182019050919050565b6000612aea82611e19565b9150612af583611e19565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b2a57612b29612a67565b5b828201905092915050565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b6000612b6b601f83611fac565b9150612b7682612b35565b602082019050919050565b60006020820190508181036000830152612b9a81612b5e565b9050919050565b7f4d757374206d696e74206174206c656173742074656e2053686172647320616e60008201527f64206c657373207468616e20313030302053686172647320706572207472616e60208201527f73616374696f6e00000000000000000000000000000000000000000000000000604082015250565b6000612c23604783611fac565b9150612c2e82612ba1565b606082019050919050565b60006020820190508181036000830152612c5281612c16565b9050919050565b6000612c6482611e19565b9150612c6f83611e19565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ca857612ca7612a67565b5b828202905092915050565b7f4d415449432076616c75652073656e74206973206e6f7420636f727265637400600082015250565b6000612ce9601f83611fac565b9150612cf482612cb3565b602082019050919050565b60006020820190508181036000830152612d1881612cdc565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000612d7b602983611fac565b9150612d8682612d1f565b604082019050919050565b60006020820190508181036000830152612daa81612d6e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e0d602683611fac565b9150612e1882612db1565b604082019050919050565b60006020820190508181036000830152612e3c81612e00565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612e9f602883611fac565b9150612eaa82612e43565b604082019050919050565b60006020820190508181036000830152612ece81612e92565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f31602583611fac565b9150612f3c82612ed5565b604082019050919050565b60006020820190508181036000830152612f6081612f24565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612fc3602a83611fac565b9150612fce82612f67565b604082019050919050565b60006020820190508181036000830152612ff281612fb6565b9050919050565b6000604082019050818103600083015261301381856124c3565b9050818103602083015261302781846124c3565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061308c602183611fac565b915061309782613030565b604082019050919050565b600060208201905081810360008301526130bb8161307f565b9050919050565b60006040820190506130d76000830185611e8f565b6130e46020830184611e8f565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613147602983611fac565b9150613152826130eb565b604082019050919050565b600060208201905081810360008301526131768161313a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006131a48261317d565b6131ae8185613188565b93506131be818560208601611fbd565b6131c781611ff0565b840191505092915050565b600060a0820190506131e76000830188612543565b6131f46020830187612543565b818103604083015261320681866124c3565b9050818103606083015261321a81856124c3565b9050818103608083015261322e8184613199565b90509695505050505050565b60008151905061324981611ee5565b92915050565b60006020828403121561326557613264611db1565b5b60006132738482850161323a565b91505092915050565b60008160e01c9050919050565b600060033d11156132a85760046000803e6132a560005161327c565b90505b90565b600060443d10156132bb5761333e565b6132c3611da7565b60043d036004823e80513d602482011167ffffffffffffffff821117156132eb57505061333e565b808201805167ffffffffffffffff811115613309575050505061333e565b80602083010160043d03850181111561332657505050505061333e565b61333582602001850186612090565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061339d603483611fac565b91506133a882613341565b604082019050919050565b600060208201905081810360008301526133cc81613390565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061342f602883611fac565b915061343a826133d3565b604082019050919050565b6000602082019050818103600083015261345e81613422565b9050919050565b600060a08201905061347a6000830188612543565b6134876020830187612543565b6134946040830186611e8f565b6134a16060830185611e8f565b81810360808301526134b38184613199565b9050969550505050505056fea2646970667358221220500869847bd7219cc5f2c5b63573f4b5b842fae53955ff012f8955b8d5eb4a5564736f6c63430008090033697066733a2f2f516d50324152595642355a44684e53584c6b634c71316764597a73723850673968477766656b68624c6f62674856
Deployed ByteCode Sourcemap
36041:1520:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22483:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21506:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36493:163;;;;;;;;;;;;;:::i;:::-;;36664:110;;;;;;;;;;;;;:::i;:::-;;22227:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24422:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36133:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37344:214;;;:::i;:::-;;22880:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36192:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2488:94;;;;;;;;;;;;;:::i;:::-;;1837:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36786:455;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23477:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37249:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36092:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23704:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23944:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2737:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22483:231;22569:7;22616:1;22597:21;;:7;:21;;;;22589:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22684:9;:13;22694:2;22684:13;;;;;;;;;;;:22;22698:7;22684:22;;;;;;;;;;;;;;;;22677:29;;22483:231;;;;:::o;21506:310::-;21608:4;21660:26;21645:41;;;:11;:41;;;;:110;;;;21718:37;21703:52;;;:11;:52;;;;21645:110;:163;;;;21772:36;21796:11;21772:23;:36::i;:::-;21645:163;21625:183;;21506:310;;;:::o;36493:163::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36564:16:::1;;;;;;;;;;;36563:17;36555:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36644:4;36625:16;;:23;;;;;;;;;;;;;;;;;;36493:163::o:0;36664:110::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36324:16:::1;;;;;;;;;;;36316:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;36761:5:::2;36742:16;;:24;;;;;;;;;;;;;;;;;;36664:110::o:0;22227:105::-;22287:13;22320:4;22313:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22227:105;;;:::o;24422:442::-;24663:12;:10;:12::i;:::-;24655:20;;:4;:20;;;:60;;;;24679:36;24696:4;24702:12;:10;:12::i;:::-;24679:16;:36::i;:::-;24655:60;24633:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24804:52;24827:4;24833:2;24837:3;24842:7;24851:4;24804:22;:52::i;:::-;24422:442;;;;;:::o;36133:46::-;36170:9;36133:46;:::o;37344:214::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37435:1:::1;37411:21;:25;37403:34;;;::::0;::::1;;37448:20;37471:21;37448:44;;37511:12;:10;:12::i;:::-;37503:30;;:47;37534:15;37503:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37392:166;37344:214::o:0;22880:524::-;23036:16;23097:3;:10;23078:8;:15;:29;23070:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23166:30;23213:8;:15;23199:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23166:63;;23247:9;23242:122;23266:8;:15;23262:1;:19;23242:122;;;23322:30;23332:8;23341:1;23332:11;;;;;;;;:::i;:::-;;;;;;;;23345:3;23349:1;23345:6;;;;;;;;:::i;:::-;;;;;;;;23322:9;:30::i;:::-;23303:13;23317:1;23303:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23283:3;;;;:::i;:::-;;;23242:122;;;;23383:13;23376:20;;;22880:524;;;;:::o;36192:33::-;;;;:::o;2488:94::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2553:21:::1;2571:1;2553:9;:21::i;:::-;2488:94::o:0;1837:87::-;1883:7;1910:6;;;;;;;;;;;1903:13;;1837:87;:::o;36786:455::-;36324:16;;;;;;;;;;;36316:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;36170:9:::1;36887:7;36874:10;;:20;;;;:::i;:::-;:34;;36866:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;36973:1;36963:7;:11;:29;;;;;36988:4;36978:7;:14;36963:29;36955:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;37110:9;37099:7;37087:9;;:19;;;;:::i;:::-;:32;;37079:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37168:33;37174:10;37186:1;37189:7;37168:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;37226:7;37212:10;;:21;;;;;;;:::i;:::-;;;;;;;;36786:455:::0;:::o;23477:155::-;23572:52;23591:12;:10;:12::i;:::-;23605:8;23615;23572:18;:52::i;:::-;23477:155;;:::o;37249:87::-;37291:7;37318:10;;37311:17;;37249:87;:::o;36092:28::-;;;;;;;;;;;;;:::o;23704:168::-;23803:4;23827:18;:27;23846:7;23827:27;;;;;;;;;;;;;;;:37;23855:8;23827:37;;;;;;;;;;;;;;;;;;;;;;;;;23820:44;;23704:168;;;;:::o;23944:401::-;24160:12;:10;:12::i;:::-;24152:20;;:4;:20;;;:60;;;;24176:36;24193:4;24199:12;:10;:12::i;:::-;24176:16;:36::i;:::-;24152:60;24130:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24292:45;24310:4;24316:2;24320;24324:6;24332:4;24292:17;:45::i;:::-;23944:401;;;;;:::o;2737:192::-;2068:12;:10;:12::i;:::-;2057:23;;:7;:5;:7::i;:::-;:23;;;2049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2846:1:::1;2826:22;;:8;:22;;;;2818:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2902:19;2912:8;2902:9;:19::i;:::-;2737:192:::0;:::o;12861:157::-;12946:4;12985:25;12970:40;;;:11;:40;;;;12963:47;;12861:157;;;:::o;625:98::-;678:7;705:10;698:17;;625:98;:::o;26506:1074::-;26733:7;:14;26719:3;:10;:28;26711:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26825:1;26811:16;;:2;:16;;;;26803:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26882:16;26901:12;:10;:12::i;:::-;26882:31;;26926:60;26947:8;26957:4;26963:2;26967:3;26972:7;26981:4;26926:20;:60::i;:::-;27004:9;26999:421;27023:3;:10;27019:1;:14;26999:421;;;27055:10;27068:3;27072:1;27068:6;;;;;;;;:::i;:::-;;;;;;;;27055:19;;27089:14;27106:7;27114:1;27106:10;;;;;;;;:::i;:::-;;;;;;;;27089:27;;27133:19;27155:9;:13;27165:2;27155:13;;;;;;;;;;;:19;27169:4;27155:19;;;;;;;;;;;;;;;;27133:41;;27212:6;27197:11;:21;;27189:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27345:6;27331:11;:20;27309:9;:13;27319:2;27309:13;;;;;;;;;;;:19;27323:4;27309:19;;;;;;;;;;;;;;;:42;;;;27402:6;27381:9;:13;27391:2;27381:13;;;;;;;;;;;:17;27395:2;27381:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27040:380;;;27035:3;;;;:::i;:::-;;;26999:421;;;;27467:2;27437:47;;27461:4;27437:47;;27451:8;27437:47;;;27471:3;27476:7;27437:47;;;;;;;:::i;:::-;;;;;;;;27497:75;27533:8;27543:4;27549:2;27553:3;27558:7;27567:4;27497:35;:75::i;:::-;26700:880;26506:1074;;;;;:::o;2937:173::-;2993:16;3012:6;;;;;;;;;;;2993:25;;3038:8;3029:6;;:17;;;;;;;;;;;;;;;;;;3093:8;3062:40;;3083:8;3062:40;;;;;;;;;;;;2982:128;2937:173;:::o;28898:569::-;29065:1;29051:16;;:2;:16;;;;29043:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29118:16;29137:12;:10;:12::i;:::-;29118:31;;29162:102;29183:8;29201:1;29205:2;29209:21;29227:2;29209:17;:21::i;:::-;29232:25;29250:6;29232:17;:25::i;:::-;29259:4;29162:20;:102::i;:::-;29298:6;29277:9;:13;29287:2;29277:13;;;;;;;;;;;:17;29291:2;29277:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29357:2;29320:52;;29353:1;29320:52;;29335:8;29320:52;;;29361:2;29365:6;29320:52;;;;;;;:::i;:::-;;;;;;;;29385:74;29416:8;29434:1;29438:2;29442;29446:6;29454:4;29385:30;:74::i;:::-;29032:435;28898:569;;;;:::o;32692:331::-;32847:8;32838:17;;:5;:17;;;;32830:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32950:8;32912:18;:25;32931:5;32912:25;;;;;;;;;;;;;;;:35;32938:8;32912:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32996:8;32974:41;;32989:5;32974:41;;;33006:8;32974:41;;;;;;:::i;:::-;;;;;;;;32692:331;;;:::o;25328:820::-;25530:1;25516:16;;:2;:16;;;;25508:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25587:16;25606:12;:10;:12::i;:::-;25587:31;;25631:96;25652:8;25662:4;25668:2;25672:21;25690:2;25672:17;:21::i;:::-;25695:25;25713:6;25695:17;:25::i;:::-;25722:4;25631:20;:96::i;:::-;25740:19;25762:9;:13;25772:2;25762:13;;;;;;;;;;;:19;25776:4;25762:19;;;;;;;;;;;;;;;;25740:41;;25815:6;25800:11;:21;;25792:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25940:6;25926:11;:20;25904:9;:13;25914:2;25904:13;;;;;;;;;;;:19;25918:4;25904:19;;;;;;;;;;;;;;;:42;;;;25989:6;25968:9;:13;25978:2;25968:13;;;;;;;;;;;:17;25982:2;25968:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26044:2;26013:46;;26038:4;26013:46;;26028:8;26013:46;;;26048:2;26052:6;26013:46;;;;;;;:::i;:::-;;;;;;;;26072:68;26103:8;26113:4;26119:2;26123;26127:6;26135:4;26072:30;:68::i;:::-;25497:651;;25328:820;;;;;:::o;33979:221::-;;;;;;;:::o;34960:813::-;35200:15;:2;:13;;;:15::i;:::-;35196:570;;;35253:2;35236:43;;;35280:8;35290:4;35296:3;35301:7;35310:4;35236:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35232:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35628:6;35621:14;;;;;;;;;;;:::i;:::-;;;;;;;;35232:523;;;35677:62;;;;;;;;;;:::i;:::-;;;;;;;;35232:523;35409:48;;;35397:60;;;:8;:60;;;;35393:159;;35482:50;;;;;;;;;;:::i;:::-;;;;;;;;35393:159;35316:251;35196:570;34960:813;;;;;;:::o;35781:198::-;35847:16;35876:22;35915:1;35901:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35876:41;;35939:7;35928:5;35934:1;35928:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;35966:5;35959:12;;;35781:198;;;:::o;34208:744::-;34423:15;:2;:13;;;:15::i;:::-;34419:526;;;34476:2;34459:38;;;34498:8;34508:4;34514:2;34518:6;34526:4;34459:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34455:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34807:6;34800:14;;;;;;;;;;;:::i;:::-;;;;;;;;34455:479;;;34856:62;;;;;;;;;;:::i;:::-;;;;;;;;34455:479;34593:43;;;34581:55;;;:8;:55;;;;34577:154;;34661:50;;;;;;;;;;:::i;:::-;;;;;;;;34577:154;34532:214;34419:526;34208:744;;;;;;:::o;3883:387::-;3943:4;4151:12;4218:7;4206:20;4198:28;;4261:1;4254:4;:8;4247:15;;;3883:387;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:99::-;3600:6;3634:5;3628:12;3618:22;;3548:99;;;:::o;3653:169::-;3737:11;3771:6;3766:3;3759:19;3811:4;3806:3;3802:14;3787:29;;3653:169;;;;:::o;3828:307::-;3896:1;3906:113;3920:6;3917:1;3914:13;3906:113;;;4005:1;4000:3;3996:11;3990:18;3986:1;3981:3;3977:11;3970:39;3942:2;3939:1;3935:10;3930:15;;3906:113;;;4037:6;4034:1;4031:13;4028:101;;;4117:1;4108:6;4103:3;4099:16;4092:27;4028:101;3877:258;3828:307;;;:::o;4141:102::-;4182:6;4233:2;4229:7;4224:2;4217:5;4213:14;4209:28;4199:38;;4141:102;;;:::o;4249:364::-;4337:3;4365:39;4398:5;4365:39;:::i;:::-;4420:71;4484:6;4479:3;4420:71;:::i;:::-;4413:78;;4500:52;4545:6;4540:3;4533:4;4526:5;4522:16;4500:52;:::i;:::-;4577:29;4599:6;4577:29;:::i;:::-;4572:3;4568:39;4561:46;;4341:272;4249:364;;;;:::o;4619:313::-;4732:4;4770:2;4759:9;4755:18;4747:26;;4819:9;4813:4;4809:20;4805:1;4794:9;4790:17;4783:47;4847:78;4920:4;4911:6;4847:78;:::i;:::-;4839:86;;4619:313;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1509::-;8758:6;8766;8774;8782;8790;8839:3;8827:9;8818:7;8814:23;8810:33;8807:120;;;8846:79;;:::i;:::-;8807:120;8966:1;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8937:117;9093:2;9119:53;9164:7;9155:6;9144:9;9140:22;9119:53;:::i;:::-;9109:63;;9064:118;9249:2;9238:9;9234:18;9221:32;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9407:78;9477:7;9468:6;9457:9;9453:22;9407:78;:::i;:::-;9397:88;;9192:303;9562:2;9551:9;9547:18;9534:32;9593:18;9585:6;9582:30;9579:117;;;9615:79;;:::i;:::-;9579:117;9720:78;9790:7;9781:6;9770:9;9766:22;9720:78;:::i;:::-;9710:88;;9505:303;9875:3;9864:9;9860:19;9847:33;9907:18;9899:6;9896:30;9893:117;;;9929:79;;:::i;:::-;9893:117;10034:62;10088:7;10079:6;10068:9;10064:22;10034:62;:::i;:::-;10024:72;;9818:288;8604:1509;;;;;;;;:::o;10119:311::-;10196:4;10286:18;10278:6;10275:30;10272:56;;;10308:18;;:::i;:::-;10272:56;10358:4;10350:6;10346:17;10338:25;;10418:4;10412;10408:15;10400:23;;10119:311;;;:::o;10453:710::-;10549:5;10574:81;10590:64;10647:6;10590:64;:::i;:::-;10574:81;:::i;:::-;10565:90;;10675:5;10704:6;10697:5;10690:21;10738:4;10731:5;10727:16;10720:23;;10791:4;10783:6;10779:17;10771:6;10767:30;10820:3;10812:6;10809:15;10806:122;;;10839:79;;:::i;:::-;10806:122;10954:6;10937:220;10971:6;10966:3;10963:15;10937:220;;;11046:3;11075:37;11108:3;11096:10;11075:37;:::i;:::-;11070:3;11063:50;11142:4;11137:3;11133:14;11126:21;;11013:144;10997:4;10992:3;10988:14;10981:21;;10937:220;;;10941:21;10555:608;;10453:710;;;;;:::o;11186:370::-;11257:5;11306:3;11299:4;11291:6;11287:17;11283:27;11273:122;;11314:79;;:::i;:::-;11273:122;11431:6;11418:20;11456:94;11546:3;11538:6;11531:4;11523:6;11519:17;11456:94;:::i;:::-;11447:103;;11263:293;11186:370;;;;:::o;11562:894::-;11680:6;11688;11737:2;11725:9;11716:7;11712:23;11708:32;11705:119;;;11743:79;;:::i;:::-;11705:119;11891:1;11880:9;11876:17;11863:31;11921:18;11913:6;11910:30;11907:117;;;11943:79;;:::i;:::-;11907:117;12048:78;12118:7;12109:6;12098:9;12094:22;12048:78;:::i;:::-;12038:88;;11834:302;12203:2;12192:9;12188:18;12175:32;12234:18;12226:6;12223:30;12220:117;;;12256:79;;:::i;:::-;12220:117;12361:78;12431:7;12422:6;12411:9;12407:22;12361:78;:::i;:::-;12351:88;;12146:303;11562:894;;;;;:::o;12462:114::-;12529:6;12563:5;12557:12;12547:22;;12462:114;;;:::o;12582:184::-;12681:11;12715:6;12710:3;12703:19;12755:4;12750:3;12746:14;12731:29;;12582:184;;;;:::o;12772:132::-;12839:4;12862:3;12854:11;;12892:4;12887:3;12883:14;12875:22;;12772:132;;;:::o;12910:108::-;12987:24;13005:5;12987:24;:::i;:::-;12982:3;12975:37;12910:108;;:::o;13024:179::-;13093:10;13114:46;13156:3;13148:6;13114:46;:::i;:::-;13192:4;13187:3;13183:14;13169:28;;13024:179;;;;:::o;13209:113::-;13279:4;13311;13306:3;13302:14;13294:22;;13209:113;;;:::o;13358:732::-;13477:3;13506:54;13554:5;13506:54;:::i;:::-;13576:86;13655:6;13650:3;13576:86;:::i;:::-;13569:93;;13686:56;13736:5;13686:56;:::i;:::-;13765:7;13796:1;13781:284;13806:6;13803:1;13800:13;13781:284;;;13882:6;13876:13;13909:63;13968:3;13953:13;13909:63;:::i;:::-;13902:70;;13995:60;14048:6;13995:60;:::i;:::-;13985:70;;13841:224;13828:1;13825;13821:9;13816:14;;13781:284;;;13785:14;14081:3;14074:10;;13482:608;;;13358:732;;;;:::o;14096:373::-;14239:4;14277:2;14266:9;14262:18;14254:26;;14326:9;14320:4;14316:20;14312:1;14301:9;14297:17;14290:47;14354:108;14457:4;14448:6;14354:108;:::i;:::-;14346:116;;14096:373;;;;:::o;14475:118::-;14562:24;14580:5;14562:24;:::i;:::-;14557:3;14550:37;14475:118;;:::o;14599:222::-;14692:4;14730:2;14719:9;14715:18;14707:26;;14743:71;14811:1;14800:9;14796:17;14787:6;14743:71;:::i;:::-;14599:222;;;;:::o;14827:116::-;14897:21;14912:5;14897:21;:::i;:::-;14890:5;14887:32;14877:60;;14933:1;14930;14923:12;14877:60;14827:116;:::o;14949:133::-;14992:5;15030:6;15017:20;15008:29;;15046:30;15070:5;15046:30;:::i;:::-;14949:133;;;;:::o;15088:468::-;15153:6;15161;15210:2;15198:9;15189:7;15185:23;15181:32;15178:119;;;15216:79;;:::i;:::-;15178:119;15336:1;15361:53;15406:7;15397:6;15386:9;15382:22;15361:53;:::i;:::-;15351:63;;15307:117;15463:2;15489:50;15531:7;15522:6;15511:9;15507:22;15489:50;:::i;:::-;15479:60;;15434:115;15088:468;;;;;:::o;15562:474::-;15630:6;15638;15687:2;15675:9;15666:7;15662:23;15658:32;15655:119;;;15693:79;;:::i;:::-;15655:119;15813:1;15838:53;15883:7;15874:6;15863:9;15859:22;15838:53;:::i;:::-;15828:63;;15784:117;15940:2;15966:53;16011:7;16002:6;15991:9;15987:22;15966:53;:::i;:::-;15956:63;;15911:118;15562:474;;;;;:::o;16042:1089::-;16146:6;16154;16162;16170;16178;16227:3;16215:9;16206:7;16202:23;16198:33;16195:120;;;16234:79;;:::i;:::-;16195:120;16354:1;16379:53;16424:7;16415:6;16404:9;16400:22;16379:53;:::i;:::-;16369:63;;16325:117;16481:2;16507:53;16552:7;16543:6;16532:9;16528:22;16507:53;:::i;:::-;16497:63;;16452:118;16609:2;16635:53;16680:7;16671:6;16660:9;16656:22;16635:53;:::i;:::-;16625:63;;16580:118;16737:2;16763:53;16808:7;16799:6;16788:9;16784:22;16763:53;:::i;:::-;16753:63;;16708:118;16893:3;16882:9;16878:19;16865:33;16925:18;16917:6;16914:30;16911:117;;;16947:79;;:::i;:::-;16911:117;17052:62;17106:7;17097:6;17086:9;17082:22;17052:62;:::i;:::-;17042:72;;16836:288;16042:1089;;;;;;;;:::o;17137:329::-;17196:6;17245:2;17233:9;17224:7;17220:23;17216:32;17213:119;;;17251:79;;:::i;:::-;17213:119;17371:1;17396:53;17441:7;17432:6;17421:9;17417:22;17396:53;:::i;:::-;17386:63;;17342:117;17137:329;;;;:::o;17472:230::-;17612:34;17608:1;17600:6;17596:14;17589:58;17681:13;17676:2;17668:6;17664:15;17657:38;17472:230;:::o;17708:366::-;17850:3;17871:67;17935:2;17930:3;17871:67;:::i;:::-;17864:74;;17947:93;18036:3;17947:93;:::i;:::-;18065:2;18060:3;18056:12;18049:19;;17708:366;;;:::o;18080:419::-;18246:4;18284:2;18273:9;18269:18;18261:26;;18333:9;18327:4;18323:20;18319:1;18308:9;18304:17;18297:47;18361:131;18487:4;18361:131;:::i;:::-;18353:139;;18080:419;;;:::o;18505:182::-;18645:34;18641:1;18633:6;18629:14;18622:58;18505:182;:::o;18693:366::-;18835:3;18856:67;18920:2;18915:3;18856:67;:::i;:::-;18849:74;;18932:93;19021:3;18932:93;:::i;:::-;19050:2;19045:3;19041:12;19034:19;;18693:366;;;:::o;19065:419::-;19231:4;19269:2;19258:9;19254:18;19246:26;;19318:9;19312:4;19308:20;19304:1;19293:9;19289:17;19282:47;19346:131;19472:4;19346:131;:::i;:::-;19338:139;;19065:419;;;:::o;19490:179::-;19630:31;19626:1;19618:6;19614:14;19607:55;19490:179;:::o;19675:366::-;19817:3;19838:67;19902:2;19897:3;19838:67;:::i;:::-;19831:74;;19914:93;20003:3;19914:93;:::i;:::-;20032:2;20027:3;20023:12;20016:19;;19675:366;;;:::o;20047:419::-;20213:4;20251:2;20240:9;20236:18;20228:26;;20300:9;20294:4;20290:20;20286:1;20275:9;20271:17;20264:47;20328:131;20454:4;20328:131;:::i;:::-;20320:139;;20047:419;;;:::o;20472:175::-;20612:27;20608:1;20600:6;20596:14;20589:51;20472:175;:::o;20653:366::-;20795:3;20816:67;20880:2;20875:3;20816:67;:::i;:::-;20809:74;;20892:93;20981:3;20892:93;:::i;:::-;21010:2;21005:3;21001:12;20994:19;;20653:366;;;:::o;21025:419::-;21191:4;21229:2;21218:9;21214:18;21206:26;;21278:9;21272:4;21268:20;21264:1;21253:9;21249:17;21242:47;21306:131;21432:4;21306:131;:::i;:::-;21298:139;;21025:419;;;:::o;21450:180::-;21498:77;21495:1;21488:88;21595:4;21592:1;21585:15;21619:4;21616:1;21609:15;21636:320;21680:6;21717:1;21711:4;21707:12;21697:22;;21764:1;21758:4;21754:12;21785:18;21775:81;;21841:4;21833:6;21829:17;21819:27;;21775:81;21903:2;21895:6;21892:14;21872:18;21869:38;21866:84;;;21922:18;;:::i;:::-;21866:84;21687:269;21636:320;;;:::o;21962:237::-;22102:34;22098:1;22090:6;22086:14;22079:58;22171:20;22166:2;22158:6;22154:15;22147:45;21962:237;:::o;22205:366::-;22347:3;22368:67;22432:2;22427:3;22368:67;:::i;:::-;22361:74;;22444:93;22533:3;22444:93;:::i;:::-;22562:2;22557:3;22553:12;22546:19;;22205:366;;;:::o;22577:419::-;22743:4;22781:2;22770:9;22766:18;22758:26;;22830:9;22824:4;22820:20;22816:1;22805:9;22801:17;22794:47;22858:131;22984:4;22858:131;:::i;:::-;22850:139;;22577:419;;;:::o;23002:228::-;23142:34;23138:1;23130:6;23126:14;23119:58;23211:11;23206:2;23198:6;23194:15;23187:36;23002:228;:::o;23236:366::-;23378:3;23399:67;23463:2;23458:3;23399:67;:::i;:::-;23392:74;;23475:93;23564:3;23475:93;:::i;:::-;23593:2;23588:3;23584:12;23577:19;;23236:366;;;:::o;23608:419::-;23774:4;23812:2;23801:9;23797:18;23789:26;;23861:9;23855:4;23851:20;23847:1;23836:9;23832:17;23825:47;23889:131;24015:4;23889:131;:::i;:::-;23881:139;;23608:419;;;:::o;24033:180::-;24081:77;24078:1;24071:88;24178:4;24175:1;24168:15;24202:4;24199:1;24192:15;24219:180;24267:77;24264:1;24257:88;24364:4;24361:1;24354:15;24388:4;24385:1;24378:15;24405:233;24444:3;24467:24;24485:5;24467:24;:::i;:::-;24458:33;;24513:66;24506:5;24503:77;24500:103;;;24583:18;;:::i;:::-;24500:103;24630:1;24623:5;24619:13;24612:20;;24405:233;;;:::o;24644:305::-;24684:3;24703:20;24721:1;24703:20;:::i;:::-;24698:25;;24737:20;24755:1;24737:20;:::i;:::-;24732:25;;24891:1;24823:66;24819:74;24816:1;24813:81;24810:107;;;24897:18;;:::i;:::-;24810:107;24941:1;24938;24934:9;24927:16;;24644:305;;;;:::o;24955:181::-;25095:33;25091:1;25083:6;25079:14;25072:57;24955:181;:::o;25142:366::-;25284:3;25305:67;25369:2;25364:3;25305:67;:::i;:::-;25298:74;;25381:93;25470:3;25381:93;:::i;:::-;25499:2;25494:3;25490:12;25483:19;;25142:366;;;:::o;25514:419::-;25680:4;25718:2;25707:9;25703:18;25695:26;;25767:9;25761:4;25757:20;25753:1;25742:9;25738:17;25731:47;25795:131;25921:4;25795:131;:::i;:::-;25787:139;;25514:419;;;:::o;25939:295::-;26079:34;26075:1;26067:6;26063:14;26056:58;26148:34;26143:2;26135:6;26131:15;26124:59;26217:9;26212:2;26204:6;26200:15;26193:34;25939:295;:::o;26240:366::-;26382:3;26403:67;26467:2;26462:3;26403:67;:::i;:::-;26396:74;;26479:93;26568:3;26479:93;:::i;:::-;26597:2;26592:3;26588:12;26581:19;;26240:366;;;:::o;26612:419::-;26778:4;26816:2;26805:9;26801:18;26793:26;;26865:9;26859:4;26855:20;26851:1;26840:9;26836:17;26829:47;26893:131;27019:4;26893:131;:::i;:::-;26885:139;;26612:419;;;:::o;27037:348::-;27077:7;27100:20;27118:1;27100:20;:::i;:::-;27095:25;;27134:20;27152:1;27134:20;:::i;:::-;27129:25;;27322:1;27254:66;27250:74;27247:1;27244:81;27239:1;27232:9;27225:17;27221:105;27218:131;;;27329:18;;:::i;:::-;27218:131;27377:1;27374;27370:9;27359:20;;27037:348;;;;:::o;27391:181::-;27531:33;27527:1;27519:6;27515:14;27508:57;27391:181;:::o;27578:366::-;27720:3;27741:67;27805:2;27800:3;27741:67;:::i;:::-;27734:74;;27817:93;27906:3;27817:93;:::i;:::-;27935:2;27930:3;27926:12;27919:19;;27578:366;;;:::o;27950:419::-;28116:4;28154:2;28143:9;28139:18;28131:26;;28203:9;28197:4;28193:20;28189:1;28178:9;28174:17;28167:47;28231:131;28357:4;28231:131;:::i;:::-;28223:139;;27950:419;;;:::o;28375:228::-;28515:34;28511:1;28503:6;28499:14;28492:58;28584:11;28579:2;28571:6;28567:15;28560:36;28375:228;:::o;28609:366::-;28751:3;28772:67;28836:2;28831:3;28772:67;:::i;:::-;28765:74;;28848:93;28937:3;28848:93;:::i;:::-;28966:2;28961:3;28957:12;28950:19;;28609:366;;;:::o;28981:419::-;29147:4;29185:2;29174:9;29170:18;29162:26;;29234:9;29228:4;29224:20;29220:1;29209:9;29205:17;29198:47;29262:131;29388:4;29262:131;:::i;:::-;29254:139;;28981:419;;;:::o;29406:225::-;29546:34;29542:1;29534:6;29530:14;29523:58;29615:8;29610:2;29602:6;29598:15;29591:33;29406:225;:::o;29637:366::-;29779:3;29800:67;29864:2;29859:3;29800:67;:::i;:::-;29793:74;;29876:93;29965:3;29876:93;:::i;:::-;29994:2;29989:3;29985:12;29978:19;;29637:366;;;:::o;30009:419::-;30175:4;30213:2;30202:9;30198:18;30190:26;;30262:9;30256:4;30252:20;30248:1;30237:9;30233:17;30226:47;30290:131;30416:4;30290:131;:::i;:::-;30282:139;;30009:419;;;:::o;30434:227::-;30574:34;30570:1;30562:6;30558:14;30551:58;30643:10;30638:2;30630:6;30626:15;30619:35;30434:227;:::o;30667:366::-;30809:3;30830:67;30894:2;30889:3;30830:67;:::i;:::-;30823:74;;30906:93;30995:3;30906:93;:::i;:::-;31024:2;31019:3;31015:12;31008:19;;30667:366;;;:::o;31039:419::-;31205:4;31243:2;31232:9;31228:18;31220:26;;31292:9;31286:4;31282:20;31278:1;31267:9;31263:17;31256:47;31320:131;31446:4;31320:131;:::i;:::-;31312:139;;31039:419;;;:::o;31464:224::-;31604:34;31600:1;31592:6;31588:14;31581:58;31673:7;31668:2;31660:6;31656:15;31649:32;31464:224;:::o;31694:366::-;31836:3;31857:67;31921:2;31916:3;31857:67;:::i;:::-;31850:74;;31933:93;32022:3;31933:93;:::i;:::-;32051:2;32046:3;32042:12;32035:19;;31694:366;;;:::o;32066:419::-;32232:4;32270:2;32259:9;32255:18;32247:26;;32319:9;32313:4;32309:20;32305:1;32294:9;32290:17;32283:47;32347:131;32473:4;32347:131;:::i;:::-;32339:139;;32066:419;;;:::o;32491:229::-;32631:34;32627:1;32619:6;32615:14;32608:58;32700:12;32695:2;32687:6;32683:15;32676:37;32491:229;:::o;32726:366::-;32868:3;32889:67;32953:2;32948:3;32889:67;:::i;:::-;32882:74;;32965:93;33054:3;32965:93;:::i;:::-;33083:2;33078:3;33074:12;33067:19;;32726:366;;;:::o;33098:419::-;33264:4;33302:2;33291:9;33287:18;33279:26;;33351:9;33345:4;33341:20;33337:1;33326:9;33322:17;33315:47;33379:131;33505:4;33379:131;:::i;:::-;33371:139;;33098:419;;;:::o;33523:634::-;33744:4;33782:2;33771:9;33767:18;33759:26;;33831:9;33825:4;33821:20;33817:1;33806:9;33802:17;33795:47;33859:108;33962:4;33953:6;33859:108;:::i;:::-;33851:116;;34014:9;34008:4;34004:20;33999:2;33988:9;33984:18;33977:48;34042:108;34145:4;34136:6;34042:108;:::i;:::-;34034:116;;33523:634;;;;;:::o;34163:220::-;34303:34;34299:1;34291:6;34287:14;34280:58;34372:3;34367:2;34359:6;34355:15;34348:28;34163:220;:::o;34389:366::-;34531:3;34552:67;34616:2;34611:3;34552:67;:::i;:::-;34545:74;;34628:93;34717:3;34628:93;:::i;:::-;34746:2;34741:3;34737:12;34730:19;;34389:366;;;:::o;34761:419::-;34927:4;34965:2;34954:9;34950:18;34942:26;;35014:9;35008:4;35004:20;35000:1;34989:9;34985:17;34978:47;35042:131;35168:4;35042:131;:::i;:::-;35034:139;;34761:419;;;:::o;35186:332::-;35307:4;35345:2;35334:9;35330:18;35322:26;;35358:71;35426:1;35415:9;35411:17;35402:6;35358:71;:::i;:::-;35439:72;35507:2;35496:9;35492:18;35483:6;35439:72;:::i;:::-;35186:332;;;;;:::o;35524:228::-;35664:34;35660:1;35652:6;35648:14;35641:58;35733:11;35728:2;35720:6;35716:15;35709:36;35524:228;:::o;35758:366::-;35900:3;35921:67;35985:2;35980:3;35921:67;:::i;:::-;35914:74;;35997:93;36086:3;35997:93;:::i;:::-;36115:2;36110:3;36106:12;36099:19;;35758:366;;;:::o;36130:419::-;36296:4;36334:2;36323:9;36319:18;36311:26;;36383:9;36377:4;36373:20;36369:1;36358:9;36354:17;36347:47;36411:131;36537:4;36411:131;:::i;:::-;36403:139;;36130:419;;;:::o;36555:98::-;36606:6;36640:5;36634:12;36624:22;;36555:98;;;:::o;36659:168::-;36742:11;36776:6;36771:3;36764:19;36816:4;36811:3;36807:14;36792:29;;36659:168;;;;:::o;36833:360::-;36919:3;36947:38;36979:5;36947:38;:::i;:::-;37001:70;37064:6;37059:3;37001:70;:::i;:::-;36994:77;;37080:52;37125:6;37120:3;37113:4;37106:5;37102:16;37080:52;:::i;:::-;37157:29;37179:6;37157:29;:::i;:::-;37152:3;37148:39;37141:46;;36923:270;36833:360;;;;:::o;37199:1053::-;37522:4;37560:3;37549:9;37545:19;37537:27;;37574:71;37642:1;37631:9;37627:17;37618:6;37574:71;:::i;:::-;37655:72;37723:2;37712:9;37708:18;37699:6;37655:72;:::i;:::-;37774:9;37768:4;37764:20;37759:2;37748:9;37744:18;37737:48;37802:108;37905:4;37896:6;37802:108;:::i;:::-;37794:116;;37957:9;37951:4;37947:20;37942:2;37931:9;37927:18;37920:48;37985:108;38088:4;38079:6;37985:108;:::i;:::-;37977:116;;38141:9;38135:4;38131:20;38125:3;38114:9;38110:19;38103:49;38169:76;38240:4;38231:6;38169:76;:::i;:::-;38161:84;;37199:1053;;;;;;;;:::o;38258:141::-;38314:5;38345:6;38339:13;38330:22;;38361:32;38387:5;38361:32;:::i;:::-;38258:141;;;;:::o;38405:349::-;38474:6;38523:2;38511:9;38502:7;38498:23;38494:32;38491:119;;;38529:79;;:::i;:::-;38491:119;38649:1;38674:63;38729:7;38720:6;38709:9;38705:22;38674:63;:::i;:::-;38664:73;;38620:127;38405:349;;;;:::o;38760:106::-;38804:8;38853:5;38848:3;38844:15;38823:36;;38760:106;;;:::o;38872:183::-;38907:3;38945:1;38927:16;38924:23;38921:128;;;38983:1;38980;38977;38962:23;39005:34;39036:1;39030:8;39005:34;:::i;:::-;38998:41;;38921:128;38872:183;:::o;39061:711::-;39100:3;39138:4;39120:16;39117:26;39114:39;;;39146:5;;39114:39;39175:20;;:::i;:::-;39250:1;39232:16;39228:24;39225:1;39219:4;39204:49;39283:4;39277:11;39382:16;39375:4;39367:6;39363:17;39360:39;39327:18;39319:6;39316:30;39300:113;39297:146;;;39428:5;;;;39297:146;39474:6;39468:4;39464:17;39510:3;39504:10;39537:18;39529:6;39526:30;39523:43;;;39559:5;;;;;;39523:43;39607:6;39600:4;39595:3;39591:14;39587:27;39666:1;39648:16;39644:24;39638:4;39634:35;39629:3;39626:44;39623:57;;;39673:5;;;;;;;39623:57;39690;39738:6;39732:4;39728:17;39720:6;39716:30;39710:4;39690:57;:::i;:::-;39763:3;39756:10;;39104:668;;;;;39061:711;;:::o;39778:239::-;39918:34;39914:1;39906:6;39902:14;39895:58;39987:22;39982:2;39974:6;39970:15;39963:47;39778:239;:::o;40023:366::-;40165:3;40186:67;40250:2;40245:3;40186:67;:::i;:::-;40179:74;;40262:93;40351:3;40262:93;:::i;:::-;40380:2;40375:3;40371:12;40364:19;;40023:366;;;:::o;40395:419::-;40561:4;40599:2;40588:9;40584:18;40576:26;;40648:9;40642:4;40638:20;40634:1;40623:9;40619:17;40612:47;40676:131;40802:4;40676:131;:::i;:::-;40668:139;;40395:419;;;:::o;40820:227::-;40960:34;40956:1;40948:6;40944:14;40937:58;41029:10;41024:2;41016:6;41012:15;41005:35;40820:227;:::o;41053:366::-;41195:3;41216:67;41280:2;41275:3;41216:67;:::i;:::-;41209:74;;41292:93;41381:3;41292:93;:::i;:::-;41410:2;41405:3;41401:12;41394:19;;41053:366;;;:::o;41425:419::-;41591:4;41629:2;41618:9;41614:18;41606:26;;41678:9;41672:4;41668:20;41664:1;41653:9;41649:17;41642:47;41706:131;41832:4;41706:131;:::i;:::-;41698:139;;41425:419;;;:::o;41850:751::-;42073:4;42111:3;42100:9;42096:19;42088:27;;42125:71;42193:1;42182:9;42178:17;42169:6;42125:71;:::i;:::-;42206:72;42274:2;42263:9;42259:18;42250:6;42206:72;:::i;:::-;42288;42356:2;42345:9;42341:18;42332:6;42288:72;:::i;:::-;42370;42438:2;42427:9;42423:18;42414:6;42370:72;:::i;:::-;42490:9;42484:4;42480:20;42474:3;42463:9;42459:19;42452:49;42518:76;42589:4;42580:6;42518:76;:::i;:::-;42510:84;;41850:751;;;;;;;;:::o
Swarm Source
ipfs://500869847bd7219cc5f2c5b63573f4b5b842fae53955ff012f8955b8d5eb4a55
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.