From a97f9666db4ca884e8c6418951f35983a84e50fa Mon Sep 17 00:00:00 2001 From: Alfredos-Panagiotis Damkalis Date: Wed, 10 Mar 2021 22:54:44 +0200 Subject: [PATCH] Add reviewer and reviewed fields in TransmitterEntry Signed-off-by: Alfredos-Panagiotis Damkalis --- db/api/serializers.py | 2 +- db/base/admin.py | 50 +- db/base/fixtures/transmitters.json | 990 ++++++++++++++++++ db/base/forms.py | 4 +- ..._date_fields_on_transmitter_entry_model.py | 86 ++ db/base/models.py | 34 +- db/base/tests.py | 4 +- db/base/views.py | 62 +- db/templates/base/satellite.html | 18 +- .../includes/cards/satellite_card.html | 2 +- .../includes/cards/transmitter_card.html | 18 +- 11 files changed, 1174 insertions(+), 96 deletions(-) create mode 100644 db/base/migrations/0037_add_reviewer_and_date_fields_on_transmitter_entry_model.py diff --git a/db/api/serializers.py b/db/api/serializers.py index 925c9a9..152cc22 100644 --- a/db/api/serializers.py +++ b/db/api/serializers.py @@ -132,7 +132,7 @@ class TransmitterSerializer(serializers.ModelSerializer): mode_id = serializers.SerializerMethodField() uplink_mode = serializers.SerializerMethodField() alive = serializers.SerializerMethodField() - updated = serializers.DateTimeField(source='created') + updated = serializers.DateTimeField(source='reviewed') class Meta: model = Transmitter diff --git a/db/base/admin.py b/db/base/admin.py index 7178643..cd3c4a5 100644 --- a/db/base/admin.py +++ b/db/base/admin.py @@ -1,5 +1,4 @@ """Defines functions and settings for the django admin interface""" -from datetime import datetime from socket import error as socket_error from django.conf.urls import url @@ -7,6 +6,7 @@ from django.contrib import admin, messages from django.http import HttpResponseRedirect from django.shortcuts import redirect from django.urls import reverse +from django.utils.timezone import now from db.base.models import Artifact, DemodData, ExportedFrameset, LatestTleSet, Mode, Operator, \ Satellite, Telemetry, Tle, Transmitter, TransmitterEntry, TransmitterSuggestion @@ -95,9 +95,10 @@ class SatelliteAdmin(admin.ModelAdmin): class TransmitterEntryAdmin(admin.ModelAdmin): """Defines TransmitterEntry view in django admin UI""" list_display = ( - 'uuid', 'description', 'satellite', 'service', 'type', 'downlink_mode', 'uplink_mode', - 'baud', 'downlink_low', 'downlink_high', 'downlink_drift', 'uplink_low', 'uplink_high', - 'uplink_drift', 'is_reviewed', 'approved', 'status', 'created', 'citation', 'created_by' + 'id', 'uuid', 'description', 'satellite', 'service', 'type', 'downlink_mode', + 'uplink_mode', 'baud', 'downlink_low', 'downlink_high', 'downlink_drift', 'uplink_low', + 'uplink_high', 'uplink_drift', 'citation', 'is_reviewed', 'approved', 'status', 'created', + 'created_by', 'reviewed', 'reviewer' ) search_fields = ('satellite__id', 'uuid', 'satellite__name', 'satellite__norad_cat_id') list_filter = ( @@ -110,7 +111,6 @@ class TransmitterEntryAdmin(admin.ModelAdmin): 'uplink_mode', 'baud', ) - readonly_fields = ('uuid', 'satellite') @admin.register(TransmitterSuggestion) @@ -119,7 +119,7 @@ class TransmitterSuggestionAdmin(admin.ModelAdmin): list_display = ( 'uuid', 'description', 'satellite', 'service', 'type', 'downlink_mode', 'uplink_mode', 'baud', 'downlink_low', 'downlink_high', 'downlink_drift', 'uplink_low', 'uplink_high', - 'uplink_drift', 'status', 'created', 'citation', 'created_by' + 'uplink_drift', 'citation', 'status', 'created', 'created_by' ) search_fields = ('satellite__id', 'uuid', 'satellite__name', 'satellite__norad_cat_id') list_filter = ( @@ -132,8 +132,8 @@ class TransmitterSuggestionAdmin(admin.ModelAdmin): readonly_fields = ( 'uuid', 'description', 'status', 'type', 'uplink_low', 'uplink_high', 'uplink_drift', 'downlink_low', 'downlink_high', 'downlink_drift', 'downlink_mode', 'uplink_mode', - 'invert', 'baud', 'satellite', 'is_reviewed', 'approved', 'created', 'citation', - 'created_by', 'service' + 'invert', 'baud', 'satellite', 'is_reviewed', 'reviewer', 'reviewed', 'approved', + 'created', 'created_by', 'citation', 'service', 'coordination', 'coordination_url' ) actions = ['approve_suggestion', 'reject_suggestion'] @@ -160,12 +160,9 @@ class TransmitterSuggestionAdmin(admin.ModelAdmin): for entry in queryset: entry.approved = True entry.is_reviewed = True - entry.created = datetime.utcnow() - entry.created_by = request.user # change to reviewer + entry.reviewed = now() + entry.reviewer = request.user entry.save() - # After creating the new approved entries, we update the suggestion entries as reviewed - # Note that queryset.update doesn't use model's save() that creates new entries - queryset.update(is_reviewed=True, approved=True) if queryset_size == 1: self.message_user(request, "Transmitter suggestion was successfully approved") else: @@ -181,14 +178,11 @@ class TransmitterSuggestionAdmin(admin.ModelAdmin): """ queryset_size = len(queryset) for entry in queryset: - entry.created = datetime.utcnow() - entry.created_by = request.user # change to reviewer entry.approved = False entry.is_reviewed = True + entry.reviewed = now() + entry.reviewer = request.user entry.save() - # After creating the new approved entries, we update the suggestion entries as reviewed - # Note that queryset.update doesn't use model's save() that creates new entries - queryset.update(is_reviewed=True, approved=False) if queryset_size == 1: self.message_user(request, "Transmitter suggestion was successfully rejected") else: @@ -201,14 +195,15 @@ class TransmitterSuggestionAdmin(admin.ModelAdmin): class TransmitterAdmin(admin.ModelAdmin): """Defines Transmitter view in django admin UI""" list_display = ( - 'uuid', 'description', 'satellite', 'service', 'type', 'downlink_mode', 'uplink_mode', - 'baud', 'downlink_low', 'downlink_high', 'downlink_drift', 'uplink_low', 'uplink_high', - 'uplink_drift', 'status', 'created', 'citation', 'created_by' - ) - search_fields = ( - 'satellite__id', 'uuid', 'description', 'satellite__name', 'satellite__norad_cat_id' + 'id', 'uuid', 'description', 'satellite', 'service', 'type', 'downlink_mode', + 'uplink_mode', 'baud', 'downlink_low', 'downlink_high', 'downlink_drift', 'uplink_low', + 'uplink_high', 'uplink_drift', 'citation', 'is_reviewed', 'approved', 'status', 'created', + 'created_by', 'reviewed', 'reviewer' ) + search_fields = ('satellite__id', 'uuid', 'satellite__name', 'satellite__norad_cat_id') list_filter = ( + 'is_reviewed', + 'approved', 'type', 'status', 'service', @@ -216,7 +211,12 @@ class TransmitterAdmin(admin.ModelAdmin): 'uplink_mode', 'baud', ) - readonly_fields = ('uuid', 'satellite') + readonly_fields = ( + 'uuid', 'description', 'status', 'type', 'uplink_low', 'uplink_high', 'uplink_drift', + 'downlink_low', 'downlink_high', 'downlink_drift', 'downlink_mode', 'uplink_mode', + 'invert', 'baud', 'satellite', 'is_reviewed', 'reviewer', 'reviewed', 'approved', + 'created', 'created_by', 'citation', 'service', 'coordination', 'coordination_url' + ) @admin.register(Tle) diff --git a/db/base/fixtures/transmitters.json b/db/base/fixtures/transmitters.json index 59b8f2c..0d50b5e 100644 --- a/db/base/fixtures/transmitters.json +++ b/db/base/fixtures/transmitters.json @@ -21,8 +21,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -48,8 +50,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -75,8 +79,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -102,8 +108,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -129,8 +137,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -156,8 +166,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -183,8 +195,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -210,8 +224,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -237,8 +253,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -264,8 +282,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -291,8 +311,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -318,8 +340,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -345,8 +369,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -372,8 +398,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -399,8 +427,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -426,8 +456,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -453,8 +485,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -480,8 +514,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -507,8 +543,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -534,8 +572,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -561,8 +601,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -588,8 +630,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -615,8 +659,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -642,8 +688,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -669,8 +717,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -696,8 +746,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -723,8 +775,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -750,8 +804,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -777,8 +833,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -804,8 +862,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -831,8 +891,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -858,8 +920,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -885,8 +949,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -912,8 +978,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -939,8 +1007,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -966,8 +1036,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -993,8 +1065,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1020,8 +1094,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1047,8 +1123,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1074,8 +1152,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1101,8 +1181,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1128,8 +1210,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1155,8 +1239,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1182,8 +1268,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1209,8 +1297,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1236,8 +1326,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1263,8 +1355,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1290,8 +1384,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1317,8 +1413,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1344,8 +1442,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1371,8 +1471,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1398,8 +1500,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1425,8 +1529,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1452,8 +1558,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1479,8 +1587,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1506,8 +1616,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1533,8 +1645,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1560,8 +1674,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1587,8 +1703,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1614,8 +1732,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1641,8 +1761,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1668,8 +1790,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1695,8 +1819,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1722,8 +1848,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1749,8 +1877,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1776,8 +1906,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1803,8 +1935,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1830,8 +1964,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1857,8 +1993,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1884,8 +2022,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1911,8 +2051,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1938,8 +2080,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1965,8 +2109,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -1992,8 +2138,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2019,8 +2167,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2046,8 +2196,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2073,8 +2225,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2100,8 +2254,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2127,8 +2283,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2154,8 +2312,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2181,8 +2341,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2208,8 +2370,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2235,8 +2399,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2262,8 +2428,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2289,8 +2457,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2316,8 +2486,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2343,8 +2515,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2370,8 +2544,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2397,8 +2573,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2424,8 +2602,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2451,8 +2631,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2478,8 +2660,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2505,8 +2689,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2532,8 +2718,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2559,8 +2747,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2586,8 +2776,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2613,8 +2805,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2640,8 +2834,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2667,8 +2863,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2694,8 +2892,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2721,8 +2921,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2748,8 +2950,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2775,8 +2979,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2802,8 +3008,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2829,8 +3037,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2856,8 +3066,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2883,8 +3095,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2910,8 +3124,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2937,8 +3153,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2964,8 +3182,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -2991,8 +3211,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3018,8 +3240,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3045,8 +3269,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3072,8 +3298,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3099,8 +3327,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3126,8 +3356,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3153,8 +3385,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3180,8 +3414,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3207,8 +3443,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3234,8 +3472,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3261,8 +3501,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3288,8 +3530,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3315,8 +3559,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3342,8 +3588,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3369,8 +3617,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3396,8 +3646,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3423,8 +3675,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3450,8 +3704,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3477,8 +3733,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3504,8 +3762,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3531,8 +3791,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3558,8 +3820,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3585,8 +3849,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3612,8 +3878,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3639,8 +3907,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3666,8 +3936,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3693,8 +3965,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3720,8 +3994,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3747,8 +4023,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3774,8 +4052,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3801,8 +4081,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3828,8 +4110,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3855,8 +4139,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3882,8 +4168,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3909,8 +4197,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3936,8 +4226,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3963,8 +4255,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -3990,8 +4284,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4017,8 +4313,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4044,8 +4342,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4071,8 +4371,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4098,8 +4400,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4125,8 +4429,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4152,8 +4458,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4179,8 +4487,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4206,8 +4516,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4233,8 +4545,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4260,8 +4574,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4287,8 +4603,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4314,8 +4632,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4341,8 +4661,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4368,8 +4690,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4395,8 +4719,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4422,8 +4748,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4449,8 +4777,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4476,8 +4806,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4503,8 +4835,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4530,8 +4864,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4557,8 +4893,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4584,8 +4922,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4611,8 +4951,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4638,8 +4980,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4665,8 +5009,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4692,8 +5038,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4719,8 +5067,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4746,8 +5096,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4773,8 +5125,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4800,8 +5154,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4827,8 +5183,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4854,8 +5212,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4881,8 +5241,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4908,8 +5270,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4935,8 +5299,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4962,8 +5328,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -4989,8 +5357,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5016,8 +5386,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5043,8 +5415,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5070,8 +5444,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5097,8 +5473,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5124,8 +5502,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5151,8 +5531,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5178,8 +5560,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5205,8 +5589,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5232,8 +5618,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5259,8 +5647,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5286,8 +5676,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5313,8 +5705,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5340,8 +5734,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5367,8 +5763,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5394,8 +5792,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5421,8 +5821,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5448,8 +5850,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5475,8 +5879,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5502,8 +5908,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5529,8 +5937,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5556,8 +5966,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5583,8 +5995,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5610,8 +6024,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5637,8 +6053,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5664,8 +6082,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5691,8 +6111,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5718,8 +6140,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5745,8 +6169,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5772,8 +6198,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5799,8 +6227,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5826,8 +6256,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5853,8 +6285,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5880,8 +6314,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5907,8 +6343,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5934,8 +6372,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5961,8 +6401,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -5988,8 +6430,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6015,8 +6459,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6042,8 +6488,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6069,8 +6517,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6096,8 +6546,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6123,8 +6575,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6150,8 +6604,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6177,8 +6633,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6204,8 +6662,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6231,8 +6691,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6258,8 +6720,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6285,8 +6749,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6312,8 +6778,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6339,8 +6807,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6366,8 +6836,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6393,8 +6865,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6420,8 +6894,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6447,8 +6923,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6474,8 +6952,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6501,8 +6981,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6528,8 +7010,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6555,8 +7039,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6582,8 +7068,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6609,8 +7097,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6636,8 +7126,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6663,8 +7155,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6690,8 +7184,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6717,8 +7213,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6744,8 +7242,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6771,8 +7271,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6798,8 +7300,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6825,8 +7329,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6852,8 +7358,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6879,8 +7387,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6906,8 +7416,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6933,8 +7445,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6960,8 +7474,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -6987,8 +7503,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7014,8 +7532,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7041,8 +7561,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7068,8 +7590,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7095,8 +7619,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7122,8 +7648,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7149,8 +7677,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7176,8 +7706,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7203,8 +7735,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7230,8 +7764,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7257,8 +7793,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7284,8 +7822,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7311,8 +7851,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7338,8 +7880,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7365,8 +7909,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7392,8 +7938,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7419,8 +7967,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7446,8 +7996,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7473,8 +8025,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7500,8 +8054,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7527,8 +8083,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7554,8 +8112,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7581,8 +8141,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7608,8 +8170,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7635,8 +8199,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7662,8 +8228,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7689,8 +8257,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7716,8 +8286,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7743,8 +8315,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7770,8 +8344,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7797,8 +8373,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7824,8 +8402,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7851,8 +8431,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7878,8 +8460,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7905,8 +8489,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7932,8 +8518,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7959,8 +8547,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -7986,8 +8576,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8013,8 +8605,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8040,8 +8634,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8067,8 +8663,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8094,8 +8692,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8121,8 +8721,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8148,8 +8750,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8175,8 +8779,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8202,8 +8808,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8229,8 +8837,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8256,8 +8866,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8283,8 +8895,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8310,8 +8924,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8337,8 +8953,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8364,8 +8982,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8391,8 +9011,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8418,8 +9040,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8445,8 +9069,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8472,8 +9098,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8499,8 +9127,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8526,8 +9156,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8553,8 +9185,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8580,8 +9214,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8607,8 +9243,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8634,8 +9272,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8661,8 +9301,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8688,8 +9330,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8715,8 +9359,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8742,8 +9388,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8769,8 +9417,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8796,8 +9446,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8823,8 +9475,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8850,8 +9504,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8877,8 +9533,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8904,8 +9562,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8931,8 +9591,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8958,8 +9620,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -8985,8 +9649,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9012,8 +9678,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9039,8 +9707,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9066,8 +9736,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9093,8 +9765,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9120,8 +9794,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9147,8 +9823,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9174,8 +9852,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9201,8 +9881,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9228,8 +9910,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9255,8 +9939,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9282,8 +9968,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9309,8 +9997,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9336,8 +10026,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9363,8 +10055,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9390,8 +10084,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9417,8 +10113,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9444,8 +10142,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9471,8 +10171,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9498,8 +10200,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9525,8 +10229,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9552,8 +10258,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9579,8 +10287,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9606,8 +10316,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9633,8 +10345,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9660,8 +10374,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9687,8 +10403,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9714,8 +10432,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9741,8 +10461,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9768,8 +10490,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9795,8 +10519,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9822,8 +10548,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9849,8 +10577,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9876,8 +10606,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9903,8 +10635,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9930,8 +10664,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9957,8 +10693,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -9984,8 +10722,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10011,8 +10751,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10038,8 +10780,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10065,8 +10809,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10092,8 +10838,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10119,8 +10867,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10146,8 +10896,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10173,8 +10925,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10200,8 +10954,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10227,8 +10983,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10254,8 +11012,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10281,8 +11041,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10308,8 +11070,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10335,8 +11099,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10362,8 +11128,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10389,8 +11157,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10416,8 +11186,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10443,8 +11215,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10470,8 +11244,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10497,8 +11273,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10524,8 +11302,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10551,8 +11331,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10578,8 +11360,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10605,8 +11389,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10632,8 +11418,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10659,8 +11447,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10686,8 +11476,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10713,8 +11505,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10740,8 +11534,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10767,8 +11563,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10794,8 +11592,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10821,8 +11621,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10848,8 +11650,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10875,8 +11679,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10902,8 +11708,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10929,8 +11737,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10956,8 +11766,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -10983,8 +11795,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11010,8 +11824,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11037,8 +11853,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11064,8 +11882,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11091,8 +11911,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11118,8 +11940,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11145,8 +11969,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11172,8 +11998,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11199,8 +12027,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11226,8 +12056,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11253,8 +12085,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11280,8 +12114,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11307,8 +12143,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11334,8 +12172,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11361,8 +12201,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11388,8 +12230,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11415,8 +12259,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11442,8 +12288,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11469,8 +12317,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11496,8 +12346,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11523,8 +12375,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11550,8 +12404,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11577,8 +12433,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11604,8 +12462,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11631,8 +12491,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11658,8 +12520,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11685,8 +12549,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11712,8 +12578,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11739,8 +12607,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11766,8 +12636,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11793,8 +12665,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11820,8 +12694,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11847,8 +12723,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11874,8 +12752,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11901,8 +12781,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11928,8 +12810,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11955,8 +12839,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -11982,8 +12868,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12009,8 +12897,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12036,8 +12926,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12063,8 +12955,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12090,8 +12984,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12117,8 +13013,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12144,8 +13042,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12171,8 +13071,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12198,8 +13100,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12225,8 +13129,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12252,8 +13158,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12279,8 +13187,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12306,8 +13216,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12333,8 +13245,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12360,8 +13274,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12387,8 +13303,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12414,8 +13332,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12441,8 +13361,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12468,8 +13390,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12495,8 +13419,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12522,8 +13448,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12549,8 +13477,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12576,8 +13506,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12603,8 +13535,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12630,8 +13564,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12657,8 +13593,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12684,8 +13622,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12711,8 +13651,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12738,8 +13680,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12765,8 +13709,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12792,8 +13738,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12819,8 +13767,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12846,8 +13796,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-08T21:53:28.319Z", + "reviewed": "2019-04-08T21:53:28.319Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12873,8 +13825,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-09T10:28:53.832Z", + "reviewed": "2019-04-09T10:28:53.832Z", "citation": "https://sdrsatellitesounds.wordpress.com/transit-5b-5/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12900,8 +13854,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-09T10:29:24.053Z", + "reviewed": "2019-04-09T10:29:24.053Z", "citation": "https://sdrsatellitesounds.wordpress.com/transit-5b-5/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12927,8 +13883,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-25T10:01:59.340Z", + "reviewed": "2019-04-25T10:01:59.340Z", "citation": "test", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12954,8 +13912,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-25T10:02:39.613Z", + "reviewed": "2019-04-25T10:02:39.613Z", "citation": "test", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -12981,8 +13941,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-25T10:04:09.724Z", + "reviewed": "2019-04-25T10:04:09.724Z", "citation": "test", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13008,8 +13970,10 @@ "is_reviewed": true, "approved": true, "created": "2019-04-25T10:04:09.728Z", + "reviewed": "2019-04-25T10:04:09.728Z", "citation": "test", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13035,8 +13999,10 @@ "is_reviewed": true, "approved": true, "created": "2019-05-05T15:32:54.028Z", + "reviewed": "2019-05-05T15:32:54.028Z", "citation": "FAKE FAKE FAKE", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13062,8 +14028,10 @@ "is_reviewed": true, "approved": true, "created": "2019-05-05T15:33:47.063Z", + "reviewed": "2019-05-05T15:33:47.063Z", "citation": "FAKE FAKE FAKE", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13089,8 +14057,10 @@ "is_reviewed": true, "approved": true, "created": "2019-05-05T15:33:47.079Z", + "reviewed": "2019-05-05T15:33:47.079Z", "citation": "CITATION NEEDED - https://xkcd.com/285/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13116,8 +14086,10 @@ "is_reviewed": true, "approved": true, "created": "2019-06-30T15:39:06.107Z", + "reviewed": "2019-06-30T15:39:06.107Z", "citation": "This is a very very very very very very very very very very very very very very very very very very very very very very very very very very long citation.", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13143,8 +14115,10 @@ "is_reviewed": true, "approved": true, "created": "2019-06-30T15:39:37.383Z", + "reviewed": "2019-06-30T15:39:37.383Z", "citation": "This is a very very very very very very very very very very very very very very very very very very very very very very very very very very long citation.", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13170,8 +14144,10 @@ "is_reviewed": false, "approved": false, "created": "2019-06-30T15:41:58.155Z", + "reviewed": "2019-06-30T15:41:58.155Z", "citation": "TEST TEST TEST https://community.libre.space/t/new-satellite-suggestion-acrux-1-launch-on-29th-june-at-4-30utc/4175/", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13197,8 +14173,10 @@ "is_reviewed": true, "approved": false, "created": "2019-06-30T15:42:24.832Z", + "reviewed": "2019-06-30T15:42:24.832Z", "citation": "TEST https://community.libre.space/t/new-satellite-suggestion-acrux-1-launch-on-29th-june-at-4-30utc/4175/18 TEST", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13224,8 +14202,10 @@ "is_reviewed": true, "approved": true, "created": "2019-07-13T19:19:26.710Z", + "reviewed": "2019-07-13T19:19:26.710Z", "citation": "cshields", "created_by": null, + "reviewer": null, "service": "Amateur" } }, @@ -13251,8 +14231,10 @@ "is_reviewed": true, "approved": true, "created": "2019-07-13T19:20:02.316Z", + "reviewed": "2019-07-13T19:20:02.316Z", "citation": "cshields", "created_by": null, + "reviewer": null, "service": "Amateur" } }, @@ -13278,8 +14260,10 @@ "is_reviewed": true, "approved": true, "created": "2019-07-13T19:20:02Z", + "reviewed": "2019-07-13T19:20:02Z", "citation": "cshields", "created_by": null, + "reviewer": null, "service": "Space Research" } }, @@ -13305,8 +14289,10 @@ "is_reviewed": true, "approved": true, "created": "2019-10-07T14:43:26.965Z", + "reviewed": "2019-10-07T14:43:26.965Z", "citation": "test", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13332,8 +14318,10 @@ "is_reviewed": true, "approved": true, "created": "2019-10-07T14:43:45.659Z", + "reviewed": "2019-10-07T14:43:45.659Z", "citation": "test", "created_by": null, + "reviewer": null, "service": "Unknown" } }, @@ -13359,8 +14347,10 @@ "is_reviewed": true, "approved": false, "created": "2019-10-07T14:43:52.767Z", + "reviewed": "2019-10-07T14:43:52.767Z", "citation": "TEST https://community.libre.space/t/new-satellite-suggestion-acrux-1-launch-on-29th-june-at-4-30utc/4175/18 TEST", "created_by": null, + "reviewer": null, "service": "Unknown" } } diff --git a/db/base/forms.py b/db/base/forms.py index e5b0ba4..dab7d6b 100644 --- a/db/base/forms.py +++ b/db/base/forms.py @@ -45,17 +45,15 @@ class TransmitterUpdateForm(BSModalModelForm): # pylint: disable=too-many-ances fields = [ 'description', 'type', 'status', 'uplink_low', 'uplink_high', 'uplink_drift', 'uplink_mode', 'downlink_low', 'downlink_high', 'downlink_drift', 'downlink_mode', - 'invert', 'baud', 'citation', 'service', 'coordination', 'coordination_url', 'created' + 'invert', 'baud', 'citation', 'service', 'coordination', 'coordination_url' ] labels = { 'downlink_low': _('Downlink freq.'), 'uplink_low': _('Uplink freq.'), 'invert': _('Inverted Transponder?'), - 'created': _('Updated'), } widgets = { 'description': TextInput(), - 'created': TextInput(attrs={'readonly': True}), } diff --git a/db/base/migrations/0037_add_reviewer_and_date_fields_on_transmitter_entry_model.py b/db/base/migrations/0037_add_reviewer_and_date_fields_on_transmitter_entry_model.py new file mode 100644 index 0000000..855b39a --- /dev/null +++ b/db/base/migrations/0037_add_reviewer_and_date_fields_on_transmitter_entry_model.py @@ -0,0 +1,86 @@ +# Generated by Django 3.1.5 on 2021-03-08 22:59 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +def add_review_details(apps, schema_editor): + TransmitterEntry = apps.get_model('base', 'TransmitterEntry') + orphans = TransmitterEntry.objects.filter(created_by__isnull=True, is_reviewed=True) + for entry in orphans: + entry.reviewed = entry.created + entry.save() + ids = [] + non_orphans = TransmitterEntry.objects.filter(created_by__isnull=False, is_reviewed=True).order_by('created') + for entry in non_orphans: + if entry.id in ids: + entry.delete() + continue + next_entries = TransmitterEntry.objects.filter(created_by__isnull=False, is_reviewed=True).filter(uuid=entry.uuid).filter(created__gt=entry.created).order_by('created') + for next_entry in next_entries: + if (entry.uuid == next_entry.uuid and entry.description == next_entry.description and + entry.status == next_entry.status and entry.type == next_entry.type and entry.uplink_low == next_entry.uplink_low and + entry.uplink_high == next_entry.uplink_high and entry.uplink_drift == next_entry.uplink_drift and + entry.downlink_low == next_entry.downlink_low and entry.downlink_high == next_entry.downlink_high and + entry.downlink_drift == next_entry.downlink_drift and entry.downlink_mode == next_entry.downlink_mode and + entry.uplink_mode == next_entry.uplink_mode and entry.invert == next_entry.invert and entry.baud == next_entry.baud and + entry.satellite == next_entry.satellite and entry.reviewed == next_entry.reviewed and entry.approved == next_entry.approved and + entry.citation == next_entry.citation and entry.service == next_entry.service and entry.coordination == next_entry.coordination and + entry.coordination_url == next_entry.coordination_url): + ids.append(next_entry.id) + entry.reviewed = next_entry.created + entry.reviewer = next_entry.created_by + entry.save() + break + else: + entry.reviewed = entry.created + entry.reviewer = entry.created_by + entry.save() + + +def remove_review_details(apps, schema_editor): + TransmitterEntry = apps.get_model('base', 'TransmitterEntry') + non_orphans = TransmitterEntry.objects.filter(created_by__isnull=False, is_reviewed=True).order_by('created') + for entry in non_orphans: + entry.pk = None + entry.created = entry.reviewed + entry.created_by = entry.reviewer + entry.save() + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('base', '0036_rename_reviewed_field_on_transmitter_entry_model'), + ] + + operations = [ + migrations.AddField( + model_name='transmitterentry', + name='reviewed', + field=models.DateTimeField(blank=True, help_text='Timestamp of review', null=True), + ), + migrations.AddField( + model_name='transmitterentry', + name='reviewer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reviewed_transmitters', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='transmitterentry', + name='created', + field=models.DateTimeField(default=django.utils.timezone.now, help_text='Timestamp of creation/edit'), + ), + migrations.AlterField( + model_name='transmitterentry', + name='created_by', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_transmitters', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterUniqueTogether( + name='transmitterentry', + unique_together={('uuid', 'reviewed')}, + ), + migrations.RunPython(add_review_details, remove_review_details), + ] diff --git a/db/base/models.py b/db/base/models.py index 86ee9a8..8671f11 100644 --- a/db/base/models.py +++ b/db/base/models.py @@ -341,15 +341,11 @@ class TransmitterEntry(models.Model): satellite = models.ForeignKey( Satellite, null=True, related_name='transmitter_entries', on_delete=models.SET_NULL ) - is_reviewed = models.BooleanField(default=False) - approved = models.BooleanField(default=False) - created = models.DateTimeField(default=now, help_text='Timestamp for this entry or edit') citation = models.CharField( max_length=512, default='CITATION NEEDED - https://xkcd.com/285/', help_text='A reference (preferrably URL) for this entry or edit' ) - created_by = models.ForeignKey(get_user_model(), null=True, on_delete=models.SET_NULL) service = models.CharField( choices=zip(SERVICE_TYPE, SERVICE_TYPE), max_length=34, @@ -368,6 +364,23 @@ class TransmitterEntry(models.Model): help_text='URL for more details on this frequency coordination', validators=[URLValidator(schemes=['http', 'https'], regex=URL_REGEX)] ) + is_reviewed = models.BooleanField(default=False) + reviewer = models.ForeignKey( + get_user_model(), + related_name='reviewed_transmitters', + blank=True, + null=True, + on_delete=models.SET_NULL + ) + reviewed = models.DateTimeField(blank=True, null=True, help_text='Timestamp of review') + approved = models.BooleanField(default=False) + created = models.DateTimeField(default=now, help_text='Timestamp of creation/edit') + created_by = models.ForeignKey( + get_user_model(), + related_name='created_transmitters', + null=True, + on_delete=models.SET_NULL + ) # NOTE: future fields will need to be added to forms.py and to # api/serializers.py @@ -384,19 +397,12 @@ class TransmitterEntry(models.Model): return False class Meta: - unique_together = ("uuid", "created") + unique_together = ("uuid", "reviewed") verbose_name_plural = 'Transmitter entries' def __str__(self): return self.description - # see https://github.com/PyCQA/pylint-django/issues/94 - def save(self, *args, **kwargs): # pylint: disable=W0222 - # this assignment is needed to preserve changes made to a Transmitter - # through the admin UI - self.id = None # pylint: disable=C0103, W0201 - super().save() - def clean(self): if self.type == TRANSMITTER_TYPE[0]: if self.uplink_low is not None or self.uplink_high is not None \ @@ -462,10 +468,10 @@ class TransmitterManager(models.Manager): # pylint: disable=R0903 """ subquery = TransmitterEntry.objects.filter( is_reviewed=True, approved=True - ).filter(uuid=OuterRef('uuid')).order_by('-created') + ).filter(uuid=OuterRef('uuid')).order_by('-reviewed') return super().get_queryset().filter( is_reviewed=True, approved=True - ).filter(created=Subquery(subquery.values('created')[:1])) + ).filter(reviewed=Subquery(subquery.values('reviewed')[:1])) class Transmitter(TransmitterEntry): diff --git a/db/base/tests.py b/db/base/tests.py index e949af9..120e2bf 100644 --- a/db/base/tests.py +++ b/db/base/tests.py @@ -83,9 +83,11 @@ class TransmitterFactory(factory.django.DjangoModelFactory): satellite = factory.SubFactory(SatelliteFactory) is_reviewed = True approved = True - created = fuzzy.FuzzyDateTime(now() - timedelta(days=30), now()) + created = fuzzy.FuzzyDateTime(now() - timedelta(days=30), now() - timedelta(hours=10)) + reviewed = fuzzy.FuzzyDateTime(now() - timedelta(hours=10), now()) citation = fuzzy.FuzzyText() created_by = factory.SubFactory(UserFactory) + reviewer = factory.SubFactory(UserFactory) class Meta: model = Transmitter diff --git a/db/base/views.py b/db/base/views.py index 7975343..7e89ebf 100644 --- a/db/base/views.py +++ b/db/base/views.py @@ -6,7 +6,7 @@ from bootstrap_modal_forms.generic import BSModalCreateView, BSModalUpdateView from django.conf import settings from django.contrib import messages from django.contrib.auth import get_user_model -from django.contrib.auth.decorators import login_required, user_passes_test +from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin from django.core.cache import cache from django.core.exceptions import ObjectDoesNotExist @@ -16,7 +16,7 @@ from django.db.models import Count, Max, Prefetch, Q from django.http import HttpResponse, HttpResponseServerError, JsonResponse from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse -from django.utils import timezone +from django.utils.timezone import now from django.views.decorators.http import require_POST from db.base.forms import SatelliteModelForm, TransmitterModelForm, TransmitterUpdateForm @@ -29,12 +29,6 @@ from db.base.utils import cache_statistics, millify, read_influx LOGGER = logging.getLogger('db') -def superuser_check(user): - """Returns True if user is a superuser, for use with @user_passes_test - """ - return user.is_superuser - - def home(request): """View to render home page. @@ -55,7 +49,7 @@ def home(request): # Calculate latest contributors latest_data_satellites = [] found = False - date_from = timezone.now() - timedelta(days=1) + date_from = now() - timedelta(days=1) data_list = DemodData.objects.filter(timestamp__gte=date_from).order_by('-pk') paginator = Paginator(data_list, 50) page = paginator.page(1) @@ -77,7 +71,7 @@ def home(request): ).prefetch_related(prefetch_approved, prefetch_suggested) # Calculate latest contributors - date_from = timezone.now() - timedelta(days=1) + date_from = now() - timedelta(days=1) latest_submitters = DemodData.objects.filter(timestamp__gte=date_from ).values('station').annotate(c=Count('station') ).order_by('-c') @@ -132,7 +126,7 @@ def satellite(request, norad): :returns: base/satellite.html """ - satellite_obj = get_object_or_404(Satellite.objects, norad_cat_id=norad) + satellite_obj = get_object_or_404(Satellite, norad_cat_id=norad) latest_tle = None latest_tle_set = None @@ -199,31 +193,26 @@ def request_export(request, norad, period=None): @login_required @require_POST -@user_passes_test(superuser_check) def transmitter_suggestion_handler(request): - """Returns the Satellite page after approving or rejecting a suggestion + """Returns the Satellite page after approving or rejecting a suggestion if + user has approve permission. :returns: Satellite page """ - transmitter = TransmitterSuggestion.objects.get(uuid=request.POST['uuid']) - if 'approve' in request.POST: - transmitter.approved = True - messages.success(request, ('Transmitter approved.')) - elif 'reject' in request.POST: - transmitter.approved = False - messages.success(request, ('Transmitter rejected.')) - transmitter.is_reviewed = True - transmitter.created = timezone.now() - transmitter.created_by = request.user # change to reviewer + transmitter = get_object_or_404(TransmitterSuggestion, pk=request.POST['pk']) + if request.user.has_perm('base.approve'): + if 'approve' in request.POST: + transmitter.approved = True + messages.success(request, ('Transmitter approved.')) + elif 'reject' in request.POST: + transmitter.approved = False + messages.success(request, ('Transmitter rejected.')) + transmitter.is_reviewed = True + transmitter.reviewed = now() + transmitter.reviewer = request.user - transmitter.save() + transmitter.save() - # the way we handle suggestions in admin is to update the suggestion as - # reviewed and save a new object. This feels hacky but preserves the - # admin workflow - TransmitterSuggestion.objects.filter(uuid=request.POST['uuid']).update( - is_reviewed=True, approved=transmitter.approved - ) redirect_page = redirect( reverse('satellite', kwargs={'norad': transmitter.satellite.norad_cat_id}) ) @@ -361,6 +350,7 @@ class TransmitterCreateView(LoginRequiredMixin, BSModalCreateView): """ transmitter = form.instance transmitter.satellite = self.satellite + transmitter.created = now() transmitter.created_by = self.user if not self.request.is_ajax(): notify_transmitter_suggestion.delay(transmitter.satellite.id, self.user.id) @@ -380,20 +370,20 @@ class TransmitterUpdateView(LoginRequiredMixin, BSModalUpdateView): user = get_user_model() - def get_initial(self): - initial = {} - initial['created'] = timezone.now() - return initial - def dispatch(self, request, *args, **kwargs): self.user = request.user return super().dispatch(request, *args, **kwargs) def form_valid(self, form): transmitter = form.instance - transmitter.created_by = self.user + # Add update as a new TransmitterEntry object and change fields in order to be a suggestion + transmitter.pk = None + transmitter.reviewed = None + transmitter.reviewer = None transmitter.is_reviewed = False transmitter.approved = False + transmitter.created = now() + transmitter.created_by = self.user if not self.request.is_ajax(): notify_transmitter_suggestion.delay(transmitter.satellite.id, self.user.id) return super().form_valid(form) diff --git a/db/templates/base/satellite.html b/db/templates/base/satellite.html index a4548bc..eb90aa9 100644 --- a/db/templates/base/satellite.html +++ b/db/templates/base/satellite.html @@ -46,11 +46,10 @@ - {% if satellite.transmitters %} - {{ satellite.transmitters.count }} - {% endif %} - {% if request.user.is_superuser and satellite.transmitter_suggestion_count %} - + {% if perms.base.approve and satellite.transmitter_suggestion_count %} + {{ satellite.transmitter_suggestion_count }} + {% elif satellite.transmitters %} + {{ satellite.transmitters.count }} {% endif %}

Transmitters

@@ -363,14 +362,11 @@ {% endfor %} - - {% if request.user.is_superuser and satellite.transmitter_suggestion_count %} {% for transmitter in transmitter_suggestions %} -
- {% include 'includes/cards/transmitter_card.html' with satellite=satellite transmitter=transmitter suggestion_card=True %} -
+
+ {% include 'includes/cards/transmitter_card.html' with satellite=satellite transmitter=transmitter suggestion_card=True %} +
{% endfor %} - {% endif %} diff --git a/db/templates/includes/cards/satellite_card.html b/db/templates/includes/cards/satellite_card.html index b82ba68..3f9fe92 100644 --- a/db/templates/includes/cards/satellite_card.html +++ b/db/templates/includes/cards/satellite_card.html @@ -9,7 +9,7 @@
- {% if request.user.is_superuser and satellite.suggested_transmitters|length > 0 %} + {% if perms.base.approve and satellite.suggested_transmitters|length > 0 %}
{{ satellite.suggested_transmitters|length }} diff --git a/db/templates/includes/cards/transmitter_card.html b/db/templates/includes/cards/transmitter_card.html index 8967508..e61dcca 100644 --- a/db/templates/includes/cards/transmitter_card.html +++ b/db/templates/includes/cards/transmitter_card.html @@ -29,11 +29,11 @@