Merge m-c to autoland, a=merge
authorWes Kocher <wkocher@mozilla.com>
Mon, 27 Feb 2017 13:39:07 -0800
changeset 394068 1505329bcea631ff32c8f278a324a7165fb8de0f
parent 394067 62736acb85d02f7fe6e8135a46646b7fa0e4703b (current diff)
parent 394050 5d1ebf7782dfd48afbac00e99f93c1726affec09 (diff)
child 394069 012f622e6db538ca428ebbd12a219b71c4275d16
push id1468
push userasasaki@mozilla.com
push dateMon, 05 Jun 2017 19:31:07 +0000
treeherdermozilla-release@0641fc6ee9d1 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone54.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge m-c to autoland, a=merge MozReview-Commit-ID: 8dvpEkAL5Vh
dom/archivereader/ArchiveEvent.cpp
dom/archivereader/ArchiveEvent.h
dom/archivereader/ArchiveReader.cpp
dom/archivereader/ArchiveReader.h
dom/archivereader/ArchiveReaderCommon.h
dom/archivereader/ArchiveRequest.cpp
dom/archivereader/ArchiveRequest.h
dom/archivereader/ArchiveZipEvent.cpp
dom/archivereader/ArchiveZipEvent.h
dom/archivereader/ArchiveZipFile.cpp
dom/archivereader/ArchiveZipFile.h
dom/archivereader/moz.build
dom/archivereader/test/helpers.js
dom/archivereader/test/mochitest.ini
dom/archivereader/test/test_basic.html
dom/archivereader/test/test_nonUnicode.html
dom/archivereader/test/test_zip_in_zip.html
dom/indexedDB/test/test_blob_archive.html
dom/webidl/ArchiveReader.webidl
dom/webidl/ArchiveRequest.webidl
modules/libpref/init/all.js
testing/web-platform/mozilla/meta/wasm/nop.wast.js.html.ini
testing/web-platform/mozilla/meta/wasm/resizing.wast.js.html.ini
--- a/browser/base/content/test/general/browser.ini
+++ b/browser/base/content/test/general/browser.ini
@@ -284,16 +284,17 @@ skip-if = toolkit == "windows" # Disable
 [browser_menuButtonFitts.js]
 skip-if = os != "win" # The Fitts Law menu button is only supported on Windows (bug 969376)
 [browser_middleMouse_noJSPaste.js]
 subsuite = clipboard
 [browser_minimize.js]
 [browser_misused_characters_in_strings.js]
 [browser_modifiedclick_inherit_principal.js]
 [browser_offlineQuotaNotification.js]
+skip-if = os == "linux" && !debug # bug 1304273
 [browser_feed_discovery.js]
 support-files = feed_discovery.html
 [browser_gZipOfflineChild.js]
 support-files = test_offline_gzip.html gZipOfflineChild.cacheManifest gZipOfflineChild.cacheManifest^headers^ gZipOfflineChild.html gZipOfflineChild.html^headers^
 [browser_overflowScroll.js]
 [browser_pageInfo.js]
 [browser_page_style_menu.js]
 [browser_page_style_menu_update.js]
new file mode 100644
--- /dev/null
+++ b/docshell/base/crashtests/1341657.html
@@ -0,0 +1,14 @@
+<html>
+    <head>
+        <script>
+            o1 = document.createElement("script");
+            o2 = document.implementation.createDocument('', '', null);
+            o3 = document.createElement("iframe");
+            document.documentElement.appendChild(o3);
+            o4 = o3.contentWindow;
+            o5 = document.createTextNode('o2.adoptNode(o3); try { o4.location = "" } catch(e) {}');
+            o1.appendChild(o5);
+            document.documentElement.appendChild(o1);
+        </script>
+    </head>
+</html>
\ No newline at end of file
--- a/docshell/base/crashtests/crashtests.list
+++ b/docshell/base/crashtests/crashtests.list
@@ -9,8 +9,9 @@ load 436900-1.html
 asserts(0-1) load 436900-2.html # bug 566159
 load 500328-1.html
 load 514779-1.xhtml
 load 614499-1.html
 load 678872-1.html
 skip-if(Android) pref(dom.disable_open_during_load,false) load 914521.html
 pref(browser.send_pings,true) load 1257730-1.html
 load 1331295.html
+load 1341657.html
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -9887,19 +9887,24 @@ nsDocShell::InternalLoad(nsIURI* aURI,
   // 2. AND aWindowTarget is not a new window, nor a top-level window.
   //
   // This variable will be used when we call NS_CheckContentLoadPolicy, and
   // later when we call DoURILoad.
   uint32_t contentType;
   if (IsFrame() && !isTargetTopLevelDocShell) {
     nsCOMPtr<Element> requestingElement =
       mScriptGlobal->AsOuter()->GetFrameElementInternal();
-    NS_ASSERTION(requestingElement, "A frame but no DOM element!?");
-    contentType = requestingElement->IsHTMLElement(nsGkAtoms::iframe) ?
-      nsIContentPolicy::TYPE_INTERNAL_IFRAME : nsIContentPolicy::TYPE_INTERNAL_FRAME;
+    if (requestingElement) {
+      contentType = requestingElement->IsHTMLElement(nsGkAtoms::iframe) ?
+        nsIContentPolicy::TYPE_INTERNAL_IFRAME : nsIContentPolicy::TYPE_INTERNAL_FRAME;
+    } else {
+      // If we have lost our frame element by now, just assume we're
+      // an iframe since that's more common.
+      contentType = nsIContentPolicy::TYPE_INTERNAL_IFRAME;
+    }
   } else {
     contentType = nsIContentPolicy::TYPE_DOCUMENT;
     isTargetTopLevelDocShell = true;
   }
 
   // If there's no targetDocShell, that means we are about to create a new window,
   // perform a content policy check before creating the window.
   if (!targetDocShell) {
@@ -9919,23 +9924,25 @@ nsDocShell::InternalLoad(nsIURI* aURI,
         requestingElement = mScriptGlobal->AsOuter()->GetFrameElementInternal();
         requestingContext = requestingElement;
       }
     } else {
       requestingElement = mScriptGlobal->AsOuter()->GetFrameElementInternal();
       requestingContext = requestingElement;
 
 #ifdef DEBUG
-      // Get the docshell type for requestingElement.
-      nsCOMPtr<nsIDocument> requestingDoc = requestingElement->OwnerDoc();
-      nsCOMPtr<nsIDocShell> elementDocShell = requestingDoc->GetDocShell();
-
-      // requestingElement docshell type = current docshell type.
-      MOZ_ASSERT(mItemType == elementDocShell->ItemType(),
-                "subframes should have the same docshell type as their parent");
+      if (requestingElement) {
+        // Get the docshell type for requestingElement.
+        nsCOMPtr<nsIDocument> requestingDoc = requestingElement->OwnerDoc();
+        nsCOMPtr<nsIDocShell> elementDocShell = requestingDoc->GetDocShell();
+
+        // requestingElement docshell type = current docshell type.
+        MOZ_ASSERT(mItemType == elementDocShell->ItemType(),
+                  "subframes should have the same docshell type as their parent");
+      }
 #endif
     }
 
     // Since Content Policy checks are performed within docShell as well as
     // the ContentSecurityManager we need a reliable way to let certain
     // nsIContentPolicy consumers ignore duplicate calls. Let's use the 'extra'
     // argument to pass a specific identifier.
     nsCOMPtr<nsISupportsString> extraStr =
deleted file mode 100644
--- a/dom/archivereader/ArchiveEvent.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "ArchiveEvent.h"
-
-#include "nsCExternalHandlerService.h"
-#include "nsProxyRelease.h"
-
-USING_ARCHIVEREADER_NAMESPACE
-
-NS_IMPL_ISUPPORTS0(ArchiveItem)
-
-ArchiveItem::ArchiveItem()
-{
-}
-
-ArchiveItem::~ArchiveItem()
-{
-}
-
-
-nsCString
-ArchiveItem::GetType()
-{
-  if (mType.IsEmpty()) {
-    return NS_LITERAL_CSTRING("binary/octet-stream");
-  }
-
-  return mType;
-}
-
-void
-ArchiveItem::SetType(const nsCString& aType)
-{
-  mType = aType;
-}
-
-ArchiveReaderEvent::ArchiveReaderEvent(ArchiveReader* aArchiveReader)
-: mArchiveReader(aArchiveReader)
-{
-}
-
-ArchiveReaderEvent::~ArchiveReaderEvent()
-{
-  if (!NS_IsMainThread()) {
-    NS_ReleaseOnMainThread(mMimeService.forget());
-  }
-}
-
-// From the filename to the mimetype:
-nsresult
-ArchiveReaderEvent::GetType(nsCString& aExt,
-                            nsCString& aMimeType)
-{
-  MOZ_ASSERT(NS_IsMainThread());
-
-  nsresult rv;
-  
-  if (mMimeService.get() == nullptr) {
-    mMimeService = do_GetService(NS_MIMESERVICE_CONTRACTID, &rv);
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  rv = mMimeService->GetTypeFromExtension(aExt, aMimeType);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveReaderEvent::Run()
-{
-  return Exec();
-}
-
-nsresult
-ArchiveReaderEvent::RunShare(nsresult aStatus)
-{
-  mStatus = aStatus;
-
-  NS_DispatchToMainThread(NewRunnableMethod(this, &ArchiveReaderEvent::ShareMainThread));
-
-  return NS_OK;
-}
-
-void
-ArchiveReaderEvent::ShareMainThread()
-{
-  nsTArray<RefPtr<File>> fileList;
-
-  if (!NS_FAILED(mStatus)) {
-    // This extra step must run in the main thread:
-    for (uint32_t index = 0; index < mFileList.Length(); ++index) {
-      RefPtr<ArchiveItem> item = mFileList[index];
-
-      nsString tmp;
-      nsresult rv = item->GetFilename(tmp);
-      nsCString filename = NS_ConvertUTF16toUTF8(tmp);
-      if (NS_FAILED(rv)) {
-        continue;
-      }
-
-      int32_t offset = filename.RFindChar('.');
-      if (offset != kNotFound) {
-        filename.Cut(0, offset + 1);
-
-        // Just to be sure, if something goes wrong, the mimetype is an empty string:
-        nsCString type;
-        if (NS_SUCCEEDED(GetType(filename, type))) {
-          item->SetType(type);
-        }
-      }
-
-      // This is a File:
-      RefPtr<File> file = item->GetFile(mArchiveReader);
-      if (file) {
-        fileList.AppendElement(file);
-      }
-    }
-  }
-
-  mArchiveReader->Ready(fileList, mStatus);
-}
deleted file mode 100644
--- a/dom/archivereader/ArchiveEvent.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_archivereader_domarchiveevent_h__
-#define mozilla_dom_archivereader_domarchiveevent_h__
-
-#include "ArchiveReader.h"
-
-#include "mozilla/dom/File.h"
-#include "nsISeekableStream.h"
-#include "nsIMIMEService.h"
-
-#include "ArchiveReaderCommon.h"
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-/**
- * This class contains all the info needed for a single item
- * It must contain the implementation of the File() method.
- */
-class ArchiveItem : public nsISupports
-{
-public:
-  NS_DECL_THREADSAFE_ISUPPORTS
-
-  ArchiveItem();
-
-  // Getter/Setter for the type
-  nsCString GetType();
-  void SetType(const nsCString& aType);
-
-  // Getter for the filename
-  virtual nsresult GetFilename(nsString& aFilename) = 0;
-
-  // Generate a File
-  virtual already_AddRefed<File> GetFile(ArchiveReader* aArchiveReader) = 0;
-
-protected:
-  virtual ~ArchiveItem();
-
-  nsCString mType;
-};
-
-/**
- * This class must be extended by any archive format supported by ArchiveReader API
- * This class runs in a different thread and it calls the 'exec()' method.
- * The exec() must populate mFileList and mStatus then it must call RunShare();
- */
-class ArchiveReaderEvent : public Runnable
-{
-public:
-  NS_DECL_NSIRUNNABLE
-
-  explicit ArchiveReaderEvent(ArchiveReader* aArchiveReader);
-
-protected:
-  virtual ~ArchiveReaderEvent();
-
-public:
-  // This must be implemented
-  virtual nsresult Exec() = 0;
-
-protected:
-  nsresult GetType(nsCString& aExt,
-                   nsCString& aMimeType);
-
-  nsresult RunShare(nsresult aStatus);
-  void ShareMainThread();
-
-protected: // data
-  ArchiveReader* mArchiveReader;
-
-  nsCOMPtr<nsIMIMEService> mMimeService;
-
-  nsTArray<RefPtr<ArchiveItem> > mFileList; // this must be populated
-  nsresult mStatus;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchiveevent_h__
deleted file mode 100644
--- a/dom/archivereader/ArchiveReader.cpp
+++ /dev/null
@@ -1,217 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "ArchiveReader.h"
-#include "ArchiveRequest.h"
-#include "ArchiveEvent.h"
-#include "ArchiveZipEvent.h"
-
-#include "nsIURI.h"
-#include "nsNetCID.h"
-
-#include "mozilla/dom/ArchiveReaderBinding.h"
-#include "mozilla/dom/BindingDeclarations.h"
-#include "mozilla/dom/File.h"
-#include "mozilla/dom/EncodingUtils.h"
-#include "mozilla/Preferences.h"
-
-using namespace mozilla;
-using namespace mozilla::dom;
-USING_ARCHIVEREADER_NAMESPACE
-
-/* static */ already_AddRefed<ArchiveReader>
-ArchiveReader::Constructor(const GlobalObject& aGlobal,
-                           Blob& aBlob,
-                           const ArchiveReaderOptions& aOptions,
-                           ErrorResult& aError)
-{
-  nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(aGlobal.GetAsSupports());
-  if (!window) {
-    aError.Throw(NS_ERROR_UNEXPECTED);
-    return nullptr;
-  }
-
-  nsAutoCString encoding;
-  if (!EncodingUtils::FindEncodingForLabelNoReplacement(aOptions.mEncoding,
-                                                        encoding)) {
-    aError.ThrowRangeError<MSG_ENCODING_NOT_SUPPORTED>(aOptions.mEncoding);
-    return nullptr;
-  }
-
-  RefPtr<ArchiveReader> reader =
-    new ArchiveReader(aBlob, window, encoding);
-  return reader.forget();
-}
-
-ArchiveReader::ArchiveReader(Blob& aBlob, nsPIDOMWindowInner* aWindow,
-                             const nsACString& aEncoding)
-  : mBlobImpl(aBlob.Impl())
-  , mWindow(aWindow)
-  , mStatus(NOT_STARTED)
-  , mEncoding(aEncoding)
-{
-  MOZ_ASSERT(aWindow);
-}
-
-ArchiveReader::~ArchiveReader()
-{
-}
-
-/* virtual */ JSObject*
-ArchiveReader::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
-  return ArchiveReaderBinding::Wrap(aCx, this, aGivenProto);
-}
-
-nsresult
-ArchiveReader::RegisterRequest(ArchiveRequest* aRequest)
-{
-  switch (mStatus) {
-    // Append to the list and let's start to work:
-    case NOT_STARTED:
-      mRequests.AppendElement(aRequest);
-      return OpenArchive();
-
-    // Just append to the list:
-    case WORKING:
-      mRequests.AppendElement(aRequest);
-      return NS_OK;
-
-    // Return data!
-    case READY:
-      RequestReady(aRequest);
-      return NS_OK;
-  }
-
-  NS_ASSERTION(false, "unexpected mStatus value");
-  return NS_OK;
-}
-
-// This returns the input stream
-nsresult
-ArchiveReader::GetInputStream(nsIInputStream** aInputStream)
-{
-  // Getting the input stream
-  ErrorResult rv;
-  mBlobImpl->GetInternalStream(aInputStream, rv);
-  if (NS_WARN_IF(rv.Failed())) {
-    return rv.StealNSResult();
-  }
-
-  return NS_OK;
-}
-
-nsresult
-ArchiveReader::GetSize(uint64_t* aSize)
-{
-  ErrorResult rv;
-  *aSize = mBlobImpl->GetSize(rv);
-  return rv.StealNSResult();
-}
-
-// Here we open the archive:
-nsresult
-ArchiveReader::OpenArchive()
-{
-  mStatus = WORKING;
-  nsresult rv;
-
-  // Target:
-  nsCOMPtr<nsIEventTarget> target = do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
-  NS_ASSERTION(target, "Must have stream transport service");
-
-  // Here a Event to make everything async:
-  RefPtr<ArchiveReaderEvent> event;
-
-  /* FIXME: If we want to support more than 1 format we should check the content type here: */
-  event = new ArchiveReaderZipEvent(this, mEncoding);
-  rv = target->Dispatch(event, NS_DISPATCH_NORMAL);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  // In order to be sure that this object exists when the event finishes its task,
-  // we increase the refcount here:
-  AddRef();
-
-  return NS_OK;
-}
-
-// Data received from the dispatched event:
-void
-ArchiveReader::Ready(nsTArray<RefPtr<File>>& aFileList,
-                     nsresult aStatus)
-{
-  mStatus = READY;
- 
-  // Let's store the values:
-  mData.fileList = aFileList;
-  mData.status = aStatus;
-
-  // Propagate the results:
-  for (uint32_t index = 0; index < mRequests.Length(); ++index) {
-    RefPtr<ArchiveRequest> request = mRequests[index];
-    RequestReady(request);
-  }
-
-  mRequests.Clear();
-
-  // The async operation is concluded, we can decrease the reference:
-  Release();
-}
-
-void
-ArchiveReader::RequestReady(ArchiveRequest* aRequest)
-{
-  // The request will do the rest:
-  aRequest->ReaderReady(mData.fileList, mData.status);
-}
-
-already_AddRefed<ArchiveRequest>
-ArchiveReader::GetFilenames()
-{
-  RefPtr<ArchiveRequest> request = GenerateArchiveRequest();
-  request->OpGetFilenames();
-
-  return request.forget();
-}
-
-already_AddRefed<ArchiveRequest>
-ArchiveReader::GetFile(const nsAString& filename)
-{
-  RefPtr<ArchiveRequest> request = GenerateArchiveRequest();
-  request->OpGetFile(filename);
-
-  return request.forget();
-}
-
-already_AddRefed<ArchiveRequest>
-ArchiveReader::GetFiles()
-{
-  RefPtr<ArchiveRequest> request = GenerateArchiveRequest();
-  request->OpGetFiles();
-
-  return request.forget();
-}
-
-already_AddRefed<ArchiveRequest>
-ArchiveReader::GenerateArchiveRequest()
-{
-  NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
-  return ArchiveRequest::Create(mWindow, this);
-}
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(ArchiveReader,
-                                      mBlobImpl,
-                                      mWindow,
-                                      mData.fileList,
-                                      mRequests)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ArchiveReader)
-  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
-  NS_INTERFACE_MAP_ENTRY(nsISupports)
-NS_INTERFACE_MAP_END
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(ArchiveReader)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(ArchiveReader)
deleted file mode 100644
--- a/dom/archivereader/ArchiveReader.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_archivereader_domarchivereader_h__
-#define mozilla_dom_archivereader_domarchivereader_h__
-
-#include "nsWrapperCache.h"
-
-#include "ArchiveReaderCommon.h"
-
-#include "nsCOMArray.h"
-#include "nsIChannel.h"
-#include "mozilla/Attributes.h"
-
-namespace mozilla {
-namespace dom {
-struct ArchiveReaderOptions;
-class Blob;
-class BlobImpl;
-class File;
-class GlobalObject;
-} // namespace dom
-} // namespace mozilla
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-class ArchiveRequest;
-
-/**
- * This is the ArchiveReader object
- */
-class ArchiveReader final : public nsISupports,
-                            public nsWrapperCache
-{
-public:
-  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ArchiveReader)
-
-  static already_AddRefed<ArchiveReader>
-  Constructor(const GlobalObject& aGlobal, Blob& aBlob,
-              const ArchiveReaderOptions& aOptions, ErrorResult& aError);
-
-  ArchiveReader(Blob& aBlob, nsPIDOMWindowInner* aWindow,
-                const nsACString& aEncoding);
-
-  nsPIDOMWindowInner* GetParentObject() const
-  {
-    return mWindow;
-  }
-
-  virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
-
-  already_AddRefed<ArchiveRequest> GetFilenames();
-  already_AddRefed<ArchiveRequest> GetFile(const nsAString& filename);
-  already_AddRefed<ArchiveRequest> GetFiles();
-
-  nsresult GetInputStream(nsIInputStream** aInputStream);
-  nsresult GetSize(uint64_t* aSize);
-
-public: // for the ArchiveRequest:
-  nsresult RegisterRequest(ArchiveRequest* aRequest);
-
-public: // For events:
-  BlobImpl* GetBlobImpl() const
-  {
-    return mBlobImpl;
-  }
-
-  void Ready(nsTArray<RefPtr<File>>& aFileList, nsresult aStatus);
-
-private:
-  ~ArchiveReader();
-
-  already_AddRefed<ArchiveRequest> GenerateArchiveRequest();
-
-  nsresult OpenArchive();
-
-  void RequestReady(ArchiveRequest* aRequest);
-
-protected:
-  // The archive blob/file
-  RefPtr<BlobImpl> mBlobImpl;
-
-  // The window is needed by the requests
-  nsCOMPtr<nsPIDOMWindowInner> mWindow;
-
-  // Are we ready to return data?
-  enum {
-    NOT_STARTED = 0,
-    WORKING,
-    READY
-  } mStatus;
-
-  // State of the read:
-  enum {
-    Header, // We are collecting the header: 30bytes
-    Name,   // The name length is contained in the header
-    Data,   // The length of the data segment COULD be written in the header
-    Search  // ... if the data length is unknown (== 0) we wait until we read a new header 
-  } mReadStatus;
-
-  // List of requests to be processed
-  nsTArray<RefPtr<ArchiveRequest> > mRequests;
-
-  // Everything related to the blobs and the status:
-  struct {
-    nsTArray<RefPtr<File>> fileList;
-    nsresult status;
-  } mData;
-
-  nsCString mEncoding;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchivereader_h__
deleted file mode 100644
--- a/dom/archivereader/ArchiveReaderCommon.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_archivereader_archivereader_h
-#define mozilla_dom_archivereader_archivereader_h
-
-#include "mozilla/DOMEventTargetHelper.h"
-#include "nsCOMPtr.h"
-#include "nsCycleCollectionParticipant.h"
-#include "nsDebug.h"
-#include "nsString.h"
-#include "nsTArray.h"
-
-#define BEGIN_ARCHIVEREADER_NAMESPACE \
-  namespace mozilla { namespace dom { namespace archivereader {
-#define END_ARCHIVEREADER_NAMESPACE \
-  } /* namespace archivereader */ } /* namespace dom */ } /* namespace mozilla */
-#define USING_ARCHIVEREADER_NAMESPACE \
-  using namespace mozilla::dom::archivereader;
-
-#endif // mozilla_dom_archivereader_archivereadercommon_h
deleted file mode 100644
--- a/dom/archivereader/ArchiveRequest.cpp
+++ /dev/null
@@ -1,272 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "ArchiveRequest.h"
-
-#include "mozilla/EventDispatcher.h"
-#include "mozilla/dom/ArchiveRequestBinding.h"
-#include "mozilla/dom/ScriptSettings.h"
-#include "nsContentUtils.h"
-
-using namespace mozilla;
-
-USING_ARCHIVEREADER_NAMESPACE
-
-/**
- * Class used to make asynchronous the ArchiveRequest.
- */
-class ArchiveRequestEvent : public Runnable
-{
-public:
-  NS_DECL_NSIRUNNABLE
-
-  explicit ArchiveRequestEvent(ArchiveRequest* aRequest)
-  : mRequest(aRequest)
-  {
-  }
-
-protected:
-  ~ArchiveRequestEvent()
-  {
-  }
-
-private: //data
-  RefPtr<ArchiveRequest> mRequest;
-};
-
-NS_IMETHODIMP
-ArchiveRequestEvent::Run()
-{
-  MOZ_ASSERT(mRequest, "the request is not longer valid");
-  mRequest->Run();
-  return NS_OK;
-}
-
-// ArchiveRequest
-
-ArchiveRequest::ArchiveRequest(nsPIDOMWindowInner* aWindow,
-                               ArchiveReader* aReader)
-: DOMRequest(aWindow),
-  mArchiveReader(aReader)
-{
-  MOZ_ASSERT(aReader);
-
-  /* An event to make this request asynchronous: */
-  RefPtr<ArchiveRequestEvent> event = new ArchiveRequestEvent(this);
-  NS_DispatchToCurrentThread(event);
-}
-
-ArchiveRequest::~ArchiveRequest()
-{
-}
-
-nsresult
-ArchiveRequest::GetEventTargetParent(EventChainPreVisitor& aVisitor)
-{
-  aVisitor.mCanHandle = true;
-  aVisitor.mParentTarget = nullptr;
-  return NS_OK;
-}
-
-/* virtual */ JSObject*
-ArchiveRequest::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
-{
-  return ArchiveRequestBinding::Wrap(aCx, this, aGivenProto);
-}
-
-ArchiveReader*
-ArchiveRequest::Reader() const
-{
-  NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
-
-  return mArchiveReader;
-}
-
-// Here the request is processed:
-void
-ArchiveRequest::Run()
-{
-  // Register this request to the reader.
-  // When the reader is ready to return data, a 'Ready()' will be called
-  nsresult rv = mArchiveReader->RegisterRequest(this);
-  if (NS_FAILED(rv)) {
-    FireError(rv);
-  }
-}
-
-void
-ArchiveRequest::OpGetFilenames()
-{
-  mOperation = GetFilenames;
-}
-
-void
-ArchiveRequest::OpGetFile(const nsAString& aFilename)
-{
-  mOperation = GetFile;
-  mFilename = aFilename;
-}
-
-void
-ArchiveRequest::OpGetFiles()
-{
-  mOperation = GetFiles;
-}
-
-nsresult
-ArchiveRequest::ReaderReady(nsTArray<RefPtr<File>>& aFileList,
-                            nsresult aStatus)
-{
-  if (NS_FAILED(aStatus)) {
-    FireError(aStatus);
-    return NS_OK;
-  }
-
-  nsresult rv;
-
-  AutoJSAPI jsapi;
-  if (NS_WARN_IF(!jsapi.Init(GetOwner()))) {
-    return NS_ERROR_UNEXPECTED;
-  }
-  JSContext* cx = jsapi.cx();
-
-  JS::Rooted<JS::Value> result(cx);
-  switch (mOperation) {
-    case GetFilenames:
-      rv = GetFilenamesResult(cx, result.address(), aFileList);
-      break;
-
-    case GetFile:
-      rv = GetFileResult(cx, &result, aFileList);
-      break;
-
-    case GetFiles:
-      rv = GetFilesResult(cx, &result, aFileList);
-      break;
-
-    default:
-      rv = NS_ERROR_UNEXPECTED;
-      break;
-  }
-
-  if (NS_FAILED(rv)) {
-    NS_WARNING("Get*Result failed!");
-  }
-
-  if (NS_SUCCEEDED(rv)) {
-    FireSuccess(result);
-  }
-  else {
-    FireError(rv);
-  }
-
-  return NS_OK;
-}
-
-nsresult
-ArchiveRequest::GetFilenamesResult(JSContext* aCx,
-                                   JS::Value* aValue,
-                                   nsTArray<RefPtr<File>>& aFileList)
-{
-  JS::Rooted<JSObject*> array(aCx, JS_NewArrayObject(aCx, aFileList.Length()));
-
-  if (!array) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  JS::Rooted<JSString*> str(aCx);
-  for (uint32_t i = 0; i < aFileList.Length(); ++i) {
-    RefPtr<File> file = aFileList[i];
-
-    nsString filename;
-    file->GetName(filename);
-
-    str = JS_NewUCStringCopyZ(aCx, filename.get());
-    NS_ENSURE_TRUE(str, NS_ERROR_OUT_OF_MEMORY);
-
-    if (!JS_DefineElement(aCx, array, i, str, JSPROP_ENUMERATE)) {
-      return NS_ERROR_FAILURE;
-    }
-  }
-
-  if (!JS_FreezeObject(aCx, array)) {
-    return NS_ERROR_FAILURE;
-  }
-
-  aValue->setObject(*array);
-  return NS_OK;
-}
-
-nsresult
-ArchiveRequest::GetFileResult(JSContext* aCx,
-                              JS::MutableHandle<JS::Value> aValue,
-                              nsTArray<RefPtr<File>>& aFileList)
-{
-  for (uint32_t i = 0; i < aFileList.Length(); ++i) {
-    RefPtr<File> file = aFileList[i];
-
-    nsString filename;
-    file->GetName(filename);
-
-    if (filename == mFilename) {
-      if (!ToJSValue(aCx, file, aValue)) {
-        return NS_ERROR_FAILURE;
-      }
-
-      return NS_OK;
-    }
-  }
-
-  return NS_ERROR_FAILURE;
-}
-
-nsresult
-ArchiveRequest::GetFilesResult(JSContext* aCx,
-                               JS::MutableHandle<JS::Value> aValue,
-                               nsTArray<RefPtr<File>>& aFileList)
-{
-  JS::Rooted<JSObject*> array(aCx, JS_NewArrayObject(aCx, aFileList.Length()));
-  if (!array) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  for (uint32_t i = 0; i < aFileList.Length(); ++i) {
-    RefPtr<File> file = aFileList[i];
-
-    JS::Rooted<JS::Value> value(aCx);
-    if (!ToJSValue(aCx, file, &value)) {
-      return NS_ERROR_FAILURE;
-    }
-
-    if (!JS_DefineElement(aCx, array, i, value, JSPROP_ENUMERATE)) {
-      return NS_ERROR_FAILURE;
-    }
-  }
-
-  aValue.setObject(*array);
-  return NS_OK;
-}
-
-// static
-already_AddRefed<ArchiveRequest>
-ArchiveRequest::Create(nsPIDOMWindowInner* aOwner,
-                       ArchiveReader* aReader)
-{
-  NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
-
-  RefPtr<ArchiveRequest> request = new ArchiveRequest(aOwner, aReader);
-
-  return request.forget();
-}
-
-NS_IMPL_CYCLE_COLLECTION_INHERITED(ArchiveRequest, DOMRequest,
-                                   mArchiveReader)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(ArchiveRequest)
-NS_INTERFACE_MAP_END_INHERITING(DOMRequest)
-
-NS_IMPL_ADDREF_INHERITED(ArchiveRequest, DOMRequest)
-NS_IMPL_RELEASE_INHERITED(ArchiveRequest, DOMRequest)
deleted file mode 100644
--- a/dom/archivereader/ArchiveRequest.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_archivereader_domarchiverequest_h__
-#define mozilla_dom_archivereader_domarchiverequest_h__
-
-#include "mozilla/Attributes.h"
-#include "ArchiveReader.h"
-#include "DOMRequest.h"
-
-#include "ArchiveReaderCommon.h"
-
-namespace mozilla {
-class EventChainPreVisitor;
-} // namespace mozilla
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-/**
- * This is the ArchiveRequest that handles any operation
- * related to ArchiveReader
- */
-class ArchiveRequest : public mozilla::dom::DOMRequest
-{
-public:
-  virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
-
-  ArchiveReader* Reader() const;
-
-  NS_DECL_ISUPPORTS_INHERITED
-
-  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ArchiveRequest, DOMRequest)
-
-  ArchiveRequest(nsPIDOMWindowInner* aWindow,
-                 ArchiveReader* aReader);
-
-  // nsIDOMEventTarget
-  virtual nsresult GetEventTargetParent(
-                     EventChainPreVisitor& aVisitor) override;
-
-public:
-  // This is called by the DOMArchiveRequestEvent
-  void Run();
-
-  // Set the types for this request
-  void OpGetFilenames();
-  void OpGetFile(const nsAString& aFilename);
-  void OpGetFiles();
-
-  nsresult ReaderReady(nsTArray<RefPtr<File>>& aFileList, nsresult aStatus);
-
-public: // static
-  static already_AddRefed<ArchiveRequest> Create(nsPIDOMWindowInner* aOwner,
-                                                 ArchiveReader* aReader);
-
-private:
-  ~ArchiveRequest();
-
-  nsresult GetFilenamesResult(JSContext* aCx,
-                              JS::Value* aValue,
-                              nsTArray<RefPtr<File>>& aFileList);
-  nsresult GetFileResult(JSContext* aCx,
-                         JS::MutableHandle<JS::Value> aValue,
-                         nsTArray<RefPtr<File>>& aFileList);
-  nsresult GetFilesResult(JSContext* aCx,
-                          JS::MutableHandle<JS::Value> aValue,
-                          nsTArray<RefPtr<File>>& aFileList);
-
-protected:
-  // The reader:
-  RefPtr<ArchiveReader> mArchiveReader;
-
-  // The operation:
-  enum {
-    GetFilenames,
-    GetFile,
-    GetFiles
-  } mOperation;
-
-  // The filename (needed by GetFile):
-  nsString mFilename;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchiverequest_h__
deleted file mode 100644
--- a/dom/archivereader/ArchiveZipEvent.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "ArchiveZipEvent.h"
-#include "ArchiveZipFile.h"
-
-#include "nsContentUtils.h"
-#include "nsCExternalHandlerService.h"
-
-#include "mozilla/UniquePtr.h"
-#include "nsIInputStream.h"
-
-using namespace mozilla;
-using namespace mozilla::dom;
-
-USING_ARCHIVEREADER_NAMESPACE
-
-#ifndef PATH_MAX
-#  define PATH_MAX 65536 // The filename length is stored in 2 bytes
-#endif
-
-ArchiveZipItem::ArchiveZipItem(const char* aFilename,
-                               const ZipCentral& aCentralStruct,
-                               const nsACString& aEncoding)
-: mFilename(aFilename),
-  mCentralStruct(aCentralStruct),
-  mEncoding(aEncoding)
-{
-}
-
-ArchiveZipItem::~ArchiveZipItem()
-{
-}
-
-nsresult
-ArchiveZipItem::ConvertFilename()
-{
-  if (mEncoding.IsEmpty()) {
-    return NS_ERROR_FAILURE;
-  }
-
-  nsString filenameU;
-  nsresult rv = nsContentUtils::ConvertStringFromEncoding(
-                  mEncoding,
-                  mFilename, filenameU);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  if (filenameU.IsEmpty()) {
-    return NS_ERROR_FAILURE;
-  }
-
-  mFilenameU = filenameU;
-  return NS_OK;
-}
-
-nsresult
-ArchiveZipItem::GetFilename(nsString& aFilename)
-{
-  if (mFilenameU.IsEmpty()) {
-    // Maybe this string is UTF-8:
-    if (IsUTF8(mFilename, false)) {
-      mFilenameU = NS_ConvertUTF8toUTF16(mFilename);
-    }
-
-    // Let's use the enconding value for the dictionary
-    else {
-      nsresult rv = ConvertFilename();
-      NS_ENSURE_SUCCESS(rv, rv);
-    }
-  }
-
-  aFilename = mFilenameU;
-  return NS_OK;
-}
-
-// From zipItem to File:
-already_AddRefed<File>
-ArchiveZipItem::GetFile(ArchiveReader* aArchiveReader)
-{
-  nsString filename;
-
-  if (NS_FAILED(GetFilename(filename))) {
-    return nullptr;
-  }
-
-  RefPtr<dom::File> file = dom::File::Create(aArchiveReader,
-    new ArchiveZipBlobImpl(filename,
-                           NS_ConvertUTF8toUTF16(GetType()),
-                           StrToInt32(mCentralStruct.orglen),
-                           mCentralStruct, aArchiveReader->GetBlobImpl()));
-  MOZ_ASSERT(file);
-  return file.forget();
-}
-
-uint32_t
-ArchiveZipItem::StrToInt32(const uint8_t* aStr)
-{
-  return (uint32_t)( (aStr [0] <<  0) |
-                     (aStr [1] <<  8) |
-                     (aStr [2] << 16) |
-                     (aStr [3] << 24) );
-}
-
-uint16_t
-ArchiveZipItem::StrToInt16(const uint8_t* aStr)
-{
-  return (uint16_t) ((aStr [0]) | (aStr [1] << 8));
-}
-
-// ArchiveReaderZipEvent
-
-ArchiveReaderZipEvent::ArchiveReaderZipEvent(ArchiveReader* aArchiveReader,
-                                             const nsACString& aEncoding)
-: ArchiveReaderEvent(aArchiveReader),
-  mEncoding(aEncoding)
-{
-}
-
-// NOTE: this runs in a different thread!!
-nsresult
-ArchiveReaderZipEvent::Exec()
-{
-  uint32_t centralOffset(0);
-  nsresult rv;
-
-  nsCOMPtr<nsIInputStream> inputStream;
-  rv = mArchiveReader->GetInputStream(getter_AddRefs(inputStream));
-  if (NS_FAILED(rv) || !inputStream) {
-    return RunShare(NS_ERROR_UNEXPECTED);
-  }
-
-  // From the input stream to a seekable stream
-  nsCOMPtr<nsISeekableStream> seekableStream;
-  seekableStream = do_QueryInterface(inputStream);
-  if (!seekableStream) {
-    return RunShare(NS_ERROR_UNEXPECTED);
-  }
-
-  uint64_t size;
-  rv = mArchiveReader->GetSize(&size);
-  if (NS_FAILED(rv)) {
-    return RunShare(NS_ERROR_UNEXPECTED);
-  }
-
-  // Reading backward.. looking for the ZipEnd signature
-  for (uint64_t curr = size - ZIPEND_SIZE; curr > 4; --curr) {
-    seekableStream->Seek(nsISeekableStream::NS_SEEK_SET, curr);
-
-    uint8_t buffer[ZIPEND_SIZE];
-    uint32_t ret;
-
-    rv = inputStream->Read((char*)buffer, sizeof(buffer), &ret);
-    if (NS_FAILED(rv) || ret != sizeof(buffer)) {
-      return RunShare(NS_ERROR_UNEXPECTED);
-    }
-
-    // Here we are:
-    if (ArchiveZipItem::StrToInt32(buffer) == ENDSIG) {
-      centralOffset = ArchiveZipItem::StrToInt32(((ZipEnd*)buffer)->offset_central_dir);
-      break;
-    }
-  }
-
-  // No central Offset
-  if (!centralOffset || centralOffset >= size - ZIPEND_SIZE) {
-    return RunShare(NS_ERROR_FAILURE);
-  }
-
-  // Seek to the first central directory:
-  seekableStream->Seek(nsISeekableStream::NS_SEEK_SET, centralOffset);
-
-  // For each central directory:
-  while (centralOffset <= size - ZIPCENTRAL_SIZE) {
-    ZipCentral centralStruct;
-    uint32_t ret;
-    
-    rv = inputStream->Read((char*)&centralStruct, ZIPCENTRAL_SIZE, &ret);
-    if (NS_FAILED(rv) || ret != ZIPCENTRAL_SIZE) {
-      return RunShare(NS_ERROR_UNEXPECTED);
-    }
-
-    uint16_t filenameLen = ArchiveZipItem::StrToInt16(centralStruct.filename_len);
-    uint16_t extraLen = ArchiveZipItem::StrToInt16(centralStruct.extrafield_len);
-    uint16_t commentLen = ArchiveZipItem::StrToInt16(centralStruct.commentfield_len);
-
-    // Point to the next item at the top of loop
-    centralOffset += ZIPCENTRAL_SIZE + filenameLen + extraLen + commentLen;
-    if (filenameLen == 0 || filenameLen >= PATH_MAX || centralOffset >= size) {
-      return RunShare(NS_ERROR_FILE_CORRUPTED);
-    }
-
-    // Read the name:
-    auto filename = MakeUnique<char[]>(filenameLen + 1);
-    rv = inputStream->Read(filename.get(), filenameLen, &ret);
-    if (NS_FAILED(rv) || ret != filenameLen) {
-      return RunShare(NS_ERROR_UNEXPECTED);
-    }
-
-    filename[filenameLen] = 0;
-
-    // We ignore the directories:
-    if (filename[filenameLen - 1] != '/') {
-      mFileList.AppendElement(new ArchiveZipItem(filename.get(), centralStruct,
-                                                 mEncoding));
-    }
-
-    // Ignore the rest
-    seekableStream->Seek(nsISeekableStream::NS_SEEK_CUR, extraLen + commentLen);
-  }
-
-  return RunShare(NS_OK);
-}
deleted file mode 100644
--- a/dom/archivereader/ArchiveZipEvent.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_archivereader_domarchivezipevent_h__
-#define mozilla_dom_archivereader_domarchivezipevent_h__
-
-#include "mozilla/Attributes.h"
-#include "ArchiveEvent.h"
-
-#include "ArchiveReaderCommon.h"
-#include "zipstruct.h"
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-/**
- * ArchiveZipItem - ArchiveItem for ArchiveReaderZipEvent
- */
-class ArchiveZipItem : public ArchiveItem
-{
-public:
-  ArchiveZipItem(const char* aFilename,
-                 const ZipCentral& aCentralStruct,
-                 const nsACString& aEncoding);
-protected:
-  virtual ~ArchiveZipItem();
-
-public:
-  nsresult GetFilename(nsString& aFilename) override;
-
-  // From zipItem to File:
-  virtual already_AddRefed<File>
-  GetFile(ArchiveReader* aArchiveReader) override;
-
-public: // for the event
-  static uint32_t StrToInt32(const uint8_t* aStr);
-  static uint16_t StrToInt16(const uint8_t* aStr);
-
-private:
-  nsresult ConvertFilename();
-
-private: // data
-  nsCString mFilename;
-
-  nsString mFilenameU;
-  ZipCentral mCentralStruct;
-
-  nsCString mEncoding;
-};
-
-/**
- * ArchiveReaderEvent implements the ArchiveReaderEvent for the ZIP format
- */
-class ArchiveReaderZipEvent : public ArchiveReaderEvent
-{
-public:
-  ArchiveReaderZipEvent(ArchiveReader* aArchiveReader,
-                        const nsACString& aEncoding);
-
-  nsresult Exec() override;
-
-private:
-  nsCString mEncoding;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchivezipevent_h__
deleted file mode 100644
--- a/dom/archivereader/ArchiveZipFile.cpp
+++ /dev/null
@@ -1,399 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "ArchiveZipFile.h"
-#include "ArchiveZipEvent.h"
-
-#include "nsIInputStream.h"
-#include "zlib.h"
-#include "mozilla/Attributes.h"
-#include "mozilla/dom/File.h"
-
-using namespace mozilla::dom;
-USING_ARCHIVEREADER_NAMESPACE
-
-#define ZIP_CHUNK 16384
-
-/**
- * Input stream object for zip files
- */
-class ArchiveInputStream final : public nsIInputStream,
-                                 public nsISeekableStream
-{
-public:
-  ArchiveInputStream(uint64_t aParentSize,
-                     nsIInputStream* aInputStream,
-                     nsString& aFilename,
-                     uint32_t aStart,
-                     uint32_t aLength,
-                     ZipCentral& aCentral)
-  : mCentral(aCentral),
-    mFilename(aFilename),
-    mStart(aStart),
-    mLength(aLength),
-    mStatus(NotStarted)
-  {
-    // Reset the data:
-    memset(&mData, 0, sizeof(mData));
-
-    mData.parentSize = aParentSize;
-    mData.inputStream = aInputStream;
-  }
-
-  NS_DECL_THREADSAFE_ISUPPORTS
-  NS_DECL_NSIINPUTSTREAM
-  NS_DECL_NSISEEKABLESTREAM
-
-private:
-  virtual ~ArchiveInputStream()
-  {
-    Close();
-  }
-
-  nsresult Init();
-
-private: // data
-  ZipCentral mCentral;
-  nsString mFilename;
-  uint32_t mStart;
-  uint32_t mLength;
-
-  z_stream mZs;
-
-  enum {
-    NotStarted,
-    Started,
-    Done
-  } mStatus;
-
-  struct {
-    uint64_t parentSize;
-    nsCOMPtr<nsIInputStream> inputStream;
-
-    unsigned char input[ZIP_CHUNK];
-    uint32_t sizeToBeRead;
-    uint32_t cursor;
-
-    bool compressed; // a zip file can contain stored or compressed files
-  } mData;
-};
-
-NS_IMPL_ISUPPORTS(ArchiveInputStream,
-                  nsIInputStream,
-                  nsISeekableStream)
-
-nsresult
-ArchiveInputStream::Init()
-{
-  nsresult rv;
-
-  memset(&mZs, 0, sizeof(z_stream));
-  int zerr = inflateInit2(&mZs, -MAX_WBITS);
-  if (zerr != Z_OK) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  mData.sizeToBeRead = ArchiveZipItem::StrToInt32(mCentral.size);
-
-  uint32_t offset = ArchiveZipItem::StrToInt32(mCentral.localhdr_offset);
-
-  // The file is corrupt
-  if (mData.parentSize < ZIPLOCAL_SIZE ||
-      offset > mData.parentSize - ZIPLOCAL_SIZE) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  // From the input stream to a seekable stream
-  nsCOMPtr<nsISeekableStream> seekableStream;
-  seekableStream = do_QueryInterface(mData.inputStream);
-  if (!seekableStream) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  // Seek + read the ZipLocal struct
-  seekableStream->Seek(nsISeekableStream::NS_SEEK_SET, offset);
-  uint8_t buffer[ZIPLOCAL_SIZE];
-  uint32_t ret;
-
-  rv = mData.inputStream->Read((char*)buffer, ZIPLOCAL_SIZE, &ret);
-  if (NS_FAILED(rv) || ret != ZIPLOCAL_SIZE) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  // Signature check:
-  if (ArchiveZipItem::StrToInt32(buffer) != LOCALSIG) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  ZipLocal local;
-  memcpy(&local, buffer, ZIPLOCAL_SIZE);
-
-  // Seek to the real data:
-  offset += ZIPLOCAL_SIZE +
-            ArchiveZipItem::StrToInt16(local.filename_len) +
-            ArchiveZipItem::StrToInt16(local.extrafield_len);
-
-  // The file is corrupt if there is not enough data
-  if (mData.parentSize < mData.sizeToBeRead ||
-      offset > mData.parentSize - mData.sizeToBeRead) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  // Data starts here:
-  seekableStream->Seek(nsISeekableStream::NS_SEEK_SET, offset);
-
-  // The file is compressed or not?
-  mData.compressed = (ArchiveZipItem::StrToInt16(mCentral.method) != 0);
-
-  // We have to skip the first mStart bytes:
-  if (mStart != 0) {
-    rv = Seek(NS_SEEK_SET, mStart);
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Close()
-{
-  if (mStatus != NotStarted) {
-    inflateEnd(&mZs);
-    mStatus = NotStarted;
-  }
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Available(uint64_t* _retval)
-{
-  *_retval = mLength - mData.cursor - mStart;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Read(char* aBuffer,
-                         uint32_t aCount,
-                         uint32_t* _retval)
-{
-  NS_ENSURE_ARG_POINTER(aBuffer);
-  NS_ENSURE_ARG_POINTER(_retval);
-
-  nsresult rv;
-
-  // This is the first time:
-  if (mStatus == NotStarted) {
-    mStatus = Started;
-
-    rv = Init();
-    if (NS_FAILED(rv)) {
-      return rv;
-    }
-
-    // Let's set avail_out to -1 so we read something from the stream.
-    mZs.avail_out = (uInt)-1;
-  }
-
-  // Nothing more can be read
-  if (mStatus == Done) {
-    *_retval = 0;
-    return NS_OK;
-  }
-
-  // Stored file:
-  if (!mData.compressed) {
-    rv = mData.inputStream->Read(aBuffer,
-                                 (mData.sizeToBeRead > aCount ?
-                                    aCount : mData.sizeToBeRead),
-                                 _retval);
-    if (NS_SUCCEEDED(rv)) {
-      mData.sizeToBeRead -= *_retval;
-      mData.cursor += *_retval;
-
-      if (mData.sizeToBeRead == 0) {
-        mStatus = Done;
-      }
-    }
-
-    return rv;
-  }
-
-  // We have nothing ready to be processed:
-  if (mZs.avail_out != 0 && mData.sizeToBeRead != 0) {
-    uint32_t ret;
-    rv = mData.inputStream->Read((char*)mData.input,
-                                 (mData.sizeToBeRead > sizeof(mData.input) ?
-                                      sizeof(mData.input) : mData.sizeToBeRead),
-                                 &ret);
-    if (NS_FAILED(rv)) {
-      return rv;
-    }
-
-    // Terminator:
-    if (ret == 0) {
-      *_retval = 0;
-      return NS_OK;
-    }
-
-    mData.sizeToBeRead -= ret;
-    mZs.avail_in = ret;
-    mZs.next_in = mData.input;
-  }
-
-  mZs.avail_out = aCount;
-  mZs.next_out = (unsigned char*)aBuffer;
-
-  int ret = inflate(&mZs, mData.sizeToBeRead ? Z_NO_FLUSH : Z_FINISH);
-  if (ret != Z_BUF_ERROR && ret != Z_OK && ret != Z_STREAM_END) {
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  if (ret == Z_STREAM_END) {
-    mStatus = Done;
-  }
-
-  *_retval = aCount - mZs.avail_out;
-  mData.cursor += *_retval;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::ReadSegments(nsWriteSegmentFun aWriter,
-                                 void* aClosure,
-                                 uint32_t aCount,
-                                 uint32_t* _retval)
-{
-  // don't have a buffer to read from, so this better not be called!
-  NS_NOTREACHED("Consumers should be using Read()!");
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::IsNonBlocking(bool* _retval)
-{
-  // We are blocking
-  *_retval = false;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Seek(int32_t aWhence, int64_t aOffset)
-{
-  int64_t pos = aOffset;
-
-  switch (aWhence) {
-  case NS_SEEK_SET:
-    break;
-
-  case NS_SEEK_CUR:
-    pos += mData.cursor;
-    break;
-
-  case NS_SEEK_END:
-    pos += mLength;
-    break;
-
-  default:
-    NS_NOTREACHED("unexpected whence value");
-    return NS_ERROR_UNEXPECTED;
-  }
-
-  if (pos == int64_t(mData.cursor)) {
-    return NS_OK;
-  }
-
-  if (pos < 0 || pos >= mLength) {
-    return NS_ERROR_FAILURE;
-  }
-
-  // We have to terminate the previous operation:
-  nsresult rv;
-  if (mStatus != NotStarted) {
-    rv = Close();
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  // Reset the cursor:
-  mData.cursor = 0;
-
-  // Note: This code is heavy but inflate does not have any seek() support:
-  uint32_t ret;
-  char buffer[1024];
-  while (pos > 0) {
-    rv = Read(buffer, pos > int64_t(sizeof(buffer)) ? sizeof(buffer) : pos, &ret);
-    if (NS_FAILED(rv)) {
-      return rv;
-    }
-
-    if (ret == 0) {
-      return NS_ERROR_UNEXPECTED;
-    }
-
-    pos -= ret;
-  }
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::Tell(int64_t *aResult)
-{
-  *aResult = mData.cursor;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-ArchiveInputStream::SetEOF()
-{
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-// ArchiveZipBlobImpl
-
-void
-ArchiveZipBlobImpl::GetInternalStream(nsIInputStream** aStream,
-                                      ErrorResult& aRv)
-{
-  if (mLength > INT32_MAX) {
-    aRv.Throw(NS_ERROR_FAILURE);
-    return;
-  }
-
-  uint64_t size = mBlobImpl->GetSize(aRv);
-  if (NS_WARN_IF(aRv.Failed())) {
-    return;
-  }
-
-  nsCOMPtr<nsIInputStream> inputStream;
-  mBlobImpl->GetInternalStream(getter_AddRefs(inputStream), aRv);
-  if (NS_WARN_IF(aRv.Failed())) {
-    return;
-  }
-
-  RefPtr<ArchiveInputStream> stream = new ArchiveInputStream(size,
-                                                               inputStream,
-                                                               mFilename,
-                                                               mStart,
-                                                               mLength,
-                                                               mCentral);
-
-  stream.forget(aStream);
-}
-
-already_AddRefed<mozilla::dom::BlobImpl>
-ArchiveZipBlobImpl::CreateSlice(uint64_t aStart,
-                                uint64_t aLength,
-                                const nsAString& aContentType,
-                                mozilla::ErrorResult& aRv)
-{
-  RefPtr<BlobImpl> impl =
-    new ArchiveZipBlobImpl(mFilename, mContentType, aStart, mLength, mCentral,
-                           mBlobImpl);
-  return impl.forget();
-}
-
-NS_IMPL_ISUPPORTS_INHERITED0(ArchiveZipBlobImpl, BlobImpl)
deleted file mode 100644
--- a/dom/archivereader/ArchiveZipFile.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_archivereader_domarchivefile_h__
-#define mozilla_dom_archivereader_domarchivefile_h__
-
-#include "mozilla/Attributes.h"
-#include "mozilla/ErrorResult.h"
-#include "mozilla/dom/BaseBlobImpl.h"
-
-#include "ArchiveReader.h"
-
-#include "ArchiveReaderCommon.h"
-#include "zipstruct.h"
-
-BEGIN_ARCHIVEREADER_NAMESPACE
-
-/**
- * ArchiveZipBlobImpl to BlobImpl
- */
-class ArchiveZipBlobImpl : public BaseBlobImpl
-{
-public:
-  NS_DECL_ISUPPORTS_INHERITED
-
-  ArchiveZipBlobImpl(const nsAString& aName,
-                     const nsAString& aContentType,
-                     uint64_t aLength,
-                     ZipCentral& aCentral,
-                     BlobImpl* aBlobImpl)
-  : BaseBlobImpl(aName, aContentType, aLength),
-    mCentral(aCentral),
-    mBlobImpl(aBlobImpl),
-    mFilename(aName)
-  {
-    MOZ_ASSERT(mBlobImpl);
-  }
-
-  ArchiveZipBlobImpl(const nsAString& aName,
-                     const nsAString& aContentType,
-                     uint64_t aStart,
-                     uint64_t aLength,
-                     ZipCentral& aCentral,
-                     BlobImpl* aBlobImpl)
-  : BaseBlobImpl(aContentType, aStart, aLength),
-    mCentral(aCentral),
-    mBlobImpl(aBlobImpl),
-    mFilename(aName)
-  {
-    MOZ_ASSERT(mBlobImpl);
-  }
-
-  // Overrides:
-  virtual void GetInternalStream(nsIInputStream** aInputStream,
-                                 ErrorResult& aRv) override;
-
-protected:
-  virtual ~ArchiveZipBlobImpl()
-  {
-  }
-
-  virtual already_AddRefed<BlobImpl>
-  CreateSlice(uint64_t aStart, uint64_t aLength, const nsAString& aContentType,
-              mozilla::ErrorResult& aRv) override;
-
-private: // Data
-  ZipCentral mCentral;
-  RefPtr<BlobImpl> mBlobImpl;
-
-  nsString mFilename;
-};
-
-END_ARCHIVEREADER_NAMESPACE
-
-#endif // mozilla_dom_archivereader_domarchivefile_h__
deleted file mode 100644
--- a/dom/archivereader/moz.build
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-with Files("**"):
-    BUG_COMPONENT = ("Core", "DOM")
-
-EXPORTS.mozilla.dom.archivereader += [
-    'ArchiveEvent.h',
-    'ArchiveReader.h',
-    'ArchiveReaderCommon.h',
-    'ArchiveRequest.h',
-    'ArchiveZipEvent.h',
-    'ArchiveZipFile.h',
-]
-
-UNIFIED_SOURCES += [
-    'ArchiveEvent.cpp',
-    'ArchiveReader.cpp',
-    'ArchiveRequest.cpp',
-    'ArchiveZipEvent.cpp',
-    'ArchiveZipFile.cpp',
-]
-
-LOCAL_INCLUDES += [
-    '../base',
-]
-
-FINAL_LIBRARY = 'xul'
-
-MOCHITEST_MANIFESTS += ['test/mochitest.ini']
deleted file mode 100644
--- a/dom/archivereader/test/helpers.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-function runTest()
-{
-  SimpleTest.waitForExplicitFinish();
-
-  SpecialPowers.pushPrefEnv({'set': [ ["dom.archivereader.enabled", true] ]}, function() {
-    SpecialPowers.createFiles(filesToCreate(),
-                              function (files) {
-                                testSteps(files);
-                              },
-                              function (msg) {
-                                ok(false, "File creation error: " + msg);
-                                finishTest();
-                              });
-  });
-}
-
-function finishTest()
-{
-  SpecialPowers.popPrefEnv(function() {
-    SimpleTest.finish();
-  });
-}
deleted file mode 100644
--- a/dom/archivereader/test/mochitest.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-[DEFAULT]
-support-files =
-  helpers.js
-
-[test_basic.html]
-[test_nonUnicode.html]
-[test_zip_in_zip.html]
deleted file mode 100644
--- a/dom/archivereader/test/test_basic.html
+++ /dev/null
@@ -1,226 +0,0 @@
-<!--
-  Any copyright is dedicated to the Public Domain.
-  http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-  <title>Archive Reader Test</title>
-
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-
-  <script type="text/javascript">
-  function filesToCreate() {
-    var binaryString = '504B03040A00000000002E6BF14000000000000000000000000005001C00746573742F555409000337CA055039CA055075780B' +
-                       '000104E803000004E8030000504B03041400000008002D6BF1401780E15015000000580200000A001C00746573742F612E7478' +
-                       '74555409000336CA05503ACA055075780B000104E803000004E8030000CB48CDC9C95728CF2FCA49E1CA18658FB2A9C4060050' +
-                       '4B03040A00000000002F88EC40662E847010000000100000000A001C00746573742F622E74787455540900035A65FF4F42C505' +
-                       '5075780B000104E803000004E803000068656C6C6F20776F726C642C2032210A504B01021E030A00000000002E6BF140000000' +
-                       '000000000000000000050018000000000000001000FD4100000000746573742F555405000337CA055075780B000104E8030000' +
-                       '04E8030000504B01021E031400000008002D6BF1401780E15015000000580200000A0018000000000001000000B4813F000000' +
-                       '746573742F612E747874555405000336CA055075780B000104E803000004E8030000504B01021E030A00000000002F88EC4066' +
-                       '2E847010000000100000000A0018000000000001000000B48198000000746573742F622E74787455540500035A65FF4F75780B' +
-                       '000104E803000004E8030000504B05060000000003000300EB000000EC0000000000';
-
-    var binaryData = "";
-    for (var i = 0, len = binaryString.length / 2; i < len; ++i) {
-      var hex = binaryString[i * 2] + binaryString[i * 2 + 1];
-      binaryData += String.fromCharCode(parseInt(hex,16));
-    }
-
-    return [ {name: "fileArchiveReader.zip", data: binaryData},
-             {name: "fileArchiveReader.txt", data: "Hello World"}];
-  }
-
-  handleFinished = 0;
-  function markTestDone() {
-    ++handleFinished;
-    if (isFinished()) {
-      finishTest();
-    }
-  }
-  function isFinished() {
-    return handleFinished == 6;
-  }
-
-  function testSteps(files)
-  {
-    var binaryFile = files[0];
-    var textFile = files[1];
-
-    var status;
-
-    // Create - wrong 1
-    try {
-      var r = new ArchiveReader();
-      status = false;
-    }
-    catch(e) {
-      status = true;
-    }
-    ok(status, "ArchiveReader() without args MUST fail");
-
-    // Create - wrong 2
-    try {
-      var r = new ArchiveReader(true);
-      status = false;
-    }
-    catch(e) {
-      status = true;
-    }
-    ok(status, "ArchiveReader() without a blob arg MUST fail");
-
-    // Create - wrong 3
-    try {
-      var r = new ArchiveReader("hello world");
-      status = false;
-    }
-    catch(e) {
-      status = true;
-    }
-    ok(status, "ArchiveReader() without a blob arg MUST fail");
-
-    // Create - good! (but with a text file)
-    var rt = new ArchiveReader(textFile);
-    isnot(rt, null, "ArchiveReader cannot be null");
-
-    // GetFilename
-    var handle = rt.getFilenames();
-    isnot(handle, null, "ArchiveReader.getFilenames() cannot be null");
-    handle.onsuccess = function() {
-      ok(false, "ArchiveReader.getFilenames() should return a 'failure' if the input file is not a zip");
-      markTestDone();
-    }
-    handle.onerror = function() {
-      ok(true, "ArchiveReader.getFilenames() should return a 'error' if the input file is a zip file");
-      is(this.reader, rt, "ArchiveRequest.reader == ArchiveReader");
-      markTestDone();
-    }
-
-    // Create - good!
-    var r = new ArchiveReader(binaryFile);
-    isnot(r, null, "ArchiveReader cannot be null");
-
-    // GetFilename
-    handle = r.getFilenames();
-    isnot(handle, null, "ArchiveReader.getFilenames() cannot be null");
-    handle.onsuccess = function() {
-      ok(true, "ArchiveReader.getFilenames() should return a 'success'");
-      is(this.result instanceof Array, true, "ArchiveReader.getFilenames() should return an array");
-      is(this.result.length, 2, "ArchiveReader.getFilenames(): the array contains 2 items");
-      is(this.result[0], "test/a.txt", "ArchiveReader.getFilenames(): first file is 'test/a.txt'");
-      is(this.result[1], "test/b.txt", "ArchiveReader.getFilenames(): second file is 'test/b.txt'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      markTestDone();
-    }
-    handle.onerror = function() {
-      ok(false, "ArchiveReader.getFilenames() should not return any 'error'");
-      markTestDone();
-    }
-
-    // GetFile - wrong (no args)
-    try {
-      r.getFile();
-      status = false;
-    }
-    catch(e) {
-      status = true;
-    }
-    ok(status, "ArchiveReader.getFile() without args fail");
-
-    var handle2 = r.getFile("hello world");
-    isnot(handle2, null, "ArchiveReader.getFile() cannot be null");
-    handle2.onsuccess = function() {
-      ok(false, "ArchiveReader.getFile('unknown file') should not return a 'success'");
-      markTestDone();
-    }
-    handle2.onerror = function() {
-      ok(true, "ArchiveReader.getFile('unknown file') should return an 'error'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      markTestDone();
-    }
-
-    var handle3 = r.getFile("test/b.txt");
-    isnot(handle3, null, "ArchiveReader.getFile() cannot be null");
-    handle3.onsuccess = function() {
-      ok(true, "ArchiveReader.getFile('test/b.txt') should return a 'success'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      is(this.result.name, "test/b.txt", "ArchiveReader.getFile('test/b.txt') the name MUST be 'test/b.txt'");
-      is(this.result.type, "text/plain", "ArchiveReader.getFile('test/b.txt') the type MUST be 'text/plain'");
-
-      var fr = new FileReader();
-      fr.readAsText(this.result);
-      fr.onerror = function() {
-        ok(false, "ArchiveReader + FileReader should work!");
-        markTestDone();
-      }
-      fr.onload = function(event) {
-        is(event.target.result, "hello world, 2!\n", "ArchiveReader + FileReader are working together.");
-        markTestDone();
-      }
-    }
-
-    handle3.onerror = function() {
-      ok(false, "ArchiveReader.getFile('test/b.txt') should not return an 'error'");
-      markTestDone();
-    }
-
-    var handle4 = r.getFile("test/a.txt");
-    isnot(handle4, null, "ArchiveReader.getFile() cannot be null");
-    handle4.onsuccess = function() {
-      ok(true, "ArchiveReader.getFile('test/a.txt') should return a 'success'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      is(this.result.name, "test/a.txt", "ArchiveReader.getFile('test/a.txt') the name MUST be 'test/a.txt'");
-      is(this.result.type, "text/plain", "ArchiveReader.getFile('test/a.txt') the type MUST be 'text/plain'");
-
-      var fr = new FileReader();
-      fr.readAsText(this.result);
-      fr.onerror = function() {
-        ok(false, "ArchiveReader + FileReader should work!");
-        markTestDone();
-      }
-      fr.onload = function(event) {
-        is(event.target.result.length, 600, "ArchiveReader + FileReader are working with a compress data");
-        var p = event.target.result.trim().split('\n');
-        is(p.length, 50, "ArchiveReader + FileReader are working with a compress data");
-
-        for (var i = 0; i < p.length; ++i)
-          is(p[i], "hello world", "ArchiveReader + FileReader are working with a compress data");
-        markTestDone();
-      }
-    }
-    handle4.onerror = function() {
-      ok(false, "ArchiveReader.getFile('test/a.txt') should not return an 'error'");
-      markTestDone();
-    }
-
-    var handle5 = r.getFiles();
-    isnot(handle5, null, "ArchiveReader.getFiles() cannot be null");
-    handle5.onsuccess = function() {
-      ok(true, "ArchiveReader.getFiles() should return a 'success'");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-
-      is(this.result.length, 2, "ArchiveReader.getFilenames(): the array contains 2 items");
-      is(this.result[0].name, "test/a.txt", "ArchiveReader.getFilenames(): first file is 'test/a.txt'");
-      is(this.result[1].name, "test/b.txt", "ArchiveReader.getFilenames(): second file is 'test/b.txt'");
-      is(this.result[0].type, "text/plain", "ArchiveReader.getFile('test/a.txt') the type MUST be 'text/plain'");
-      is(this.result[1].type, "text/plain", "ArchiveReader.getFile('test/a.txt') the type MUST be 'text/plain'");
-
-      markTestDone();
-    }
-    handle5.onerror = function() {
-      ok(false, "ArchiveReader.getFiles() should not return an 'error'");
-      markTestDone();
-    }
-  }
-
-  </script>
-  <script type="text/javascript" src="helpers.js"></script>
-</head>
-
-<body onload="runTest();">
-<p id="display">
-</p>
-</body>
-
-</html>
deleted file mode 100644
--- a/dom/archivereader/test/test_nonUnicode.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--
-  Any copyright is dedicated to the Public Domain.
-  http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-  <title>Archive Reader Non-Unicode Test</title>
-
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-
-  <script type="text/javascript">
-  function filesToCreate() {
-    var binaryData = "";
-    for (var i = 0, len = binaryString.length / 2; i < len; ++i) {
-      var hex = binaryString[i * 2] + binaryString[i * 2 + 1];
-      binaryData += String.fromCharCode(parseInt(hex,16));
-    }
-    return [ {name: "fileArchiveReader_nonUnicode.zip", data: binaryData} ];
-  }
-
-  function test1(binaryFile)
-  {
-    var r = new ArchiveReader(binaryFile, { encoding: "ISO-8859-1" });
-    isnot(r, null, "ArchiveReader cannot be null");
-
-    // GetFilename
-    var handle = r.getFilenames();
-    isnot(handle, null, "ArchiveReader.getFilenames() cannot be null");
-    handle.onsuccess = function() {
-      ok(true, "ArchiveReader.getFilenames() should return a 'success'");
-      is(this.result instanceof Array, true, "ArchiveReader.getFilenames() should return an array");
-      is(this.result.length, 1, "ArchiveReader.getFilenames(): the array contains 1 item");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-      dump('Content: ' + this.result[0] + '\n');
-      test2(binaryFile);
-    }
-  }
-
-  function test2(binaryFile)
-  {
-    try {
-      new ArchiveReader(binaryFile, { encoding: "random stuff" });
-      ok(false, "Should have thrown for bogus encoding label.");
-    } catch (e) {
-      ok(e instanceof RangeError, "Expected a RangeError");
-    }
-    finishTest();
-  }
-
-  function testSteps(files)
-  {
-    test1(files[0]);
-  }
-
-
-  </script>
-  <script type="text/javascript" src="helpers.js"></script>
-
-</head>
-
-<body onload="runTest();">
-<p id="display">
-</p>
-<script type="text/javascript">
-var binaryString = '' +
-'504B0304140000000000255D094100000000000000000000000002000000912F504B03040A0000000000285D09416BB50A5A' +
-'010000000100000007000000912F9B2E747874D8504B01023F00140000000000255D09410000000000000000000000000200' +
-'24000000000000001000000000000000912F0A002000000000000100180062505F1A1376CD0162505F1A1376CD01FE3F8D59' +
-'1176CD01504B01023F000A0000000000285D09416BB50A5A0100000001000000070024000000000000002000000020000000' +
-'912F9B2E7478740A0020000000000001001800565EF41D1376CD0107BD73631176CD0107BD73631176CD01504B0506000000' +
-'0002000200AD000000460000000000';
-</script>
-</body>
-
-</html>
deleted file mode 100644
--- a/dom/archivereader/test/test_zip_in_zip.html
+++ /dev/null
@@ -1,109 +0,0 @@
-<!--
-  Any copyright is dedicated to the Public Domain.
-  http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-  <title>Archive Reader Zip-In-Zip Test</title>
-
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-
-  <script type="text/javascript">
-  function filesToCreate() {
-    var binaryData = "";
-    for (var i = 0, len = binaryString.length / 2; i < len; ++i) {
-      var hex = binaryString[i * 2] + binaryString[i * 2 + 1];
-      binaryData += String.fromCharCode(parseInt(hex,16));
-    }
-    return [ {name: "fileArchiveReader_42.zip", data: binaryData} ];
-  }
-
-  function testSteps(files)
-  {
-    var binaryFile = files[0];
-
-    // The input is 4 nested zip archives:
-    doLoop(binaryFile, 4);
-  }
-
-  function doLoop(blob, loop)
-  {
-    var r = new ArchiveReader(blob);
-    isnot(r, null, "ArchiveReader cannot be null");
-
-    // GetFilename
-    var handle = r.getFilenames();
-    isnot(handle, null, "ArchiveReader.getFilenames() cannot be null");
-    handle.onsuccess = function() {
-      ok(true, "ArchiveReader.getFilenames() should return a 'success'");
-      is(this.result instanceof Array, true, "ArchiveReader.getFilenames() should return an array");
-      is(this.result.length, 1, "ArchiveReader.getFilenames(): the array contains 1 item");
-      ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-
-      dump('Content:\n');
-      for (var i = 0; i < this.result.length; ++i)
-        dump(' * ' + this.result[i] + '\n');
-
-      var handle = r.getFile(this.result[0]);
-      handle.onerror = function() {
-        ok(false, "ArchiveReader.getFile() should not return any 'error'");
-      }
-      handle.onsuccess = function() {
-        ok(true, "ArchiveReader.getFilenames() should return a 'success'");
-        ok(this.reader, r, "ArchiveRequest.reader should be == ArchiveReader");
-
-        if (loop > 0)
-          doLoop(this.result, loop - 1);
-        else
-          doLastLoop(this.result);
-      }
-    }
-    handle.onerror = function() {
-      ok(false, "ArchiveReader.getFilenames() should not return any 'error'");
-    }
-  }
-
-  function doLastLoop(blob)
-  {
-    ok(blob.size == 262144, "The last file size is wrong");
-    ok(blob.name == 'empty.dat', "The last filename is wrong");
-    finishTest();
-  }
-
-  </script>
-  <script type="text/javascript" src="helpers.js"></script>
-
-</head>
-
-<body onload="runTest();">
-<p id="display">
-</p>
-<script type="text/javascript">
-var binaryString = '' +
-'504B03040A0000000000B0620E415F715F15970300009703000005001C00642E7A69705554090003AC262A50AC262A507578' +
-'0B000104E803000004E8030000504B03040A0000000000B0620E41CFE25F1EF7020000F702000005001C00632E7A69705554' +
-'090003AC262A50AC262A5075780B000104E803000004E8030000504B03040A0000000000B0620E4107D702A4570200005702' +
-'000005001C00622E7A69705554090003AC262A50AC262A5075780B000104E803000004E8030000504B03040A0000000000B0' +
-'620E417E45286DB7010000B701000005001C00612E7A69705554090003AC262A50AC262A5075780B000104E803000004E803' +
-'0000504B0304140000000800F7610E41784909B70F0100000000040009001C00656D7074792E646174555409000351252A50' +
-'57252A5075780B000104E803000004E8030000EDC13101000000C2A0FEA9E76D07A000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' +
-'0000000000000000000000000000000000000000000000000000000000000000000000000000DE00504B01021E0314000000' +
-'0800F7610E41784909B70F01000000000400090018000000000001000000B48100000000656D7074792E6461745554050003' +
-'51252A5075780B000104E803000004E8030000504B050600000000010001004F000000520100000000504B01021E030A0000' +
-'000000B0620E417E45286DB7010000B7010000050018000000000000000000B48100000000612E7A69705554050003AC262A' +
-'5075780B000104E803000004E8030000504B050600000000010001004B000000F60100000000504B01021E030A0000000000' +
-'B0620E4107D702A45702000057020000050018000000000000000000B48100000000622E7A69705554050003AC262A507578' +
-'0B000104E803000004E8030000504B050600000000010001004B000000960200000000504B01021E030A0000000000B0620E' +
-'41CFE25F1EF7020000F7020000050018000000000000000000B48100000000632E7A69705554050003AC262A5075780B0001' +
-'04E803000004E8030000504B050600000000010001004B000000360300000000504B01021E030A0000000000B0620E415F71' +
-'5F159703000097030000050018000000000000000000B48100000000642E7A69705554050003AC262A5075780B000104E803' +
-'000004E8030000504B050600000000010001004B000000D60300000000';
-</script>
-</body>
-
-</html>
--- a/dom/base/nsScriptLoader.cpp
+++ b/dom/base/nsScriptLoader.cpp
@@ -1597,17 +1597,17 @@ nsScriptLoader::ProcessScriptElement(nsI
         // KVKV TODO: Instead of processing immediately, try off-thread-parsing
         // it and only schedule a pending ProcessRequest if that fails.
         ProcessPendingRequestsAsync();
       } else {
         mLoadingAsyncRequests.AppendElement(request);
       }
       return false;
     }
-    if (!aElement->GetParserCreated() && !request->IsModuleRequest()) {
+    if (!aElement->GetParserCreated()) {
       // Violate the HTML5 spec in order to make LABjs and the "order" plug-in
       // for RequireJS work with their Gecko-sniffed code path. See
       // http://lists.w3.org/Archives/Public/public-html/2010Oct/0088.html
       request->mIsNonAsyncScriptInserted = true;
       mNonAsyncExternalScriptInsertedRequests.AppendElement(request);
       if (request->IsReadyToRun()) {
         // The script is available already. Run it ASAP when the event
         // loop gets a chance to spin.
--- a/dom/indexedDB/test/helpers.js
+++ b/dom/indexedDB/test/helpers.js
@@ -1,16 +1,14 @@
 /**
  * Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/
  */
 
 var testGenerator = testSteps();
-var archiveReaderEnabled = false;
-
 // The test js is shared between xpcshell (which has no SpecialPowers object)
 // and content mochitests (where the |Components| object is accessible only as
 // SpecialPowers.Components). Expose Components if necessary here to make things
 // work everywhere.
 //
 // Even if the real |Components| doesn't exist, we might shim in a simple JS
 // placebo for compat. An easy way to differentiate this from the real thing
 // is whether the property is read-only or not.
@@ -70,17 +68,16 @@ function* testHarnessSteps() {
 
   info("Pushing preferences");
 
   SpecialPowers.pushPrefEnv(
     {
       "set": [
         ["dom.indexedDB.testing", true],
         ["dom.indexedDB.experimental", true],
-        ["dom.archivereader.enabled", true]
       ]
     },
     nextTestHarnessStep
   );
   yield undefined;
 
   info("Pushing permissions");
 
--- a/dom/indexedDB/test/mochitest.ini
+++ b/dom/indexedDB/test/mochitest.ini
@@ -122,17 +122,16 @@ support-files =
 [test_abort_deleted_index.html]
 [test_abort_deleted_objectStore.html]
 [test_add_put.html]
 [test_add_twice_failure.html]
 [test_advance.html]
 [test_autoIncrement.html]
 [test_autoIncrement_indexes.html]
 [test_bfcache.html]
-[test_blob_archive.html]
 [test_blob_file_backed.html]
 [test_blob_simple.html]
 [test_blob_worker_crash.html]
 skip-if = e10s && os == 'win' && os_version == '6.1' # Bug 1342415
 [test_blob_worker_xhr_post.html]
 skip-if = e10s && os == 'win' && os_version == '6.1' # Bug 1342415
 [test_blob_worker_xhr_post_multifile.html]
 skip-if = e10s && os == 'win' && os_version == '6.1' # Bug 1342415
deleted file mode 100644
--- a/dom/indexedDB/test/test_blob_archive.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!--
-  Any copyright is dedicated to the Public Domain.
-  http://creativecommons.org/publicdomain/zero/1.0/
--->
-<html>
-<head>
-  <title>Indexed Database Property Test</title>
-
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-
-  <script type="text/javascript">
-
-  function* testSteps()
-  {
-    const BLOB_DATA =
-      "504B03040A00000000002E6BF14000000000000000000000000005001C00746573742F" +
-      "555409000337CA055039CA055075780B000104E803000004E8030000504B0304140000" +
-      "0008002D6BF1401780E15015000000580200000A001C00746573742F612E7478745554" +
-      "09000336CA05503ACA055075780B000104E803000004E8030000CB48CDC9C95728CF2F" +
-      "CA49E1CA18658FB2A9C40600504B03040A00000000002F88EC40662E84701000000010" +
-      "0000000A001C00746573742F622E74787455540900035A65FF4F42C5055075780B0001" +
-      "04E803000004E803000068656C6C6F20776F726C642C2032210A504B01021E030A0000" +
-      "0000002E6BF140000000000000000000000000050018000000000000001000FD410000" +
-      "0000746573742F555405000337CA055075780B000104E803000004E8030000504B0102" +
-      "1E031400000008002D6BF1401780E15015000000580200000A00180000000000010000" +
-      "00B4813F000000746573742F612E747874555405000336CA055075780B000104E80300" +
-      "0004E8030000504B01021E030A00000000002F88EC40662E847010000000100000000A" +
-      "0018000000000001000000B48198000000746573742F622E74787455540500035A65FF" +
-      "4F75780B000104E803000004E8030000504B05060000000003000300EB000000EC0000" +
-      "000000";
-
-    const TEST_FILE_1 = "test/a.txt";
-    const TEST_FILE_2 = "test/b.txt";
-
-    let TEST_FILE_1_CONTENTS = "";
-    for (let i = 0; i < 50; i++) {
-      TEST_FILE_1_CONTENTS += "hello world\n";
-    }
-    const TEST_FILE_2_CONTENTS = "hello world, 2!\n";
-
-    let binaryData = new Uint8Array(BLOB_DATA.length / 2);
-    for (let i = 0, len = BLOB_DATA.length / 2; i < len; i++) {
-      let hex = BLOB_DATA[i * 2] + BLOB_DATA[i * 2 + 1];
-      binaryData[i] = parseInt(hex, 16);
-    }
-
-    let request = indexedDB.open(window.location.pathname, 1);
-    request.onerror = errorHandler;
-    request.onupgradeneeded = grabEventAndContinueHandler;
-    request.onsuccess = unexpectedSuccessHandler;
-    let event = yield undefined;
-
-    let db = event.target.result;
-    db.onerror = errorHandler;
-
-    let objectStore = db.createObjectStore("foo", { autoIncrement: true });
-    let index = objectStore.createIndex("foo", "index");
-
-    request.onsuccess = grabEventAndContinueHandler;
-    event = yield undefined;
-
-    let data = new Blob([binaryData]);
-
-    objectStore = db.transaction("foo", "readwrite").objectStore("foo");
-    objectStore.add(data).onsuccess = grabEventAndContinueHandler;
-    event = yield undefined;
-
-    let key = event.target.result;
-
-    objectStore = db.transaction("foo").objectStore("foo");
-    objectStore.get(key).onsuccess = grabEventAndContinueHandler;
-    event = yield undefined;
-
-    let archiveReader = new ArchiveReader(event.target.result);
-    ok(archiveReader, "Got an ArchiveReader");
-
-    request = archiveReader.getFilenames();
-    request.onsuccess = grabEventAndContinueHandler;
-    request.onerror = errorHandler;
-    event = yield undefined;
-
-    is(event.target.result.length, 2, "Got 2 archive items");
-    is(event.target.result[0], TEST_FILE_1,
-       "First file is '" + TEST_FILE_1 + "'");
-    is(event.target.result[1], TEST_FILE_2,
-       "Second file is '" + TEST_FILE_2 + "'");
-
-    request = archiveReader.getFile(TEST_FILE_1);
-    request.onsuccess = grabEventAndContinueHandler;
-    request.onerror = errorHandler;
-    event = yield undefined;
-
-    let fileReader = new FileReader();
-    fileReader.readAsText(event.target.result);
-    fileReader.onload = grabEventAndContinueHandler;
-    fileReader.onerror = errorHandler;
-    event = yield undefined;
-
-    // Don't use is() because it prints out 100 lines of text...
-    ok(event.target.result == TEST_FILE_1_CONTENTS, "Correct text");
-
-    request = archiveReader.getFile(TEST_FILE_2);
-    request.onsuccess = grabEventAndContinueHandler;
-    request.onerror = errorHandler;
-    event = yield undefined;
-
-    fileReader = new FileReader();
-    fileReader.readAsText(event.target.result);
-    fileReader.onload = grabEventAndContinueHandler;
-    fileReader.onerror = errorHandler;
-    event = yield undefined;
-
-    // Don't use is() because it prints out a newline...
-    ok(event.target.result == TEST_FILE_2_CONTENTS, "Correct text");
-
-    finishTest();
-  }
-  </script>
-  <script type="text/javascript" src="helpers.js"></script>
-
-</head>
-
-<body onload="runTest();"></body>
-
-</html>
--- a/dom/moz.build
+++ b/dom/moz.build
@@ -31,17 +31,16 @@ interfaces = [
     'push',
 ]
 
 DIRS += ['interfaces/' + i for i in interfaces]
 
 DIRS += [
     'animation',
     'base',
-    'archivereader',
     'bindings',
     'battery',
     'browser-element',
     'cache',
     'canvas',
     'commandhandler',
     'crypto',
     'devicestorage',
deleted file mode 100644
--- a/dom/webidl/ArchiveReader.webidl
+++ /dev/null
@@ -1,16 +0,0 @@
-/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-[Pref="dom.archivereader.enabled",
- Constructor(Blob blob, optional ArchiveReaderOptions options)]
-interface ArchiveReader {
-  ArchiveRequest getFilenames();
-  ArchiveRequest getFile(DOMString filename);
-  ArchiveRequest getFiles();
-};
-
-dictionary ArchiveReaderOptions {
-  DOMString encoding = "windows-1252"; // Default fallback encoding
-};
deleted file mode 100644
--- a/dom/webidl/ArchiveRequest.webidl
+++ /dev/null
@@ -1,10 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim: set ts=2 et sw=2 tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-[Pref="dom.archivereader.enabled"]
-interface ArchiveRequest : DOMRequest {
-  readonly attribute ArchiveReader reader;
-};
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -387,18 +387,16 @@ WEBIDL_FILES = [
     'AnimationEffectTiming.webidl',
     'AnimationEffectTimingReadOnly.webidl',
     'AnimationEvent.webidl',
     'AnimationTimeline.webidl',
     'AnonymousContent.webidl',
     'AppInfo.webidl',
     'AppNotificationServiceOptions.webidl',
     'APZTestData.webidl',
-    'ArchiveReader.webidl',
-    'ArchiveRequest.webidl',
     'Attr.webidl',
     'AudioBuffer.webidl',
     'AudioBufferSourceNode.webidl',
     'AudioChannel.webidl',
     'AudioContext.webidl',
     'AudioDestinationNode.webidl',
     'AudioListener.webidl',
     'AudioNode.webidl',
--- a/image/ImageOps.cpp
+++ b/image/ImageOps.cpp
@@ -109,19 +109,23 @@ ImageOps::DecodeToSurface(nsIInputStream
   // Write the data into a SourceBuffer.
   NotNull<RefPtr<SourceBuffer>> sourceBuffer = WrapNotNull(new SourceBuffer());
   sourceBuffer->ExpectLength(length);
   rv = sourceBuffer->AppendFromInputStream(inputStream, length);
   if (NS_FAILED(rv)) {
     return nullptr;
   }
   // Make sure our sourceBuffer is marked as complete.
-  if (!sourceBuffer->IsComplete()) {
-    sourceBuffer->Complete(NS_OK);
+  if (sourceBuffer->IsComplete()) {
+    NS_WARNING("The SourceBuffer was unexpectedly marked as complete. This may "
+               "indicate either an OOM condition, or that imagelib was not "
+               "initialized properly.");
+    return nullptr;
   }
+  sourceBuffer->Complete(NS_OK);
 
   // Create a decoder.
   DecoderType decoderType =
     DecoderFactory::GetDecoderType(PromiseFlatCString(aMimeType).get());
   RefPtr<Decoder> decoder =
     DecoderFactory::CreateAnonymousDecoder(decoderType, sourceBuffer,
                                            Nothing(), ToSurfaceFlags(aFlags));
   if (!decoder) {
--- a/js/src/dtoa.c
+++ b/js/src/dtoa.c
@@ -248,17 +248,17 @@ extern void *MALLOC(size_t);
 #ifdef KR_headers
 #define CONST /* blank */
 #else
 #define CONST const
 #endif
 #endif
 
 #if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1
-Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
+#error "Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined."
 #endif
 
 typedef union { double d; ULong L[2]; } U;
 
 #define dval(x) ((x).d)
 #ifdef IEEE_8087
 #define word0(x) ((x).L[1])
 #define word1(x) ((x).L[0])
--- a/js/src/jit-test/lib/wasm-testharness.js
+++ b/js/src/jit-test/lib/wasm-testharness.js
@@ -18,25 +18,29 @@ function test(func, description) {
 ${maybeErr}
 ${maybeErr.stack}`);
     } else {
         print(`${description}: PASS.`);
     }
 }
 
 function promise_test(func, description) {
+    let maybeError = null;
     func()
     .then(_ => {
         print(`${description}: PASS.`);
     })
     .catch(err => {
         print(`${description}: FAIL.
 ${err}`);
+        maybeError = err;
     });
     drainJobQueue();
+    if (maybeError)
+        throw maybeError;
 }
 
 let assert_equals = assertEq;
 let assert_true = (x, errMsg) => { assertEq(x, true); }
 let assert_false = (x, errMsg) => { assertEq(x, false); }
 
 function assert_unreached(description) {
     throw new Error(`unreachable:\n${description}`);
--- a/js/src/jit-test/tests/basic/expression-autopsy.js
+++ b/js/src/jit-test/tests/basic/expression-autopsy.js
@@ -82,30 +82,111 @@ check("(o[0] = 4).foo", "o[0].foo");
 // undefined in that case.
 check("this.x", "this.x", false);
 
 for (let tok of ["|", "^", "&", "==", "!==", "===", "!==", "<", "<=", ">", ">=",
                  ">>", "<<", ">>>", "+", "-", "*", "/", "%"]) {
     check("o[(undef " + tok + " 4)]");
 }
 
-check("o[!(o)]");
-check("o[~(o)]");
-check("o[+ (o)]");
-check("o[- (o)]");
+check("o[(!o)]");
+check("o[(~o)]");
+check("o[(+ o)]");
+check("o[(- o)]");
 
+check("o[(!(o + 1))]");
+check("o[(~(o + 1))]");
+check("o[(+ (o + 1))]");
+check("o[(- (o + 1))]");
 
 // A few one off tests
 check_one("6", (function () { 6() }), " is not a function");
 check_one("4", (function() { (4||eval)(); }), " is not a function");
 check_one("0", (function () { Array.prototype.reverse.call('123'); }), " is read-only");
-check_one("(intermediate value)[Symbol.iterator](...).next(...).value",
+check_one("[...][Symbol.iterator](...).next(...).value",
           function () { ieval("{ let x; var [a, b, [c0, c1]] = [x, x, x]; }") }, " is undefined");
-check_one("void 1", function() { (void 1)(); }, " is not a function");
-check_one("void o[1]", function() { var o = []; (void o[1])() }, " is not a function");
+check_one("(void 1)", function() { (void 1)(); }, " is not a function");
+check_one("(void o[1])", function() { var o = []; (void o[1])() }, " is not a function");
+
+check_one("(typeof 1)", function() { (typeof 1)(); }, " is not a function");
+check_one("(typeof o[1])", function() { var o = []; (typeof o[1])() }, " is not a function");
+
+check_one("(delete foo)",
+          function() { (delete foo)(); },
+          " is not a function");
+check_one("(delete obj.foo)",
+          function() { var obj = {}; (delete obj.foo)(); },
+          " is not a function");
+check_one("(delete obj.foo)",
+          function() { "use strict"; var obj = {}; (delete obj.foo)(); },
+          " is not a function");
+check_one("(delete obj[y])",
+          function() { var obj = {}, y = {}; (delete obj[y])(); },
+          " is not a function");
+check_one("(delete obj[y])",
+          function() { "use strict"; var obj = {}, y = {}; (delete obj[y])(); },
+          " is not a function");
+
+check_one("foo.apply(...)",
+          function() { function foo() {} foo.apply()(); },
+          " is not a function");
+
+check_one("super(...)",
+          function() {
+            class X extends Object {
+              constructor() {
+                super()();
+              }
+            }
+            new X();
+          },
+          " is not a function");
+check_one("super(...)",
+          function() {
+            class X extends Object {
+              constructor() {
+                super(...[])();
+              }
+            }
+            new X();
+          },
+          " is not a function");
+
+check_one("eval(...)",
+          function() { eval("")(); },
+          " is not a function");
+check_one("eval(...)",
+          function() { "use strict"; eval("")(); },
+          " is not a function");
+check_one("eval(...)",
+          function() { eval(...[""])(); },
+          " is not a function");
+check_one("eval(...)",
+          function() { "use strict"; eval(...[""])(); },
+          " is not a function");
+
+check_one("(new foo(...))",
+          function() { function foo() {}; new foo()(); },
+          " is not a function");
+check_one("(new foo(...))",
+          function() { function foo() {}; new foo(...[])(); },
+          " is not a function");
+check_one("(new foo.x(...))",
+          function() { var foo = { x: function() {} }; new foo.x()(); },
+          " is not a function");
+check_one("(new foo.x(...))",
+          function() { var foo = { x: function() {} }; new foo.x(...[])(); },
+          " is not a function");
+
+check_one("[...].foo",
+          function() { [undefined].foo(); },
+          " is not a function");
+check_one("[...].foo",
+          function() { [undefined, ...[]].foo(); },
+          " is not a function");
 
 // Manual testing for this case: the only way to trigger an error is *not* on
 // an attempted property access during destructuring, and the error message
 // invoking ToObject(null) is different: "can't convert {0} to object".
 try
 {
   (function() {
     var [{x}] = [null, {}];
--- a/js/src/jit-test/tests/wasm/spec/binary.wast.js
+++ b/js/src/jit-test/tests/wasm/spec/binary.wast.js
@@ -27,17 +27,17 @@ assert_malformed("\x61\x73\x6d\x00");
 
 // binary.wast:10
 assert_malformed("\x6d\x73\x61\x00");
 
 // binary.wast:11
 assert_malformed("\x6d\x73\x61\x00\x01\x00\x00\x00");
 
 // binary.wast:12
-assert_malformed("\x6d\x73\x61\x00\x00\x00\x00\x0d");
+assert_malformed("\x6d\x73\x61\x00\x00\x00\x00\x01");
 
 // binary.wast:14
 assert_malformed("\x00\x61\x73\x6d");
 
 // binary.wast:15
 assert_malformed("\x00\x61\x73\x6d\x01");
 
 // binary.wast:16
@@ -45,9 +45,9 @@ assert_malformed("\x00\x61\x73\x6d\x01\x
 
 // binary.wast:17
 assert_malformed("\x00\x61\x73\x6d\x0d\x00\x00\x00");
 
 // binary.wast:18
 assert_malformed("\x00\x61\x73\x6d\x0e\x00\x00\x00");
 
 // binary.wast:19
-assert_malformed("\x00\x61\x73\x6d\x00\x00\x00\x0d");
+assert_malformed("\x00\x61\x73\x6d\x00\x00\x00\x01");
--- a/js/src/jit-test/tests/wasm/spec/harness/wasm-constants.js
+++ b/js/src/jit-test/tests/wasm/spec/harness/wasm-constants.js
@@ -16,17 +16,17 @@ function bytes() {
 }
 
 // Header declaration constants
 var kWasmH0 = 0;
 var kWasmH1 = 0x61;
 var kWasmH2 = 0x73;
 var kWasmH3 = 0x6d;
 
-var kWasmV0 = 0x1;
+var kWasmV0 = 1;
 var kWasmV1 = 0;
 var kWasmV2 = 0;
 var kWasmV3 = 0;
 
 var kHeaderSize = 8;
 var kPageSize = 65536;
 
 function bytesWithHeader() {
--- a/js/src/jit-test/tests/wasm/spec/jsapi.js
+++ b/js/src/jit-test/tests/wasm/spec/jsapi.js
@@ -739,23 +739,23 @@ test(() => {
     //assertInstantiateError([new Uint8Array("hi!")], CompileError);
     assertInstantiateError([new ArrayBuffer("hi!")], CompileError);
     assertInstantiateError([importingModule], TypeError);
     assertInstantiateError([importingModule, null], TypeError);
     assertInstantiateError([importingModuleBinary, null], TypeError);
     assertInstantiateError([emptyModule, null], TypeError);
     assertInstantiateError([importingModuleBinary, null], TypeError);
     assertInstantiateError([importingModuleBinary, undefined], TypeError);
-    assertInstantiateError([importingModuleBinary, {}], LinkError);
+    assertInstantiateError([importingModuleBinary, {}], TypeError);
     assertInstantiateError([importingModuleBinary, {"":{g:()=>{}}}], LinkError);
-    assertInstantiateError([importingModuleBinary, {t:{f:()=>{}}}], LinkError);
+    assertInstantiateError([importingModuleBinary, {t:{f:()=>{}}}], TypeError);
     assertInstantiateError([complexImportingModuleBinary, null], TypeError);
     assertInstantiateError([complexImportingModuleBinary, undefined], TypeError);
-    assertInstantiateError([complexImportingModuleBinary, {}], LinkError);
-    assertInstantiateError([complexImportingModuleBinary, {"c": {"d": scratch_memory}}], LinkError);
+    assertInstantiateError([complexImportingModuleBinary, {}], TypeError);
+    assertInstantiateError([complexImportingModuleBinary, {"c": {"d": scratch_memory}}], TypeError);
 
     function assertInstantiateSuccess(module, imports) {
         promise_test(()=> {
             return instantiate(module, imports)
                 .then(result => {
                     if (module instanceof Module) {
                         assert_equals(result instanceof Instance, true);
                     } else {
--- a/js/src/jsarray.cpp
+++ b/js/src/jsarray.cpp
@@ -1,15 +1,15 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  * vim: set ts=8 sts=4 et sw=4 tw=99:
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-#include "jsarray.h"
+#include "jsarrayinlines.h"
 
 #include "mozilla/ArrayUtils.h"
 #include "mozilla/CheckedInt.h"
 #include "mozilla/DebugOnly.h"
 #include "mozilla/FloatingPoint.h"
 #include "mozilla/MathAlgorithms.h"
 
 #include <algorithm>
@@ -247,31 +247,16 @@ GetElement(JSContext* cx, HandleObject o
 }
 
 static inline bool
 GetElement(JSContext* cx, HandleObject obj, uint32_t index, bool* hole, MutableHandleValue vp)
 {
     return GetElement(cx, obj, obj, index, hole, vp);
 }
 
-static bool
-GetElement(JSContext* cx, HandleObject obj, uint32_t index, MutableHandleValue vp)
-{
-    if (index < GetAnyBoxedOrUnboxedInitializedLength(obj)) {
-        vp.set(GetAnyBoxedOrUnboxedDenseElement(obj, index));
-        if (!vp.isMagic(JS_ELEMENTS_HOLE))
-            return true;
-    }
-    if (obj->is<ArgumentsObject>()) {
-        if (obj->as<ArgumentsObject>().maybeGetElement(index, vp))
-            return true;
-    }
-    return GetElement(cx, obj, obj, index, vp);
-}
-
 bool
 ElementAdder::append(JSContext* cx, HandleValue v)
 {
     MOZ_ASSERT(index_ < length_);
     if (resObj_) {
         DenseElementResult result =
             SetOrExtendAnyBoxedOrUnboxedDenseElements(cx, resObj_, index_, v.address(), 1);
         if (result == DenseElementResult::Failure)
new file mode 100644
--- /dev/null
+++ b/js/src/jsarrayinlines.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * vim: set ts=8 sts=4 et sw=4 tw=99:
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef vm_jsarrayinlines_h
+#define vm_jsarrayinlines_h
+
+#include "jsarray.h"
+
+#include "jsobj.h"
+
+#include "vm/ArgumentsObject.h"
+
+#include "vm/ArgumentsObject-inl.h"
+#include "vm/UnboxedObject-inl.h"
+
+namespace js {
+
+inline bool
+GetElement(JSContext* cx, HandleObject obj, uint32_t index, MutableHandleValue vp)
+{
+    if (index < GetAnyBoxedOrUnboxedInitializedLength(obj)) {
+        vp.set(GetAnyBoxedOrUnboxedDenseElement(obj, index));
+        if (!vp.isMagic(JS_ELEMENTS_HOLE))
+            return true;
+    }
+
+    if (obj->is<ArgumentsObject>()) {
+        if (obj->as<ArgumentsObject>().maybeGetElement(index, vp))
+            return true;
+    }
+
+    return GetElement(cx, obj, obj, index, vp);
+}
+
+} // namespace js
+
+#endif // vm_jsarrayinlines_h
--- a/js/src/jsnum.cpp
+++ b/js/src/jsnum.cpp
@@ -1125,38 +1125,19 @@ static const JSFunctionSpec number_stati
     JS_SELF_HOSTED_FN("isFinite", "Number_isFinite", 1,0),
     JS_FN("isInteger", Number_isInteger, 1, 0),
     JS_SELF_HOSTED_FN("isNaN", "Number_isNaN", 1,0),
     JS_SELF_HOSTED_FN("isSafeInteger", "Number_isSafeInteger", 1,0),
     JS_FS_END
 };
 
 
-/*
- * Set the exception mask to mask all exceptions and set the FPU precision
- * to 53 bit mantissa (64 bit doubles).
- */
-void
-js::FIX_FPU()
-{
-#if (defined __GNUC__ && defined __i386__) || \
-    (defined __SUNPRO_CC && defined __i386)
-    short control;
-    asm("fstcw %0" : "=m" (control) : );
-    control &= ~0x300; // Lower bits 8 and 9 (precision control).
-    control |= 0x2f3;  // Raise bits 0-5 (exception masks) and 9 (64-bit precision).
-    asm("fldcw %0" : : "m" (control) );
-#endif
-}
-
 bool
 js::InitRuntimeNumberState(JSRuntime* rt)
 {
-    FIX_FPU();
-
     // XXX If EXPOSE_INTL_API becomes true all the time at some point,
     //     js::InitRuntimeNumberState is no longer fallible, and we should
     //     change its return type.
 #if !EXPOSE_INTL_API
     /* Copy locale-specific separators into the runtime strings. */
     const char* thousandsSeparator;
     const char* decimalPoint;
     const char* grouping;
@@ -1218,19 +1199,16 @@ js::FinishRuntimeNumberState(JSRuntime* 
 }
 #endif
 
 JSObject*
 js::InitNumberClass(JSContext* cx, HandleObject obj)
 {
     MOZ_ASSERT(obj->isNative());
 
-    /* XXX must do at least once per new thread, so do it per JSContext... */
-    FIX_FPU();
-
     Handle<GlobalObject*> global = obj.as<GlobalObject>();
 
     RootedObject numberProto(cx, GlobalObject::createBlankPrototype(cx, global,
                                                                     &NumberObject::class_));
     if (!numberProto)
         return nullptr;
     numberProto->as<NumberObject>().setPrimitiveValue(0);
 
--- a/js/src/jsnum.h
+++ b/js/src/jsnum.h
@@ -335,13 +335,11 @@ SafeMul(int32_t one, int32_t two, int32_
     return !__builtin_smul_overflow(one, two, res);
 #else
     *res = uint32_t(one) * uint32_t(two);
     int64_t ores = (int64_t)one * (int64_t)two;
     return ores == (int64_t)*res;
 #endif
 }
 
-void FIX_FPU();
-
 } /* namespace js */
 
 #endif /* jsnum_h */
--- a/js/src/json.cpp
+++ b/js/src/json.cpp
@@ -18,16 +18,17 @@
 #include "jsstr.h"
 #include "jstypes.h"
 #include "jsutil.h"
 
 #include "vm/Interpreter.h"
 #include "vm/JSONParser.h"
 #include "vm/StringBuffer.h"
 
+#include "jsarrayinlines.h"
 #include "jsatominlines.h"
 #include "jsboolinlines.h"
 
 #include "vm/NativeObject-inl.h"
 
 using namespace js;
 using namespace js::gc;
 
@@ -491,17 +492,17 @@ JA(JSContext* cx, HandleObject obj, Stri
                                "fully dense (and otherwise un-indexed), *or* "
                                "all its initially-dense elements were sparsified "
                                "and the object is indexed");
                 } else {
                     MOZ_ASSERT(obj->isIndexed());
                 }
             }
 #endif
-            if (!GetElement(cx, obj, obj, i, &outputValue))
+            if (!GetElement(cx, obj, i, &outputValue))
                 return false;
             if (!PreprocessValue(cx, obj, i, &outputValue, scx))
                 return false;
             if (IsFilteredValue(outputValue)) {
                 if (!scx->sb.append("null"))
                     return false;
             } else {
                 if (!Str(cx, outputValue, scx))
@@ -639,17 +640,17 @@ js::Stringify(JSContext* cx, MutableHand
 
             /* Step 4b(iii)(5). */
             RootedValue item(cx);
             for (; k < len; k++) {
                 if (!CheckForInterrupt(cx))
                     return false;
 
                 /* Step 4b(iii)(5)(a-b). */
-                if (!GetElement(cx, replacer, replacer, k, &item))
+                if (!GetElement(cx, replacer, k, &item))
                     return false;
 
                 RootedId id(cx);
 
                 /* Step 4b(iii)(5)(c-f). */
                 if (item.isNumber()) {
                     /* Step 4b(iii)(5)(e). */
                     int32_t n;
--- a/js/src/jsopcode.cpp
+++ b/js/src/jsopcode.cpp
@@ -10,16 +10,17 @@
 
 #include "jsopcodeinlines.h"
 
 #define __STDC_FORMAT_MACROS
 
 #include "mozilla/Attributes.h"
 #include "mozilla/SizePrintfMacros.h"
 #include "mozilla/Sprintf.h"
+#include "mozilla/Vector.h"
 
 #include <algorithm>
 #include <ctype.h>
 #include <inttypes.h>
 #include <stdio.h>
 #include <string.h>
 
 #include "jsapi.h"
@@ -249,119 +250,317 @@ js::DumpCompartmentPCCounts(JSContext* c
 
     return true;
 }
 
 /////////////////////////////////////////////////////////////////////
 // Bytecode Parser
 /////////////////////////////////////////////////////////////////////
 
+// Stores the information about the stack slot, where the value comes from.
+// Elements of BytecodeParser::Bytecode.{offsetStack,offsetStackAfter} arrays.
+struct OffsetAndDefIndex {
+    // To make this struct a POD type, keep these properties public.
+    // Use accessors instead of directly accessing them.
+
+    // The offset of the PC that pushed the value for this slot.
+    uint32_t offset_;
+
+    // The index in `ndefs` for the PC (0-origin)
+    uint8_t defIndex_;
+
+    enum : uint8_t {
+        Normal = 0,
+
+        // Ignored this value in the expression decompilation.
+        // Used by JSOP_NOP_DESTRUCTURING.  See BytecodeParser::simulateOp.
+        Ignored,
+
+        // The value in this slot comes from 2 or more paths.
+        // offset_ and defIndex_ holds the information for the path that
+        // reaches here first.
+        Merged,
+    } type_;
+
+    uint32_t offset() const {
+        MOZ_ASSERT(!isSpecial());
+        return offset_;
+    };
+    uint32_t specialOffset() const {
+        MOZ_ASSERT(isSpecial());
+        return offset_;
+    };
+
+    uint8_t defIndex() const {
+        MOZ_ASSERT(!isSpecial());
+        return defIndex_;
+    }
+    uint8_t specialDefIndex() const {
+        MOZ_ASSERT(isSpecial());
+        return defIndex_;
+    }
+
+    bool isSpecial() const {
+        return type_ != Normal;
+    }
+    bool isMerged() const {
+        return type_ == Merged;
+    }
+    bool isIgnored() const {
+        return type_ == Ignored;
+    }
+
+    void set(uint32_t aOffset, uint8_t aDefIndex) {
+        offset_ = aOffset;
+        defIndex_ = aDefIndex;
+        type_ = Normal;
+    }
+
+    // Keep offset_ and defIndex_ values for stack dump.
+    void setMerged() {
+        type_ = Merged;
+    }
+    void setIgnored() {
+        type_ = Ignored;
+    }
+
+    bool operator==(const OffsetAndDefIndex& rhs) const {
+        return offset_ == rhs.offset_ &&
+               defIndex_ == rhs.defIndex_;
+    }
+
+    bool operator!=(const OffsetAndDefIndex& rhs) const {
+        return !(*this == rhs);
+    }
+};
+
+namespace mozilla {
+
+template <>
+struct IsPod<OffsetAndDefIndex> : TrueType {};
+
+} // namespace mozilla
+
 namespace {
 
 class BytecodeParser
 {
+  public:
+    enum class JumpKind {
+        Simple,
+        SwitchCase,
+        SwitchDefault,
+        TryCatch,
+        TryFinally
+    };
+
+  private:
     class Bytecode
     {
       public:
-        Bytecode() { mozilla::PodZero(this); }
+        explicit Bytecode(const LifoAllocPolicy<Fallible>& alloc)
+          : parsed(false),
+            stackDepth(0),
+            offsetStack(nullptr)
+#ifdef DEBUG
+            ,
+            stackDepthAfter(0),
+            offsetStackAfter(nullptr),
+            jumpOrigins(alloc)
+#endif /* DEBUG */
+        {}
 
         // Whether this instruction has been analyzed to get its output defines
         // and stack.
         bool parsed : 1;
 
         // Stack depth before this opcode.
         uint32_t stackDepth;
 
         // Pointer to array of |stackDepth| offsets.  An element at position N
         // in the array is the offset of the opcode that defined the
         // corresponding stack slot.  The top of the stack is at position
         // |stackDepth - 1|.
-        uint32_t* offsetStack;
-
-        bool captureOffsetStack(LifoAlloc& alloc, const uint32_t* stack, uint32_t depth) {
+        OffsetAndDefIndex* offsetStack;
+
+#ifdef DEBUG
+        // stack depth after this opcode.
+        uint32_t stackDepthAfter;
+
+        // Pointer to array of |stackDepthAfter| offsets.
+        OffsetAndDefIndex* offsetStackAfter;
+
+        struct JumpInfo {
+            uint32_t from;
+            JumpKind kind;
+
+            JumpInfo(uint32_t from_, JumpKind kind_)
+              : from(from_),
+                kind(kind_)
+            {}
+        };
+
+        // A list of offsets of the bytecode that jumps to this bytecode,
+        // exclusing previous bytecode.
+        Vector<JumpInfo, 0, LifoAllocPolicy<Fallible>> jumpOrigins;
+#endif /* DEBUG */
+
+        bool captureOffsetStack(LifoAlloc& alloc, const OffsetAndDefIndex* stack, uint32_t depth) {
             stackDepth = depth;
-            offsetStack = alloc.newArray<uint32_t>(stackDepth);
+            offsetStack = alloc.newArray<OffsetAndDefIndex>(stackDepth);
             if (!offsetStack)
                 return false;
             if (stackDepth) {
                 for (uint32_t n = 0; n < stackDepth; n++)
                     offsetStack[n] = stack[n];
             }
             return true;
         }
 
+#ifdef DEBUG
+        bool captureOffsetStackAfter(LifoAlloc& alloc, const OffsetAndDefIndex* stack,
+                                     uint32_t depth) {
+            stackDepthAfter = depth;
+            offsetStackAfter = alloc.newArray<OffsetAndDefIndex>(stackDepthAfter);
+            if (!offsetStackAfter)
+                return false;
+            if (stackDepthAfter) {
+                for (uint32_t n = 0; n < stackDepthAfter; n++)
+                    offsetStackAfter[n] = stack[n];
+            }
+            return true;
+        }
+
+        bool addJump(uint32_t from, JumpKind kind) {
+            return jumpOrigins.append(JumpInfo(from, kind));
+        }
+#endif /* DEBUG */
+
         // When control-flow merges, intersect the stacks, marking slots that
-        // are defined by different offsets with the UnknownOffset sentinel.
+        // are defined by different offsets and/or defIndices merged.
         // This is sufficient for forward control-flow.  It doesn't grok loops
         // -- for that you would have to iterate to a fixed point -- but there
         // shouldn't be operands on the stack at a loop back-edge anyway.
-        void mergeOffsetStack(const uint32_t* stack, uint32_t depth) {
+        void mergeOffsetStack(const OffsetAndDefIndex* stack, uint32_t depth) {
             MOZ_ASSERT(depth == stackDepth);
             for (uint32_t n = 0; n < stackDepth; n++) {
-                if (stack[n] == SpecialOffsets::IgnoreOffset)
+                if (stack[n].isIgnored())
                     continue;
-                if (offsetStack[n] == SpecialOffsets::IgnoreOffset)
+                if (offsetStack[n].isIgnored())
                     offsetStack[n] = stack[n];
                 if (offsetStack[n] != stack[n])
-                    offsetStack[n] = SpecialOffsets::UnknownOffset;
+                    offsetStack[n].setMerged();
             }
         }
     };
 
     JSContext* cx_;
     LifoAllocScope allocScope_;
     RootedScript script_;
 
     Bytecode** codeArray_;
 
-    // Use a struct instead of an enum class to avoid casting the enumerated
-    // value.
-    struct SpecialOffsets {
-        static const uint32_t UnknownOffset = UINT32_MAX;
-        static const uint32_t IgnoreOffset = UINT32_MAX - 1;
-        static const uint32_t FirstSpecialOffset = IgnoreOffset;
-    };
+#ifdef DEBUG
+    // Dedicated mode for stack dump.
+    // Capture stack after each opcode, and also enable special handling for
+    // some opcodes to make stack transition clearer.
+    bool isStackDump;
+#endif /* DEBUG */
 
   public:
     BytecodeParser(JSContext* cx, JSScript* script)
       : cx_(cx),
         allocScope_(&cx->tempLifoAlloc()),
         script_(cx, script),
-        codeArray_(nullptr) { }
+        codeArray_(nullptr)
+#ifdef DEBUG
+        ,
+        isStackDump(false)
+#endif /* DEBUG */
+    {}
 
     bool parse();
 
 #ifdef DEBUG
     bool isReachable(uint32_t offset) { return maybeCode(offset); }
     bool isReachable(const jsbytecode* pc) { return maybeCode(pc); }
-#endif
+#endif /* DEBUG */
 
     uint32_t stackDepthAtPC(uint32_t offset) {
         // Sometimes the code generator in debug mode asks about the stack depth
         // of unreachable code (bug 932180 comment 22).  Assume that unreachable
         // code has no operands on the stack.
         return getCode(offset).stackDepth;
     }
-    uint32_t stackDepthAtPC(const jsbytecode* pc) { return stackDepthAtPC(script_->pcToOffset(pc)); }
-
-    uint32_t offsetForStackOperand(uint32_t offset, int operand) {
+    uint32_t stackDepthAtPC(const jsbytecode* pc) {
+        return stackDepthAtPC(script_->pcToOffset(pc));
+    }
+
+#ifdef DEBUG
+    uint32_t stackDepthAfterPC(uint32_t offset) {
+        return getCode(offset).stackDepthAfter;
+    }
+    uint32_t stackDepthAfterPC(const jsbytecode* pc) {
+        return stackDepthAfterPC(script_->pcToOffset(pc));
+    }
+#endif
+
+    const OffsetAndDefIndex& offsetForStackOperand(uint32_t offset, int operand) {
         Bytecode& code = getCode(offset);
         if (operand < 0) {
             operand += code.stackDepth;
             MOZ_ASSERT(operand >= 0);
         }
         MOZ_ASSERT(uint32_t(operand) < code.stackDepth);
         return code.offsetStack[operand];
     }
-    jsbytecode* pcForStackOperand(jsbytecode* pc, int operand) {
-        uint32_t offset = offsetForStackOperand(script_->pcToOffset(pc), operand);
-        if (offset >= SpecialOffsets::FirstSpecialOffset)
+    jsbytecode* pcForStackOperand(jsbytecode* pc, int operand, uint8_t* defIndex) {
+        size_t offset = script_->pcToOffset(pc);
+        const OffsetAndDefIndex& offsetAndDefIndex = offsetForStackOperand(offset, operand);
+        if (offsetAndDefIndex.isSpecial())
             return nullptr;
-        return script_->offsetToPC(offset);
+        *defIndex = offsetAndDefIndex.defIndex();
+        return script_->offsetToPC(offsetAndDefIndex.offset());
+    }
+
+#ifdef DEBUG
+    const OffsetAndDefIndex& offsetForStackOperandAfterPC(uint32_t offset, int operand) {
+        Bytecode& code = getCode(offset);
+        if (operand < 0) {
+            operand += code.stackDepthAfter;
+            MOZ_ASSERT(operand >= 0);
+        }
+        MOZ_ASSERT(uint32_t(operand) < code.stackDepthAfter);
+        return code.offsetStackAfter[operand];
     }
+    jsbytecode* pcForStackOperandAfterPC(jsbytecode* pc, int operand, uint8_t* defIndex) {
+        size_t offset = script_->pcToOffset(pc);
+        const OffsetAndDefIndex& offsetAndDefIndex = offsetForStackOperandAfterPC(offset, operand);
+        if (offsetAndDefIndex.isSpecial())
+            return nullptr;
+        *defIndex = offsetAndDefIndex.defIndex();
+        return script_->offsetToPC(offsetAndDefIndex.offset());
+    }
+
+    template <typename Callback>
+    bool forEachJumpOrigins(jsbytecode* pc, Callback callback) {
+        Bytecode& code = getCode(script_->pcToOffset(pc));
+
+        for (Bytecode::JumpInfo& info : code.jumpOrigins) {
+            if (!callback(script_->offsetToPC(info.from), info.kind))
+                return false;
+        }
+
+        return true;
+    }
+
+    void setStackDump() {
+        isStackDump = true;
+    }
+#endif /* DEBUG */
 
   private:
     LifoAlloc& alloc() {
         return allocScope_.alloc();
     }
 
     void reportOOM() {
         allocScope_.releaseEarly();
@@ -385,149 +584,265 @@ class BytecodeParser
     Bytecode& getCode(const jsbytecode* pc) { return getCode(script_->pcToOffset(pc)); }
 
     Bytecode* maybeCode(uint32_t offset) {
         MOZ_ASSERT(offset < script_->length());
         return codeArray_[offset];
     }
     Bytecode* maybeCode(const jsbytecode* pc) { return maybeCode(script_->pcToOffset(pc)); }
 
-    uint32_t simulateOp(JSOp op, uint32_t offset, uint32_t* offsetStack, uint32_t stackDepth);
-
-    inline bool recordBytecode(uint32_t offset, const uint32_t* offsetStack, uint32_t stackDepth);
+    uint32_t simulateOp(JSOp op, uint32_t offset, OffsetAndDefIndex* offsetStack,
+                        uint32_t stackDepth);
+
+    inline bool recordBytecode(uint32_t offset, const OffsetAndDefIndex* offsetStack,
+                               uint32_t stackDepth);
 
     inline bool addJump(uint32_t offset, uint32_t* currentOffset,
-                        uint32_t stackDepth, const uint32_t* offsetStack);
+                        uint32_t stackDepth, const OffsetAndDefIndex* offsetStack,
+                        jsbytecode* pc, JumpKind kind);
 };
 
 }  // anonymous namespace
 
 uint32_t
-BytecodeParser::simulateOp(JSOp op, uint32_t offset, uint32_t* offsetStack, uint32_t stackDepth)
+BytecodeParser::simulateOp(JSOp op, uint32_t offset, OffsetAndDefIndex* offsetStack,
+                           uint32_t stackDepth)
 {
     uint32_t nuses = GetUseCount(script_, offset);
     uint32_t ndefs = GetDefCount(script_, offset);
 
     MOZ_ASSERT(stackDepth >= nuses);
     stackDepth -= nuses;
     MOZ_ASSERT(stackDepth + ndefs <= maximumStackDepth());
 
+#ifdef DEBUG
+    if (isStackDump) {
+        // Opcodes that modifies the object but keeps it on the stack while
+        // initialization should be listed here instead of switch below.
+        // For error message, they shouldn't be shown as the original object
+        // after adding properties.
+        // For stack dump, keeping the input is better.
+        switch (op) {
+          case JSOP_INITHIDDENPROP:
+          case JSOP_INITHIDDENPROP_GETTER:
+          case JSOP_INITHIDDENPROP_SETTER:
+          case JSOP_INITLOCKEDPROP:
+          case JSOP_INITPROP:
+          case JSOP_INITPROP_GETTER:
+          case JSOP_INITPROP_SETTER:
+          case JSOP_SETFUNNAME:
+            // Keep the second value.
+            MOZ_ASSERT(nuses == 2);
+            MOZ_ASSERT(ndefs == 1);
+            goto end;
+
+          case JSOP_INITELEM:
+          case JSOP_INITELEM_GETTER:
+          case JSOP_INITELEM_SETTER:
+          case JSOP_INITHIDDENELEM:
+          case JSOP_INITHIDDENELEM_GETTER:
+          case JSOP_INITHIDDENELEM_SETTER:
+            // Keep the third value.
+            MOZ_ASSERT(nuses == 3);
+            MOZ_ASSERT(ndefs == 1);
+            goto end;
+
+          default:
+            break;
+        }
+    }
+#endif /* DEBUG */
+
     // Mark the current offset as defining its values on the offset stack,
     // unless it just reshuffles the stack.  In that case we want to preserve
     // the opcode that generated the original value.
     switch (op) {
       default:
         for (uint32_t n = 0; n != ndefs; ++n)
-            offsetStack[stackDepth + n] = offset;
+            offsetStack[stackDepth + n].set(offset, n);
         break;
 
       case JSOP_NOP_DESTRUCTURING:
         // Poison the last offset to not obfuscate the error message.
-        offsetStack[stackDepth - 1] = SpecialOffsets::IgnoreOffset;
+        offsetStack[stackDepth - 1].setIgnored();
         break;
 
       case JSOP_CASE:
-        /* Keep the switch value. */
+        // Keep the switch value.
         MOZ_ASSERT(ndefs == 1);
         break;
 
       case JSOP_DUP:
         MOZ_ASSERT(ndefs == 2);
-        if (offsetStack)
-            offsetStack[stackDepth + 1] = offsetStack[stackDepth];
+        offsetStack[stackDepth + 1] = offsetStack[stackDepth];
         break;
 
       case JSOP_DUP2:
         MOZ_ASSERT(ndefs == 4);
-        if (offsetStack) {
-            offsetStack[stackDepth + 2] = offsetStack[stackDepth];
-            offsetStack[stackDepth + 3] = offsetStack[stackDepth + 1];
-        }
+        offsetStack[stackDepth + 2] = offsetStack[stackDepth];
+        offsetStack[stackDepth + 3] = offsetStack[stackDepth + 1];
         break;
 
       case JSOP_DUPAT: {
         MOZ_ASSERT(ndefs == 1);
         jsbytecode* pc = script_->offsetToPC(offset);
         unsigned n = GET_UINT24(pc);
         MOZ_ASSERT(n < stackDepth);
-        if (offsetStack)
-            offsetStack[stackDepth] = offsetStack[stackDepth - 1 - n];
+        offsetStack[stackDepth] = offsetStack[stackDepth - 1 - n];
         break;
       }
 
-      case JSOP_SWAP:
+      case JSOP_SWAP: {
         MOZ_ASSERT(ndefs == 2);
-        if (offsetStack) {
-            uint32_t tmp = offsetStack[stackDepth + 1];
-            offsetStack[stackDepth + 1] = offsetStack[stackDepth];
-            offsetStack[stackDepth] = tmp;
-        }
+        OffsetAndDefIndex tmp = offsetStack[stackDepth + 1];
+        offsetStack[stackDepth + 1] = offsetStack[stackDepth];
+        offsetStack[stackDepth] = tmp;
         break;
+      }
 
       case JSOP_PICK: {
         jsbytecode* pc = script_->offsetToPC(offset);
         unsigned n = GET_UINT8(pc);
         MOZ_ASSERT(ndefs == n + 1);
-        if (offsetStack) {
-            uint32_t top = stackDepth + n;
-            uint32_t tmp = offsetStack[stackDepth];
-            for (uint32_t i = stackDepth; i < top; i++)
-                offsetStack[i] = offsetStack[i + 1];
-            offsetStack[top] = tmp;
-        }
+        uint32_t top = stackDepth + n;
+        OffsetAndDefIndex tmp = offsetStack[stackDepth];
+        for (uint32_t i = stackDepth; i < top; i++)
+            offsetStack[i] = offsetStack[i + 1];
+        offsetStack[top] = tmp;
         break;
       }
 
       case JSOP_UNPICK: {
         jsbytecode* pc = script_->offsetToPC(offset);
         unsigned n = GET_UINT8(pc);
         MOZ_ASSERT(ndefs == n + 1);
-        if (offsetStack) {
-            uint32_t top = stackDepth + n;
-            uint32_t tmp = offsetStack[top];
-            for (uint32_t i = top; i > stackDepth; i--)
-                offsetStack[i] = offsetStack[i - 1];
-            offsetStack[stackDepth] = tmp;
-        }
+        uint32_t top = stackDepth + n;
+        OffsetAndDefIndex tmp = offsetStack[top];
+        for (uint32_t i = top; i > stackDepth; i--)
+            offsetStack[i] = offsetStack[i - 1];
+        offsetStack[stackDepth] = tmp;
         break;
       }
+
+      case JSOP_AND:
+      case JSOP_CHECKISOBJ:
+      case JSOP_CHECKISCALLABLE:
+      case JSOP_CHECKOBJCOERCIBLE:
+      case JSOP_CHECKTHIS:
+      case JSOP_CHECKTHISREINIT:
+      case JSOP_DEBUGCHECKSELFHOSTED:
+      case JSOP_INITGLEXICAL:
+      case JSOP_INITLEXICAL:
+      case JSOP_OR:
+      case JSOP_SETALIASEDVAR:
+      case JSOP_SETARG:
+      case JSOP_SETINTRINSIC:
+      case JSOP_SETLOCAL:
+      case JSOP_THROWSETALIASEDCONST:
+      case JSOP_THROWSETCALLEE:
+      case JSOP_THROWSETCONST:
+      case JSOP_INITALIASEDLEXICAL:
+      case JSOP_INITIALYIELD:
+        // Keep the top value.
+        MOZ_ASSERT(nuses == 1);
+        MOZ_ASSERT(ndefs == 1);
+        break;
+
+      case JSOP_INITHOMEOBJECT:
+        // Keep the top 2 values.
+        MOZ_ASSERT(nuses == 2);
+        MOZ_ASSERT(ndefs == 2);
+        break;
+
+      case JSOP_SETGNAME:
+      case JSOP_SETNAME:
+      case JSOP_SETPROP:
+      case JSOP_STRICTSETGNAME:
+      case JSOP_STRICTSETNAME:
+      case JSOP_STRICTSETPROP:
+        // Keep the top value, removing other 1 value.
+        MOZ_ASSERT(nuses == 2);
+        MOZ_ASSERT(ndefs == 1);
+        offsetStack[stackDepth] = offsetStack[stackDepth + 1];
+        break;
+
+      case JSOP_SETPROP_SUPER:
+      case JSOP_STRICTSETPROP_SUPER:
+        // Keep the top value, removing other 2 values.
+        MOZ_ASSERT(nuses == 3);
+        MOZ_ASSERT(ndefs == 1);
+        offsetStack[stackDepth] = offsetStack[stackDepth + 2];
+        break;
+
+      case JSOP_SETELEM_SUPER:
+      case JSOP_STRICTSETELEM_SUPER:
+        // Keep the top value, removing other 3 values.
+        MOZ_ASSERT(nuses == 4);
+        MOZ_ASSERT(ndefs == 1);
+        offsetStack[stackDepth] = offsetStack[stackDepth + 3];
+        break;
+
+      case JSOP_ISGENCLOSING:
+      case JSOP_ISNOITER:
+      case JSOP_MOREITER:
+      case JSOP_OPTIMIZE_SPREADCALL:
+        // Keep the top value and push one more value.
+        MOZ_ASSERT(nuses == 1);
+        MOZ_ASSERT(ndefs == 2);
+        offsetStack[stackDepth + 1].set(offset, 1);
+        break;
     }
+
+#ifdef DEBUG
+  end:
+#endif /* DEBUG */
+
     stackDepth += ndefs;
     return stackDepth;
 }
 
 bool
-BytecodeParser::recordBytecode(uint32_t offset, const uint32_t* offsetStack,
+BytecodeParser::recordBytecode(uint32_t offset, const OffsetAndDefIndex* offsetStack,
                                uint32_t stackDepth)
 {
     MOZ_ASSERT(offset < script_->length());
 
     Bytecode*& code = codeArray_[offset];
     if (!code) {
-        code = alloc().new_<Bytecode>();
+        code = alloc().new_<Bytecode>(alloc());
         if (!code ||
             !code->captureOffsetStack(alloc(), offsetStack, stackDepth))
         {
             reportOOM();
             return false;
         }
     } else {
         code->mergeOffsetStack(offsetStack, stackDepth);
     }
 
     return true;
 }
 
 bool
 BytecodeParser::addJump(uint32_t offset, uint32_t* currentOffset,
-                        uint32_t stackDepth, const uint32_t* offsetStack)
+                        uint32_t stackDepth, const OffsetAndDefIndex* offsetStack,
+                        jsbytecode* pc, JumpKind kind)
 {
     if (!recordBytecode(offset, offsetStack, stackDepth))
         return false;
 
+#ifdef DEBUG
+    if (isStackDump) {
+        if (!codeArray_[offset]->addJump(script_->pcToOffset(pc), kind)) {
+            reportOOM();
+            return false;
+        }
+    }
+#endif /* DEBUG */
+
     Bytecode*& code = codeArray_[offset];
     if (offset < *currentOffset && !code->parsed) {
         // Backedge in a while/for loop, whose body has not been parsed due
         // to a lack of fallthrough at the loop head. Roll back the offset
         // to analyze the body.
         *currentOffset = offset;
     }
 
@@ -545,24 +860,24 @@ BytecodeParser::parse()
     if (!codeArray_) {
         reportOOM();
         return false;
     }
 
     mozilla::PodZero(codeArray_, length);
 
     // Fill in stack depth and definitions at initial bytecode.
-    Bytecode* startcode = alloc().new_<Bytecode>();
+    Bytecode* startcode = alloc().new_<Bytecode>(alloc());
     if (!startcode) {
         reportOOM();
         return false;
     }
 
     // Fill in stack depth and definitions at initial bytecode.
-    uint32_t* offsetStack = alloc().newArray<uint32_t>(maximumStackDepth());
+    OffsetAndDefIndex* offsetStack = alloc().newArray<OffsetAndDefIndex>(maximumStackDepth());
     if (maximumStackDepth() && !offsetStack) {
         reportOOM();
         return false;
     }
 
     startcode->stackDepth = 0;
     codeArray_[0] = startcode;
 
@@ -600,33 +915,48 @@ BytecodeParser::parse()
             // No need to reparse.
             continue;
         }
 
         code->parsed = true;
 
         uint32_t stackDepth = simulateOp(op, offset, offsetStack, code->stackDepth);
 
+#ifdef DEBUG
+        if (isStackDump) {
+            if (!code->captureOffsetStackAfter(alloc(), offsetStack, stackDepth)) {
+                reportOOM();
+                return false;
+            }
+        }
+#endif /* DEBUG */
+
         switch (op) {
           case JSOP_TABLESWITCH: {
             uint32_t defaultOffset = offset + GET_JUMP_OFFSET(pc);
             jsbytecode* pc2 = pc + JUMP_OFFSET_LEN;
             int32_t low = GET_JUMP_OFFSET(pc2);
             pc2 += JUMP_OFFSET_LEN;
             int32_t high = GET_JUMP_OFFSET(pc2);
             pc2 += JUMP_OFFSET_LEN;
 
-            if (!addJump(defaultOffset, &nextOffset, stackDepth, offsetStack))
+            if (!addJump(defaultOffset, &nextOffset, stackDepth, offsetStack,
+                         pc, JumpKind::SwitchDefault))
+            {
                 return false;
+            }
 
             for (int32_t i = low; i <= high; i++) {
                 uint32_t targetOffset = offset + GET_JUMP_OFFSET(pc2);
                 if (targetOffset != offset) {
-                    if (!addJump(targetOffset, &nextOffset, stackDepth, offsetStack))
+                    if (!addJump(targetOffset, &nextOffset, stackDepth, offsetStack,
+                                 pc, JumpKind::SwitchCase))
+                    {
                         return false;
+                    }
                 }
                 pc2 += JUMP_OFFSET_LEN;
             }
             break;
           }
 
           case JSOP_TRY: {
             // Everything between a try and corresponding catch or finally is conditional.
@@ -634,19 +964,28 @@ BytecodeParser::parse()
             // exception but is not caught by a later handler in the same function:
             // no more code will execute, and it does not matter what is defined.
             JSTryNote* tn = script_->trynotes()->vector;
             JSTryNote* tnlimit = tn + script_->trynotes()->length;
             for (; tn < tnlimit; tn++) {
                 uint32_t startOffset = script_->mainOffset() + tn->start;
                 if (startOffset == offset + 1) {
                     uint32_t catchOffset = startOffset + tn->length;
-                    if (tn->kind == JSTRY_CATCH || tn->kind == JSTRY_FINALLY) {
-                        if (!addJump(catchOffset, &nextOffset, stackDepth, offsetStack))
+                    if (tn->kind == JSTRY_CATCH) {
+                        if (!addJump(catchOffset, &nextOffset, stackDepth, offsetStack,
+                                     pc, JumpKind::TryCatch))
+                        {
                             return false;
+                        }
+                    } else if (tn->kind == JSTRY_FINALLY) {
+                        if (!addJump(catchOffset, &nextOffset, stackDepth, offsetStack,
+                                     pc, JumpKind::TryFinally))
+                        {
+                            return false;
+                        }
                     }
                 }
             }
             break;
           }
 
           default:
             break;
@@ -655,17 +994,18 @@ BytecodeParser::parse()
         // Check basic jump opcodes, which may or may not have a fallthrough.
         if (IsJumpOpcode(op)) {
             // Case instructions do not push the lvalue back when branching.
             uint32_t newStackDepth = stackDepth;
             if (op == JSOP_CASE)
                 newStackDepth--;
 
             uint32_t targetOffset = offset + GET_JUMP_OFFSET(pc);
-            if (!addJump(targetOffset, &nextOffset, newStackDepth, offsetStack))
+            if (!addJump(targetOffset, &nextOffset, newStackDepth, offsetStack,
+                         pc, JumpKind::Simple))
                 return false;
         }
 
         // Handle any fallthrough from this opcode.
         if (BytecodeFallsThrough(op)) {
             if (!recordBytecode(successorOffset, offsetStack, stackDepth))
                 return false;
         }
@@ -686,32 +1026,36 @@ js::ReconstructStackDepth(JSContext* cx,
     *reachablePC = parser.isReachable(pc);
 
     if (*reachablePC)
         *depth = parser.stackDepthAtPC(pc);
 
     return true;
 }
 
+static unsigned
+Disassemble1(JSContext* cx, HandleScript script, jsbytecode* pc,
+             unsigned loc, bool lines, BytecodeParser* parser, Sprinter* sp);
+
 /*
  * If pc != nullptr, include a prefix indicating whether the PC is at the
  * current line. If showAll is true, include the source note type and the
  * entry stack depth.
  */
 static MOZ_MUST_USE bool
 DisassembleAtPC(JSContext* cx, JSScript* scriptArg, bool lines,
                 jsbytecode* pc, bool showAll, Sprinter* sp)
 {
     RootedScript script(cx, scriptArg);
     BytecodeParser parser(cx, script);
+    parser.setStackDump();
+    if (!parser.parse())
+        return false;
 
     if (showAll) {
-        if (!parser.parse())
-            return false;
-
         if (!sp->jsprintf("%s:%u\n", script->filename(), unsigned(script->lineno())))
             return false;
     }
 
     if (pc != nullptr) {
         if (sp->put("    ") < 0)
             return false;
     }
@@ -776,17 +1120,18 @@ DisassembleAtPC(JSContext* cx, JSScript*
             if (parser.isReachable(next)) {
                 if (!sp->jsprintf("%05u ", parser.stackDepthAtPC(next)))
                     return false;
             } else {
                 if (sp->put("      ") < 0)
                     return false;
             }
         }
-        unsigned len = Disassemble1(cx, script, next, script->pcToOffset(next), lines, sp);
+        unsigned len = Disassemble1(cx, script, next, script->pcToOffset(next), lines,
+                                    &parser, sp);
         if (!len)
             return false;
 
         next += len;
     }
 
     return true;
 }
@@ -945,20 +1290,127 @@ ToDisassemblySource(JSContext* cx, Handl
         ReportOutOfMemory(cx);
         return false;
     }
 
     bytes->initBytes(source);
     return true;
 }
 
-unsigned
-js::Disassemble1(JSContext* cx, HandleScript script, jsbytecode* pc,
-                 unsigned loc, bool lines, Sprinter* sp)
+static bool
+DumpJumpOrigins(JSContext* cx, HandleScript script, jsbytecode* pc,
+                BytecodeParser* parser, Sprinter* sp)
 {
+    bool called = false;
+    auto callback = [&script, &sp, &called](jsbytecode* pc, BytecodeParser::JumpKind kind) {
+        if (!called) {
+            called = true;
+            if (!sp->put("\n# "))
+                return false;
+        } else {
+            if (!sp->put(", "))
+                return false;
+        }
+
+        switch (kind) {
+          case BytecodeParser::JumpKind::Simple:
+          break;
+
+          case BytecodeParser::JumpKind::SwitchCase:
+          if (!sp->put("switch-case "))
+              return false;
+          break;
+
+          case BytecodeParser::JumpKind::SwitchDefault:
+          if (!sp->put("swtich-default "))
+              return false;
+          break;
+
+          case BytecodeParser::JumpKind::TryCatch:
+          if (!sp->put("try-catch "))
+              return false;
+          break;
+
+          case BytecodeParser::JumpKind::TryFinally:
+          if (!sp->put("try-finally "))
+              return false;
+          break;
+        }
+
+        if (!sp->jsprintf("from %s @ %05u", CodeName[*pc], unsigned(script->pcToOffset(pc))))
+            return false;
+
+        return true;
+    };
+    if (!parser->forEachJumpOrigins(pc, callback))
+        return false;
+    if (called) {
+        if (!sp->put("\n"))
+            return false;
+    }
+
+    return true;
+}
+
+static bool
+DecompileAtPCForStackDump(JSContext* cx, HandleScript script,
+                          const OffsetAndDefIndex& offsetAndDefIndex, Sprinter* sp);
+
+static unsigned
+Disassemble1(JSContext* cx, HandleScript script, jsbytecode* pc,
+             unsigned loc, bool lines, BytecodeParser* parser, Sprinter* sp)
+{
+    if (parser && parser->isReachable(pc)) {
+        if (!DumpJumpOrigins(cx, script, pc, parser, sp))
+            return 0;
+    }
+
+    size_t before = sp->stringEnd() - sp->string();
+    bool stackDumped = false;
+    auto dumpStack = [&cx, &script, &pc, &parser, &sp, &before, &stackDumped]() {
+        if (!parser)
+            return true;
+        if (stackDumped)
+            return true;
+        stackDumped = true;
+
+        size_t after = sp->stringEnd() - sp->string();
+        MOZ_ASSERT(after >= before);
+
+        static const size_t stack_column = 40;
+        for (size_t i = after - before; i < stack_column - 1; i++)
+            sp->put(" ");
+
+        sp->put(" # ");
+
+        if (!parser->isReachable(pc)) {
+            if (sp->put("!!! UNREACHABLE !!!") < 0)
+                return false;
+        } else {
+            uint32_t depth = parser->stackDepthAfterPC(pc);
+
+            for (uint32_t i = 0; i < depth; i++) {
+                if (i) {
+                    if (sp->put(" ") < 0)
+                        return false;
+                }
+
+                const OffsetAndDefIndex& offsetAndDefIndex
+                    = parser->offsetForStackOperandAfterPC(script->pcToOffset(pc), i);
+                // This will decompile the stack for the same PC many times.
+                // We'll avoid optimizing it since this is a testing function
+                // and it won't be worth managing cached expression here.
+                if (!DecompileAtPCForStackDump(cx, script, offsetAndDefIndex, sp))
+                    return false;
+            }
+        }
+
+        return true;
+    };
+
     JSOp op = (JSOp)*pc;
     if (op >= JSOP_LIMIT) {
         char numBuf1[12], numBuf2[12];
         SprintfLiteral(numBuf1, "%d", op);
         SprintfLiteral(numBuf2, "%d", JSOP_LIMIT);
         JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_BYTECODE_TOO_BIG,
                                   numBuf1, numBuf2);
         return 0;
@@ -1087,16 +1539,21 @@ js::Disassemble1(JSContext* cx, HandleSc
         ptrdiff_t off = GET_JUMP_OFFSET(pc);
         jsbytecode* pc2 = pc + JUMP_OFFSET_LEN;
         low = GET_JUMP_OFFSET(pc2);
         pc2 += JUMP_OFFSET_LEN;
         high = GET_JUMP_OFFSET(pc2);
         pc2 += JUMP_OFFSET_LEN;
         if (!sp->jsprintf(" defaultOffset %d low %d high %d", int(off), low, high))
             return 0;
+
+        // Display stack dump before diplaying the offsets for each case.
+        if (!dumpStack())
+            return 0;
+
         for (i = low; i <= high; i++) {
             off = GET_JUMP_OFFSET(pc2);
             if (!sp->jsprintf("\n\t%d: %d", i, int(off)))
                 return 0;
             pc2 += JUMP_OFFSET_LEN;
         }
         len = 1 + pc2 - pc;
         break;
@@ -1144,20 +1601,31 @@ js::Disassemble1(JSContext* cx, HandleSc
 
       default: {
         char numBuf[12];
         SprintfLiteral(numBuf, "%x", cs->format);
         JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_UNKNOWN_FORMAT, numBuf);
         return 0;
       }
     }
+
+    if (!dumpStack())
+        return 0;
+
     sp->put("\n");
     return len;
 }
 
+unsigned
+js::Disassemble1(JSContext* cx, JS::Handle<JSScript*> script, jsbytecode* pc, unsigned loc,
+                 bool lines, Sprinter* sp)
+{
+    return Disassemble1(cx, script, pc, loc, lines, nullptr, sp);
+}
+
 #endif /* DEBUG */
 
 namespace {
 /*
  * The expression decompiler is invoked by error handling code to produce a
  * string representation of the erroring expression. As it's only a debugging
  * tool, it only supports basic expressions. For anything complicated, it simply
  * puts "(intermediate value)" into the error result.
@@ -1189,86 +1657,115 @@ namespace {
  */
 struct ExpressionDecompiler
 {
     JSContext* cx;
     RootedScript script;
     BytecodeParser parser;
     Sprinter sprinter;
 
+#ifdef DEBUG
+    // Dedicated mode for stack dump.
+    // Generates an expression for stack dump, including internal state,
+    // and also disables special handling for self-hosted code.
+    bool isStackDump;
+#endif /* DEBUG */
+
     ExpressionDecompiler(JSContext* cx, JSScript* script)
         : cx(cx),
           script(cx, script),
           parser(cx, script),
           sprinter(cx)
+#ifdef DEBUG
+          ,
+          isStackDump(false)
+#endif /* DEBUG */
     {}
     bool init();
     bool decompilePCForStackOperand(jsbytecode* pc, int i);
-    bool decompilePC(jsbytecode* pc);
+    bool decompilePC(jsbytecode* pc, uint8_t defIndex);
+    bool decompilePC(const OffsetAndDefIndex& offsetAndDefIndex);
     JSAtom* getArg(unsigned slot);
     JSAtom* loadAtom(jsbytecode* pc);
     bool quote(JSString* s, uint32_t quote);
     bool write(const char* s);
     bool write(JSString* str);
     bool getOutput(char** out);
+#ifdef DEBUG
+    void setStackDump() {
+        isStackDump = true;
+        parser.setStackDump();
+    }
+#endif /* DEBUG */
 };
 
 bool
 ExpressionDecompiler::decompilePCForStackOperand(jsbytecode* pc, int i)
 {
-    pc = parser.pcForStackOperand(pc, i);
-    if (!pc)
-        return write("(intermediate value)");
-    return decompilePC(pc);
+    return decompilePC(parser.offsetForStackOperand(script->pcToOffset(pc), i));
 }
 
 bool
-ExpressionDecompiler::decompilePC(jsbytecode* pc)
+ExpressionDecompiler::decompilePC(jsbytecode* pc, uint8_t defIndex)
 {
     MOZ_ASSERT(script->containsPC(pc));
 
     JSOp op = (JSOp)*pc;
 
     if (const char* token = CodeToken[op]) {
+        MOZ_ASSERT(defIndex == 0);
+        MOZ_ASSERT(CodeSpec[op].ndefs == 1);
+
         // Handle simple cases of binary and unary operators.
         switch (CodeSpec[op].nuses) {
           case 2: {
             jssrcnote* sn = GetSrcNote(cx, script, pc);
             if (!sn || SN_TYPE(sn) != SRC_ASSIGNOP)
                 return write("(") &&
                        decompilePCForStackOperand(pc, -2) &&
                        write(" ") &&
                        write(token) &&
                        write(" ") &&
                        decompilePCForStackOperand(pc, -1) &&
                        write(")");
             break;
           }
           case 1:
-            return write(token) &&
-                   write("(") &&
+            return write("(") &&
+                   write(token) &&
                    decompilePCForStackOperand(pc, -1) &&
                    write(")");
           default:
             break;
         }
     }
 
     switch (op) {
+      case JSOP_DELNAME:
+        return write("(delete ") &&
+               write(loadAtom(pc)) &&
+               write(")");
+
       case JSOP_GETGNAME:
       case JSOP_GETNAME:
       case JSOP_GETINTRINSIC:
         return write(loadAtom(pc));
       case JSOP_GETARG: {
         unsigned slot = GET_ARGNO(pc);
 
         // For self-hosted scripts that are called from non-self-hosted code,
         // decompiling the parameter name in the self-hosted script is
         // unhelpful. Decompile the argument name instead.
-        if (script->selfHosted()) {
+        if (script->selfHosted()
+#ifdef DEBUG
+            // For stack dump, argument name is not necessary.
+            && !isStackDump
+#endif /* DEBUG */
+            )
+        {
             char* result;
             if (!DecompileArgumentFromStack(cx, slot, &result))
                 return false;
 
             // Note that decompiling the argument in the parent frame might
             // not succeed.
             if (result) {
 		bool ok = write(result);
@@ -1287,29 +1784,31 @@ ExpressionDecompiler::decompilePC(jsbyte
         MOZ_ASSERT(atom);
         return write(atom);
       }
       case JSOP_GETALIASEDVAR: {
         JSAtom* atom = EnvironmentCoordinateName(cx->caches().envCoordinateNameCache, script, pc);
         MOZ_ASSERT(atom);
         return write(atom);
       }
+
+      case JSOP_DELPROP:
+      case JSOP_STRICTDELPROP:
       case JSOP_LENGTH:
       case JSOP_GETPROP:
+      case JSOP_GETBOUNDNAME:
       case JSOP_CALLPROP: {
+        bool hasDelete = op == JSOP_DELPROP || op == JSOP_STRICTDELPROP;
         RootedAtom prop(cx, (op == JSOP_LENGTH) ? cx->names().length : loadAtom(pc));
-        if (!decompilePCForStackOperand(pc, -1))
-            return false;
-        if (IsIdentifier(prop)) {
-            return write(".") &&
-                   quote(prop, '\0');
-        }
-        return write("[") &&
-               quote(prop, '\'') &&
-               write("]");
+        return (hasDelete ? write("(delete ") : true) &&
+               decompilePCForStackOperand(pc, -1) &&
+               (IsIdentifier(prop)
+                ? write(".") && quote(prop, '\0')
+                : write("[") && quote(prop, '\'') && write("]")) &&
+               (hasDelete ? write(")") : true);
       }
       case JSOP_GETPROP_SUPER:
       {
         RootedAtom prop(cx, loadAtom(pc));
         return write("super.") &&
                quote(prop, '\0');
       }
       case JSOP_SETELEM:
@@ -1317,22 +1816,30 @@ ExpressionDecompiler::decompilePC(jsbyte
         // NOTE: We don't show the right hand side of the operation because
         // it's used in error messages like: "a[0] is not readable".
         //
         // We could though.
         return decompilePCForStackOperand(pc, -3) &&
                write("[") &&
                decompilePCForStackOperand(pc, -2) &&
                write("]");
+
+      case JSOP_DELELEM:
+      case JSOP_STRICTDELELEM:
       case JSOP_GETELEM:
-      case JSOP_CALLELEM:
-        return decompilePCForStackOperand(pc, -2) &&
+      case JSOP_CALLELEM: {
+        bool hasDelete = (op == JSOP_DELELEM || op == JSOP_STRICTDELELEM);
+        return (hasDelete ? write("(delete ") : true) &&
+               decompilePCForStackOperand(pc, -2) &&
                write("[") &&
                decompilePCForStackOperand(pc, -1) &&
-               write("]");
+               write("]") &&
+               (hasDelete ? write(")") : true);
+      }
+
       case JSOP_GETELEM_SUPER:
         return write("super[") &&
                decompilePCForStackOperand(pc, -3) &&
                write("]");
       case JSOP_NULL:
         return write(js_null_str);
       case JSOP_TRUE:
         return write(js_true_str);
@@ -1360,16 +1867,17 @@ ExpressionDecompiler::decompilePC(jsbyte
         // |this| could convert to a very long object initialiser, so cite it by
         // its keyword name.
         return write(js_this_str);
       case JSOP_NEWTARGET:
         return write("new.target");
       case JSOP_CALL:
       case JSOP_CALLITER:
       case JSOP_FUNCALL:
+      case JSOP_FUNAPPLY:
         return decompilePCForStackOperand(pc, -int32_t(GET_ARGC(pc) + 2)) &&
                write("(...)");
       case JSOP_SPREADCALL:
         return decompilePCForStackOperand(pc, -3) &&
                write("(...)");
       case JSOP_NEWARRAY:
         return write("[]");
       case JSOP_REGEXP:
@@ -1377,27 +1885,242 @@ ExpressionDecompiler::decompilePC(jsbyte
       case JSOP_NEWARRAY_COPYONWRITE: {
         JSObject* obj = script->getObject(GET_UINT32_INDEX(pc));
         RootedValue objv(cx, ObjectValue(*obj));
         JSString* str = ValueToSource(cx, objv);
         if (!str)
             return false;
         return write(str);
       }
-      case JSOP_CHECKISOBJ:
-        return decompilePCForStackOperand(pc, -1);
       case JSOP_VOID:
-        return write("void ") && decompilePCForStackOperand(pc, -1);
+        return write("(void ") &&
+               decompilePCForStackOperand(pc, -1) &&
+               write(")");
+
+      case JSOP_SUPERCALL:
+      case JSOP_SPREADSUPERCALL:
+        return write("super(...)");
+      case JSOP_SUPERFUN:
+        return write("super");
+
+      case JSOP_EVAL:
+      case JSOP_SPREADEVAL:
+      case JSOP_STRICTEVAL:
+      case JSOP_STRICTSPREADEVAL:
+        return write("eval(...)");
+
+      case JSOP_NEW:
+        return write("(new ") &&
+               decompilePCForStackOperand(pc, -int32_t(GET_ARGC(pc) + 3)) &&
+               write("(...))");
+
+      case JSOP_SPREADNEW:
+        return write("(new ") &&
+               decompilePCForStackOperand(pc, -4) &&
+               write("(...))");
+
+      case JSOP_TYPEOF:
+      case JSOP_TYPEOFEXPR:
+        return write("(typeof ") &&
+               decompilePCForStackOperand(pc, -1) &&
+               write(")");
+
+      case JSOP_INITELEM_ARRAY:
+        return write("[...]");
+
+      case JSOP_INITELEM_INC:
+        if (defIndex == 0)
+            return write("[...]");
+        MOZ_ASSERT(defIndex == 1);
+#ifdef DEBUG
+        // INDEX won't be be exposed to error message.
+        if (isStackDump)
+            return write("INDEX");
+#endif
+        break;
+
       default:
         break;
     }
+
+#ifdef DEBUG
+    if (isStackDump) {
+        // Special decompilation for stack dump.
+        switch (op) {
+          case JSOP_ARGUMENTS:
+            return write("arguments");
+
+          case JSOP_BINDGNAME:
+            return write("GLOBAL");
+
+          case JSOP_BINDNAME:
+          case JSOP_BINDVAR:
+            return write("ENV");
+
+          case JSOP_CALLEE:
+            return write("CALLEE");
+
+          case JSOP_CALLSITEOBJ:
+            return write("OBJ");
+
+          case JSOP_CLASSCONSTRUCTOR:
+          case JSOP_DERIVEDCONSTRUCTOR:
+            return write("CONSTRUCTOR");
+
+          case JSOP_CLASSHERITAGE:
+            if (defIndex == 0)
+                return write("FUNCPROTO");
+            MOZ_ASSERT(defIndex == 1);
+            return write("OBJPROTO");
+
+          case JSOP_DOUBLE:
+            return sprinter.printf("%lf", script->getConst(GET_UINT32_INDEX(pc)).toDouble()) >= 0;
+
+          case JSOP_EXCEPTION:
+            return write("EXCEPTION");
+
+          case JSOP_FINALLY:
+            if (defIndex == 0)
+                return write("THROWING");
+            MOZ_ASSERT(defIndex == 1);
+            return write("PC");
+
+          case JSOP_GIMPLICITTHIS:
+          case JSOP_FUNCTIONTHIS:
+          case JSOP_IMPLICITTHIS:
+            return write("THIS");
+
+          case JSOP_FUNWITHPROTO:
+            return write("FUN");
+
+          case JSOP_GENERATOR:
+            return write("GENERATOR");
+
+          case JSOP_GETIMPORT:
+            return write("VAL");
+
+          case JSOP_GETRVAL:
+            return write("RVAL");
+
+          case JSOP_HOLE:
+            return write("HOLE");
+
+          case JSOP_ISGENCLOSING:
+            // For stack dump, defIndex == 0 is not used.
+            MOZ_ASSERT(defIndex == 1);
+            return write("ISGENCLOSING");
+
+          case JSOP_ISNOITER:
+            // For stack dump, defIndex == 0 is not used.
+            MOZ_ASSERT(defIndex == 1);
+            return write("ISNOITER");
+
+          case JSOP_IS_CONSTRUCTING:
+            return write("JS_IS_CONSTRUCTING");
+
+          case JSOP_ITER:
+            return write("ITER");
+
+          case JSOP_LAMBDA:
+          case JSOP_LAMBDA_ARROW:
+          case JSOP_TOASYNC:
+            return write("FUN");
+
+          case JSOP_MOREITER:
+            // For stack dump, defIndex == 0 is not used.
+            MOZ_ASSERT(defIndex == 1);
+            return write("MOREITER");
+
+          case JSOP_MUTATEPROTO:
+            return write("SUCCEEDED");
+
+          case JSOP_NEWINIT:
+          case JSOP_NEWOBJECT:
+          case JSOP_OBJWITHPROTO:
+            return write("OBJ");
+
+          case JSOP_OPTIMIZE_SPREADCALL:
+            // For stack dump, defIndex == 0 is not used.
+            MOZ_ASSERT(defIndex == 1);
+            return write("OPTIMIZED");
+
+          case JSOP_REST:
+            return write("REST");
+
+          case JSOP_RESUME:
+            return write("RVAL");
+
+          case JSOP_SPREADCALLARRAY:
+            return write("[]");
+
+          case JSOP_SUPERBASE:
+            return write("HOMEOBJECTPROTO");
+
+          case JSOP_TOID:
+            return write("TOID(") &&
+                   decompilePCForStackOperand(pc, -1) &&
+                   write(")");
+          case JSOP_TOSTRING:
+            return write("TOSTRING(") &&
+                   decompilePCForStackOperand(pc, -1) &&
+                   write(")");
+
+          case JSOP_UNINITIALIZED:
+            return write("UNINITIALIZED");
+
+          case JSOP_YIELD:
+            // Printing "yield SOMETHING" is confusing since the operand doesn't
+            // match to the syntax, since the stack operand for "yield 10" is
+            // the result object, not 10.
+            return write("RVAL");
+
+          default:
+            break;
+        }
+        return write("<unknown>");
+    }
+#endif /* DEBUG */
+
     return write("(intermediate value)");
 }
 
 bool
+ExpressionDecompiler::decompilePC(const OffsetAndDefIndex& offsetAndDefIndex)
+{
+    if (offsetAndDefIndex.isSpecial()) {
+#ifdef DEBUG
+        if (isStackDump) {
+            if (offsetAndDefIndex.isMerged()) {
+                if (!write("merged<"))
+                    return false;
+            } else if (offsetAndDefIndex.isIgnored()) {
+                if (!write("ignored<"))
+                    return false;
+            }
+
+            if (!decompilePC(script->offsetToPC(offsetAndDefIndex.specialOffset()),
+                             offsetAndDefIndex.specialDefIndex()))
+            {
+                return false;
+            }
+
+            if (!write(">"))
+                return false;
+
+            return true;
+        }
+#endif /* DEBUG */
+        return write("(intermediate value)");
+    }
+
+    return decompilePC(script->offsetToPC(offsetAndDefIndex.offset()),
+                       offsetAndDefIndex.defIndex());
+}
+
+bool
 ExpressionDecompiler::init()
 {
     assertSameCompartment(cx, script);
 
     if (!sprinter.init())
         return false;
 
     if (!parser.parse())
@@ -1461,22 +2184,47 @@ ExpressionDecompiler::getOutput(char** r
         return false;
     js_memcpy(*res, sprinter.stringAt(0), len);
     (*res)[len] = 0;
     return true;
 }
 
 }  // anonymous namespace
 
+#ifdef DEBUG
+static bool
+DecompileAtPCForStackDump(JSContext* cx, HandleScript script,
+                          const OffsetAndDefIndex& offsetAndDefIndex, Sprinter* sp)
+{
+    ExpressionDecompiler ed(cx, script);
+    ed.setStackDump();
+    if (!ed.init())
+        return false;
+
+    if (!ed.decompilePC(offsetAndDefIndex))
+        return false;
+
+    char* result;
+    if (!ed.getOutput(&result))
+        return false;
+
+    if (!sp->put(result))
+        return false;
+
+    return true;
+}
+#endif /* DEBUG */
+
 static bool
 FindStartPC(JSContext* cx, const FrameIter& iter, int spindex, int skipStackHits, const Value& v,
-            jsbytecode** valuepc)
+            jsbytecode** valuepc, uint8_t* defIndex)
 {
     jsbytecode* current = *valuepc;
     *valuepc = nullptr;
+    *defIndex = 0;
 
     if (spindex == JSDVG_IGNORE_STACK)
         return true;
 
     /*
      * FIXME: Fall back if iter.isIon(), since the stack snapshot may be for the
      * previous pc (see bug 831120).
      */
@@ -1506,25 +2254,21 @@ FindStartPC(JSContext* cx, const FrameIt
         int stackHits = 0;
         Value s;
         do {
             if (!index)
                 return true;
             s = iter.frameSlotValue(--index);
         } while (s != v || stackHits++ != skipStackHits);
 
-        // If the current PC has fewer values on the stack than the index we are
-        // looking for, the blamed value must be one pushed by the current
-        // bytecode, so restore *valuepc.
-        if (index < size_t(parser.stackDepthAtPC(current)))
-            *valuepc = parser.pcForStackOperand(current, index);
-        else
-            *valuepc = current;
+        MOZ_ASSERT(index < size_t(parser.stackDepthAtPC(current)));
+
+        *valuepc = parser.pcForStackOperand(current, index, defIndex);
     } else {
-        *valuepc = parser.pcForStackOperand(current, spindex);
+        *valuepc = parser.pcForStackOperand(current, spindex, defIndex);
     }
     return true;
 }
 
 static bool
 DecompileExpressionFromStack(JSContext* cx, int spindex, int skipStackHits, HandleValue v, char** res)
 {
     MOZ_ASSERT(spindex < 0 ||
@@ -1551,25 +2295,26 @@ DecompileExpressionFromStack(JSContext* 
     jsbytecode* valuepc = frameIter.pc();
 
     MOZ_ASSERT(script->containsPC(valuepc));
 
     // Give up if in prologue.
     if (valuepc < script->main())
         return true;
 
-    if (!FindStartPC(cx, frameIter, spindex, skipStackHits, v, &valuepc))
+    uint8_t defIndex;
+    if (!FindStartPC(cx, frameIter, spindex, skipStackHits, v, &valuepc, &defIndex))
         return false;
     if (!valuepc)
         return true;
 
     ExpressionDecompiler ed(cx, script);
     if (!ed.init())
         return false;
-    if (!ed.decompilePC(valuepc))
+    if (!ed.decompilePC(valuepc, defIndex))
         return false;
 
     return ed.getOutput(res);
 }
 
 UniqueChars
 js::DecompileValueGenerator(JSContext* cx, int spindex, HandleValue v,
                             HandleString fallbackArg, int skipStackHits)
@@ -2008,17 +2753,18 @@ GetPCCountJSON(JSContext* cx, const Scri
             if (!buf.append('\"'))
                 return false;
         }
 
         {
             ExpressionDecompiler ed(cx, script);
             if (!ed.init())
                 return false;
-            if (!ed.decompilePC(pc))
+            // defIndex passed here is not used.
+            if (!ed.decompilePC(pc, /* defIndex = */ 0))
                 return false;
             char* text;
             if (!ed.getOutput(&text))
                 return false;
             JSString* str = JS_NewStringCopyZ(cx, text);
             js_free(text);
             if (!AppendJSONProperty(buf, "text"))
                 return false;
--- a/js/src/tests/js1_8/regress/regress-469625-03.js
+++ b/js/src/tests/js1_8/regress/regress-469625-03.js
@@ -21,17 +21,17 @@ function test()
   enterFunc ('test');
   printBugNumber(BUGNUMBER);
   printStatus (summary);
  
   function f(x) {
     var [a, b, [c0, c1]] = [x, x, x];
   }
 
-  expect = `TypeError: (intermediate value)[Symbol.iterator](...).next(...).value is null`;
+  expect = `TypeError: [...][Symbol.iterator](...).next(...).value is null`;
   actual = 'No Error';
   try
   {
     f(null);
   }
   catch(ex)
   {
     actual = ex + '';
--- a/js/src/vm/HelperThreads.cpp
+++ b/js/src/vm/HelperThreads.cpp
@@ -5,17 +5,16 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "vm/HelperThreads.h"
 
 #include "mozilla/DebugOnly.h"
 #include "mozilla/Unused.h"
 
 #include "jsnativestack.h"
-#include "jsnum.h" // For FIX_FPU()
 
 #include "builtin/Promise.h"
 #include "frontend/BytecodeCompiler.h"
 #include "gc/GCInternals.h"
 #include "jit/IonBuilder.h"
 #include "threading/CpuCount.h"
 #include "vm/Debugger.h"
 #include "vm/SharedImmutableStringsCache.h"
@@ -1444,22 +1443,16 @@ HelperThread::destroy()
 }
 
 /* static */
 void
 HelperThread::ThreadMain(void* arg)
 {
     ThisThread::SetName("JS Helper");
 
-    //See bug 1104658.
-    //Set the FPU control word to be the same as the active thread's, or math
-    //computations on this thread may use incorrect precision rules during
-    //Ion compilation.
-    FIX_FPU();
-
     static_cast<HelperThread*>(arg)->threadLoop();
     Mutex::ShutDown();
 }
 
 void
 HelperThread::handleWasmWorkload(AutoLockHelperThreadState& locked)
 {
     MOZ_ASSERT(HelperThreadState().canStartWasmCompile(locked));
--- a/js/src/vm/Opcodes.h
+++ b/js/src/vm/Opcodes.h
@@ -2209,17 +2209,17 @@ 1234567890123456789012345678901234567890
     \
     /*
      * Checks that the top value on the stack is callable, and throws a
      * TypeError if not. The operand 'kind' is used only to generate an
      * appropriate error message.
      *   Category: Statements
      *   Type: Function
      *   Operands: uint8_t kind
-     *   Stack: result => result, callable
+     *   Stack: obj => obj
      */ \
     macro(JSOP_CHECKISCALLABLE, 219, "checkiscallable", NULL, 2, 1, 1, JOF_UINT8) \
     macro(JSOP_UNUSED220,     220,"unused220",     NULL,  1,  0,  0,  JOF_BYTE) \
     macro(JSOP_UNUSED221,     221,"unused221",     NULL,  1,  0,  0,  JOF_BYTE) \
     macro(JSOP_UNUSED222,     222,"unused222",     NULL,  1,  0,  0,  JOF_BYTE) \
     macro(JSOP_UNUSED223,     223,"unused223",     NULL,  1,  0,  0,  JOF_BYTE) \
     \
     /*
--- a/js/xpconnect/wrappers/AccessCheck.cpp
+++ b/js/xpconnect/wrappers/AccessCheck.cpp
@@ -84,19 +84,18 @@ AccessCheck::wrapperSubsumes(JSObject* w
     JSObject* wrapped = js::UncheckedUnwrap(wrapper);
     return AccessCheck::subsumes(js::GetObjectCompartment(wrapper),
                                  js::GetObjectCompartment(wrapped));
 }
 
 bool
 AccessCheck::isChrome(JSCompartment* compartment)
 {
-    bool privileged;
     nsIPrincipal* principal = GetCompartmentPrincipal(compartment);
-    return NS_SUCCEEDED(nsXPConnect::SecurityManager()->IsSystemPrincipal(principal, &privileged)) && privileged;
+    return nsXPConnect::SystemPrincipal() == principal;
 }
 
 bool
 AccessCheck::isChrome(JSObject* obj)
 {
     return isChrome(js::GetObjectCompartment(obj));
 }
 
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -2798,19 +2798,16 @@ pref("editor.positioning.offset",       
 
 pref("dom.use_watchdog", true);
 pref("dom.max_chrome_script_run_time", 20);
 pref("dom.max_script_run_time", 10);
 
 // Stop all scripts in a compartment when the "stop script" dialog is used.
 pref("dom.global_stop_script", true);
 
-// If true, ArchiveReader will be enabled
-pref("dom.archivereader.enabled", false);
-
 // Time (milliseconds) between throttled idle callbacks.
 pref("dom.idle_period.throttled_length", 10000);
 
 // The amount of idle time (milliseconds) reserved for a long idle period
 pref("idle_queue.long_period", 50);
 
 // The minimum amount of time (milliseconds) required for an idle
 // period to be scheduled on the main thread. N.B. that
--- a/netwerk/cookie/nsCookieService.cpp
+++ b/netwerk/cookie/nsCookieService.cpp
@@ -4619,27 +4619,19 @@ nsCookieService::FindStaleCookie(nsCooki
   if (aSource) {
     GetBaseDomain(aSource, baseDomain, requireHostMatch);
     aSource->GetAsciiHost(sourceHost);
     sourcePath = GetPathFromURI(aSource);
   }
 
   const nsCookieEntry::ArrayType &cookies = aEntry->GetCookies();
 
-  int64_t oldestNonMatchingSessionCookieTime = 0;
-  nsListIter oldestNonMatchingSessionCookie;
-  oldestNonMatchingSessionCookie.entry = nullptr;
-
-  int64_t oldestSessionCookieTime = 0;
-  nsListIter oldestSessionCookie;
-  oldestSessionCookie.entry = nullptr;
-
-  int64_t oldestNonMatchingNonSessionCookieTime = 0;
-  nsListIter oldestNonMatchingNonSessionCookie;
-  oldestNonMatchingNonSessionCookie.entry = nullptr;
+  int64_t oldestNonMatchingCookieTime = 0;
+  nsListIter oldestNonMatchingCookie;
+  oldestNonMatchingCookie.entry = nullptr;
 
   int64_t oldestCookieTime = 0;
   nsListIter oldestCookie;
   oldestCookie.entry = nullptr;
 
   int64_t actualOldestCookieTime = cookies.Length() ? cookies[0]->LastAccessed() : 0;
   for (nsCookieEntry::IndexType i = 0; i < cookies.Length(); ++i) {
     nsCookie *cookie = cookies[i];
@@ -4662,69 +4654,44 @@ nsCookieService::FindStaleCookie(nsCooki
     if (aIsSecure.isSome() && !aIsSecure.value()) {
       // We want to look for the oldest non-secure cookie first time through,
       // then find the oldest secure cookie the second time we are called.
       if (cookie->IsSecure()) {
         continue;
       }
     }
 
-    // Update our various records of oldest cookies fitting several restrictions:
-    // * session cookies
-    // * non-session cookies
-    // * cookies with paths and domains that don't match the cookie triggering this purge
-
     // This cookie is a candidate for eviction if we have no information about
     // the source request, or if it is not a path or domain match against the
     // source request.
     bool isPrimaryEvictionCandidate = true;
     if (aSource) {
       isPrimaryEvictionCandidate = !PathMatches(cookie, sourcePath) || !DomainMatches(cookie, sourceHost);
     }
 
-    if (cookie->IsSession()) {
-      if (!oldestSessionCookie.entry || oldestSessionCookieTime > lastAccessed) {
-        oldestSessionCookieTime = lastAccessed;
-        oldestSessionCookie.entry = aEntry;
-        oldestSessionCookie.index = i;
-      }
-
-      if (isPrimaryEvictionCandidate &&
-          (!oldestNonMatchingSessionCookie.entry ||
-           oldestNonMatchingSessionCookieTime > lastAccessed)) {
-        oldestNonMatchingSessionCookieTime = lastAccessed;
-        oldestNonMatchingSessionCookie.entry = aEntry;
-        oldestNonMatchingSessionCookie.index = i;
-      }
-    } else if (isPrimaryEvictionCandidate &&
-               (!oldestNonMatchingNonSessionCookie.entry ||
-                oldestNonMatchingNonSessionCookieTime > lastAccessed)) {
-      oldestNonMatchingNonSessionCookieTime = lastAccessed;
-      oldestNonMatchingNonSessionCookie.entry = aEntry;
-      oldestNonMatchingNonSessionCookie.index = i;
+    if (isPrimaryEvictionCandidate &&
+        (!oldestNonMatchingCookie.entry ||
+         oldestNonMatchingCookieTime > lastAccessed)) {
+      oldestNonMatchingCookieTime = lastAccessed;
+      oldestNonMatchingCookie.entry = aEntry;
+      oldestNonMatchingCookie.index = i;
     }
 
     // Check if we've found the oldest cookie so far.
     if (!oldestCookie.entry || oldestCookieTime > lastAccessed) {
       oldestCookieTime = lastAccessed;
       oldestCookie.entry = aEntry;
       oldestCookie.index = i;
     }
   }
 
-  // Prefer to evict the oldest session cookies with a non-matching path/domain,
-  // followed by the oldest session cookie with a matching path/domain,
-  // followed by the oldest non-session cookie with a non-matching path/domain,
-  // resorting to the oldest non-session cookie with a matching path/domain.
-  if (oldestNonMatchingSessionCookie.entry) {
-    aIter = oldestNonMatchingSessionCookie;
-  } else if (oldestSessionCookie.entry) {
-    aIter = oldestSessionCookie;
-  } else if (oldestNonMatchingNonSessionCookie.entry) {
-    aIter = oldestNonMatchingNonSessionCookie;
+  // Prefer to evict the oldest cookie with a non-matching path/domain,
+  // followed by the oldest matching cookie.
+  if (oldestNonMatchingCookie.entry) {
+    aIter = oldestNonMatchingCookie;
   } else {
     aIter = oldestCookie;
   }
 
   return actualOldestCookieTime;
 }
 
 void
--- a/netwerk/cookie/test/unit/test_eviction.js
+++ b/netwerk/cookie/test/unit/test_eviction.js
@@ -147,85 +147,82 @@ function* test_basic_eviction(base_host,
     // Ensure that cookies set for the / path appear more recent.
     cs.getCookieString(OTHER_SUBDOMAIN_URI, null)
     verifyCookies(['non_session_non_path_non_domain',
                    'session_foo_path',
                    'session_bar_path',
                    'non_session_non_path_subdomain',
                    'session_non_path_pub_domain'], BASE_URI);
 
-    // Evict oldest session cookie that does not match example.org/foo (session_bar_path)
+    // Evict oldest cookie that does not match example.org/foo (session_bar_path)
     yield setCookie("session_foo_path_2", null, "/foo", null, FOO_PATH);
     verifyCookies(['non_session_non_path_non_domain',
                    'session_foo_path',
                    'non_session_non_path_subdomain',
                    'session_non_path_pub_domain',
                    'session_foo_path_2'], BASE_URI);
 
-    // Evict oldest session cookie that does not match example.org/bar (session_foo_path)
+    // Evict oldest cookie that does not match example.org/bar (session_foo_path)
     yield setCookie("session_bar_path_2", null, "/bar", null, BAR_PATH);
     verifyCookies(['non_session_non_path_non_domain',
                    'non_session_non_path_subdomain',
                    'session_non_path_pub_domain',
                    'session_foo_path_2',
                    'session_bar_path_2'], BASE_URI);
 
-    // Evict oldest session cookie that does not match example.org/ (session_non_path_pub_domain)
+    // Evict oldest cookie that does not match example.org/ (session_non_path_pub_domain)
     yield setCookie("non_session_non_path_non_domain_2", null, null, 100000, BASE_URI);
     verifyCookies(['non_session_non_path_non_domain',
                    'non_session_non_path_subdomain',
                    'session_foo_path_2',
                    'session_bar_path_2',
                    'non_session_non_path_non_domain_2'], BASE_URI);
 
-    // Evict oldest session cookie that does not match example.org/ (session_foo_path_2)
+    // Evict oldest cookie that does not match example.org/ (session_foo_path_2)
     yield setCookie("session_non_path_non_domain_3", null, null, null, BASE_URI);
     verifyCookies(['non_session_non_path_non_domain',
                    'non_session_non_path_subdomain',
                    'session_bar_path_2',
                    'non_session_non_path_non_domain_2',
                    'session_non_path_non_domain_3'], BASE_URI);
 
-    // Evict oldest session cookie; all such cookies match example.org/bar (session_bar_path_2)
-    // note: this new cookie doesn't have an explicit path, but empty paths inherit the
-    // request's path
+    // Evict oldest cookie; all such cookies match example.org/bar (non_session_non_path_non_domain)
     yield setCookie("non_session_bar_path_non_domain", null, null, 100000, BAR_PATH);
-    verifyCookies(['non_session_non_path_non_domain',
-                   'non_session_non_path_subdomain',
+    verifyCookies(['non_session_non_path_subdomain',
+                   'session_bar_path_2',
                    'non_session_non_path_non_domain_2',
                    'session_non_path_non_domain_3',
                    'non_session_bar_path_non_domain'], BASE_URI);
 
-    // Evict oldest session cookie, even though it matches pub.example.org (session_non_path_non_domain_3)
+    // Evict oldest cookie that deose not match example.org/ (session_bar_path_2)
     yield setCookie("non_session_non_path_pub_domain", null, null, 100000, OTHER_SUBDOMAIN_URI);
-    verifyCookies(['non_session_non_path_non_domain',
-                   'non_session_non_path_subdomain',
+    verifyCookies(['non_session_non_path_subdomain',
                    'non_session_non_path_non_domain_2',
+                   'session_non_path_non_domain_3',
                    'non_session_bar_path_non_domain',
                    'non_session_non_path_pub_domain'], BASE_URI);
 
-    // All session cookies have been evicted.
-    // Evict oldest non-session non-domain-matching cookie (non_session_non_path_pub_domain)
+    // Evict oldest cookie that does not match example.org/bar (non_session_non_path_pub_domain)
     yield setCookie("non_session_bar_path_non_domain_2", null, '/bar', 100000, BAR_PATH);
-    verifyCookies(['non_session_non_path_non_domain',
-                   'non_session_non_path_subdomain',
+    verifyCookies(['non_session_non_path_subdomain',
                    'non_session_non_path_non_domain_2',
+                   'session_non_path_non_domain_3',
                    'non_session_bar_path_non_domain',
                    'non_session_bar_path_non_domain_2'], BASE_URI);
 
-    // Evict oldest non-session non-path-matching cookie (non_session_bar_path_non_domain)
+    // Evict oldest cookie that does not match example.org/ (non_session_bar_path_non_domain)
     yield setCookie("non_session_non_path_non_domain_4", null, null, 100000, BASE_URI);
-    verifyCookies(['non_session_non_path_non_domain',
-                   'non_session_non_path_subdomain',
+    verifyCookies(['non_session_non_path_subdomain',
                    'non_session_non_path_non_domain_2',
+                   'session_non_path_non_domain_3',
                    'non_session_bar_path_non_domain_2',
                    'non_session_non_path_non_domain_4'], BASE_URI);
 
-    // At this point all remaining cookies are non-session cookies, have a path of /,
-    // and either don't have a domain or have one that matches subdomains.
+    // At this point all remaining cookies have a path of / and either don't have a domain
+    // or have one that matches subdomains.
     // They will therefore be evicted from oldest to newest if all new cookies added share
     // similar characteristics.
 }
 
 // Verify that the given cookie names exist, and are ordered from least to most recently accessed
 function verifyCookies(names, uri) {
     do_check_eq(cm.countCookiesFromHost(uri.host), names.length);
     let cookies = cm.getCookiesFromHost(uri.host, {});
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1152,9 +1152,9 @@ static const TransportSecurityPreload kP
   { "za.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
   { "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
 };
 
 // Pinning Preload List Length = 477;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1496589383610000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1496676311804000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -1,13 +1,12 @@
 007sascha.de: max-age too low: 3600
 00f.net: did not receive HSTS header
 020wifi.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 0p.no: did not receive HSTS header
-0x.sk: could not connect to host
 0x0a.net: could not connect to host
 0x1337.eu: could not connect to host
 0x44.net: did not receive HSTS header
 0xa.in: could not connect to host
 0xacab.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 0xb612.org: could not connect to host
 0xf00.ch: did not receive HSTS header
 100dayloans.com: max-age too low: 0
@@ -30,16 +29,17 @@ 206rc.net: max-age too low: 2592000
 247loan.com: max-age too low: 0
 25daysof.io: could not connect to host
 2859cc.com: could not connect to host
 2brokegirls.org: could not connect to host
 2or3.tk: could not connect to host
 2smart4food.com: did not receive HSTS header
 2ss.jp: did not receive HSTS header
 300651.ru: did not receive HSTS header
+300m.com: did not receive HSTS header
 301.website: could not connect to host
 302.nyc: could not connect to host
 33drugstore.com: did not receive HSTS header
 360ds.co.in: could not connect to host
 360gradus.com: did not receive HSTS header
 365.or.jp: did not receive HSTS header
 3chit.cf: could not connect to host
 3click-loan.com: could not connect to host
@@ -58,17 +58,16 @@ 4eyes.ch: did not receive HSTS header
 4mm.org: did not receive HSTS header
 4ourty2.org: could not connect to host
 4sqsu.eu: could not connect to host
 50millionablaze.org: did not receive HSTS header
 540.co: did not receive HSTS header
 56ct.com: could not connect to host
 60ych.net: did not receive HSTS header
 6120.eu: did not receive HSTS header
-646.io: could not connect to host
 7kovrikov.ru: did not receive HSTS header
 808.lv: did not receive HSTS header
 83i.net: could not connect to host
 8ox.ru: did not receive HSTS header
 911911.pw: could not connect to host
 922.be: could not connect to host
 960news.ca: could not connect to host
 9point6.com: could not connect to host
@@ -124,29 +123,30 @@ adopteunsiteflash.com: did not receive H
 adquisitio.co.uk: could not connect to host
 adquisitio.de: could not connect to host
 adquisitio.es: could not connect to host
 adquisitio.fr: could not connect to host
 adquisitio.it: could not connect to host
 adrianseo.ro: did not receive HSTS header
 adrl.ca: could not connect to host
 adsfund.org: could not connect to host
+aduedu.de: did not receive HSTS header
 advancedstudio.ro: did not receive HSTS header
 adver.top: could not connect to host
 adviespuntklokkenluiders.nl: did not receive HSTS header
 aemoria.com: could not connect to host
 aerialmediapro.net: could not connect to host
 aes256.ru: could not connect to host
 aether.pw: could not connect to host
 aevpn.net: could not connect to host
 aficotroceni.ro: did not receive HSTS header
 afp548.tk: could not connect to host
 agalaxyfarfaraway.co.uk: could not connect to host
 agbremen.de: did not receive HSTS header
-agentseeker.ca: could not connect to host
+agentseeker.ca: did not receive HSTS header
 agonswim.com: could not connect to host
 agrimap.com: did not receive HSTS header
 agrios.de: did not receive HSTS header
 agro-id.gov.ua: could not connect to host
 ahabingo.com: did not receive HSTS header
 ahmedabadflowermall.com: did not receive HSTS header
 ahoynetwork.com: could not connect to host
 ahri.ovh: could not connect to host
@@ -154,19 +154,20 @@ aidanwoods.com: did not receive HSTS hea
 airbnb.com: did not receive HSTS header
 aircomms.com: did not receive HSTS header
 airproto.com: did not receive HSTS header
 aishnair.com: could not connect to host
 aiticon.de: did not receive HSTS header
 aiw-thkoeln.online: could not connect to host
 ajmahal.com: could not connect to host
 akclinics.org: did not receive HSTS header
+akerek.hu: did not receive HSTS header
 akombakom.net: did not receive HSTS header
 akselimedia.fi: did not receive HSTS header
-akutun.cl: did not receive HSTS header
+akutun.cl: could not connect to host
 al-shami.net: could not connect to host
 aladdin.ie: did not receive HSTS header
 alainwolf.net: could not connect to host
 alanlee.net: could not connect to host
 alanrickmanflipstable.com: could not connect to host
 alariel.de: did not receive HSTS header
 alarmsystemreviews.com: did not receive HSTS header
 albertopimienta.com: did not receive HSTS header
@@ -175,16 +176,17 @@ alcazaar.com: could not connect to host
 alecvannoten.be: did not receive HSTS header
 alenan.org: could not connect to host
 alessandro.pw: did not receive HSTS header
 alethearose.com: did not receive HSTS header
 alexandre.sh: did not receive HSTS header
 alexisabarca.com: did not receive HSTS header
 alexsergeyev.com: could not connect to host
 alfa24.pro: could not connect to host
+alinode.com: could not connect to host
 alittlebitcheeky.com: did not receive HSTS header
 aljaspod.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 alkami.com: did not receive HSTS header
 all-subtitles.com: did not receive HSTS header
 all.tf: did not receive HSTS header
 alldaymonitoring.com: could not connect to host
 allforyou.at: could not connect to host
 allinnote.com: could not connect to host
@@ -200,17 +202,16 @@ altfire.ca: could not connect to host
 altmv.com: max-age too low: 7776000
 amaforums.org: could not connect to host
 amandaonishi.com: could not connect to host
 amavis.org: did not receive HSTS header
 amazingfloridagulfhomes.com: could not connect to host
 ameho.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 american-truck-simulator.de: could not connect to host
 american-truck-simulator.net: could not connect to host
-americanbio.com: could not connect to host
 americanworkwear.nl: did not receive HSTS header
 amigogeek.net: could not connect to host
 amihub.com: could not connect to host
 amilx.com: could not connect to host
 amilx.org: could not connect to host
 amimoto-ami.com: max-age too low: 3153600
 amitube.com: could not connect to host
 amoory.com: did not receive HSTS header
@@ -311,19 +312,16 @@ asc16.com: could not connect to host
 asdpress.cn: could not connect to host
 ashlane-cottages.com: could not connect to host
 ashutoshmishra.org: did not receive HSTS header
 asianodor.com: could not connect to host
 askfit.cz: did not receive HSTS header
 asm-x.com: could not connect to host
 asmui.ga: could not connect to host
 asmui.ml: could not connect to host
-asr.li: could not connect to host
-asr.rocks: could not connect to host
-asr.solar: could not connect to host
 asrob.eu: did not receive HSTS header
 ass.org.au: did not receive HSTS header
 assdecoeur.org: could not connect to host
 assekuranzjobs.de: could not connect to host
 asset-alive.com: did not receive HSTS header
 asset-alive.net: did not receive HSTS header
 astrath.net: could not connect to host
 astrolpost.com: could not connect to host
@@ -472,16 +470,17 @@ bezorg.ninja: could not connect to host
 bf.am: max-age too low: 0
 bgcparkstad.nl: did not receive HSTS header
 bgmn.net: could not connect to host
 bhatia.at: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 bi.search.yahoo.com: did not receive HSTS header
 bidon.ca: did not receive HSTS header
 bieberium.de: could not connect to host
 bienenblog.cc: could not connect to host
+bierbaumer.net: did not receive HSTS header
 big-black.de: did not receive HSTS header
 bigbrownpromotions.com.au: did not receive HSTS header
 bigdinosaur.org: could not connect to host
 bigshinylock.minazo.net: could not connect to host
 bildiri.ci: did not receive HSTS header
 bildschirmflackern.de: did not receive HSTS header
 billin.net: did not receive HSTS header
 billkiss.com: max-age too low: 300
@@ -603,16 +602,17 @@ buildci.asia: could not connect to host
 buildsaver.co.za: did not receive HSTS header
 built.by: did not receive HSTS header
 builtritetrailerplans.com: did not receive HSTS header
 bulletpoint.cz: did not receive HSTS header
 bulmafox.com: could not connect to host
 bumarkamoda.com: could not connect to host
 bunaken.asia: could not connect to host
 burian-server.cz: could not connect to host
+burpsuite.site: could not connect to host
 burrow.ovh: could not connect to host
 burtrum.me: could not connect to host
 burtrum.top: could not connect to host
 business.lookout.com: could not connect to host
 businesshosting.nl: did not receive HSTS header
 businessloanstoday.com: max-age too low: 0
 busold.ws: could not connect to host
 bustimes.org: could not connect to host
@@ -643,16 +643,17 @@ cadao.me: did not receive HSTS header
 cafe-scientifique.org.ec: could not connect to host
 caim.cz: did not receive HSTS header
 cainhosting.com: did not receive HSTS header
 cajapopcorn.com: did not receive HSTS header
 cake.care: could not connect to host
 calendarr.com: did not receive HSTS header
 calgaryconstructionjobs.com: did not receive HSTS header
 calix.com: max-age too low: 0
+call.me: did not receive HSTS header
 calltrackingreports.com: could not connect to host
 calvin.me: max-age too low: 2592000
 calvinallen.net: did not receive HSTS header
 calyxinstitute.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 camolist.com: could not connect to host
 canadiangamblingchoice.com: did not receive HSTS header
 cancelmyprofile.com: did not receive HSTS header
 candicontrols.com: did not receive HSTS header
@@ -722,38 +723,36 @@ chandlerredding.com: did not receive HST
 changelab.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 changetip.com: did not receive HSTS header
 chaos.fail: did not receive HSTS header
 chargejuice.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 charityclear.com: did not receive HSTS header
 charnleyhouse.co.uk: max-age too low: 604800
 chartpen.com: did not receive HSTS header
 chartstoffarm.de: max-age too low: 10
-chaska.co.za: could not connect to host
 chatbot.me: did not receive HSTS header
 chateauconstellation.ch: did not receive HSTS header
 chatme.im: did not receive HSTS header
 chatup.cf: could not connect to host
 chaulootz.com: could not connect to host
 chcemvediet.sk: max-age too low: 1555200
 cheapdns.org: could not connect to host
 chebedara.com: could not connect to host
 checkout.google.com: did not receive HSTS header (error ignored - included regardless)
 cheerflow.com: could not connect to host
 cheesetart.my: could not connect to host
 cheetah85.de: could not connect to host
 chejianer.cn: did not receive HSTS header
 chensir.net: could not connect to host
-cherryonit.com: could not connect to host
 cherysunzhang.com: max-age too low: 7776000
 chihiro.xyz: could not connect to host
 chijiokeindustries.co.uk: could not connect to host
 childcaresolutionscny.org: did not receive HSTS header
 chinacdn.org: could not connect to host
-chinawhale.com: did not receive HSTS header
+chinawhale.com: could not connect to host
 chirgui.eu: could not connect to host
 chm.vn: did not receive HSTS header
 chontalpa.pw: could not connect to host
 chopperforums.com: did not receive HSTS header
 chosenplaintext.org: could not connect to host
 chotu.net: could not connect to host
 chris-web.info: could not connect to host
 chrisandsarahinasia.com: did not receive HSTS header
@@ -826,30 +825,32 @@ cmci.dk: did not receive HSTS header
 cmlachapelle.ch: did not receive HSTS header
 cmlancy.ch: did not receive HSTS header
 cmlignon.ch: did not receive HSTS header
 cmplainpalais.ch: did not receive HSTS header
 cmsbattle.com: could not connect to host
 cmscafe.ru: did not receive HSTS header
 cn.search.yahoo.com: did not receive HSTS header
 cni-certing.it: max-age too low: 0
+cnwage.com: could not connect to host
+cnwarn.com: could not connect to host
 co50.com: did not receive HSTS header
 cocaine-import.agency: could not connect to host
 cocktailfuture.fr: could not connect to host
 codabix.com: did not receive HSTS header
 codabix.de: could not connect to host
 codabix.net: could not connect to host
 code.google.com: did not receive HSTS header (error ignored - included regardless)
 codeco.pw: could not connect to host
 codecontrollers.de: could not connect to host
 codeforce.io: could not connect to host
+codeforhakodate.org: could not connect to host
 codelayer.ca: could not connect to host
 codemonkeyrawks.net: did not receive HSTS header
 codepoet.de: could not connect to host
-codepult.com: could not connect to host
 codepx.com: did not receive HSTS header
 codewiththepros.org: could not connect to host
 codiva.io: max-age too low: 2592000
 coffeeetc.co.uk: did not receive HSTS header
 coffeestrategies.com: max-age too low: 2592000
 coiffeurschnittstelle.ch: did not receive HSTS header
 coindam.com: could not connect to host
 colinwolff.com: could not connect to host
@@ -878,17 +879,17 @@ concord-group.co.jp: did not receive HST
 condesaelectronics.com: max-age too low: 0
 confirm365.com: could not connect to host
 conformal.com: could not connect to host
 connect.ua: did not receive HSTS header
 consciousandglamorous.com: could not connect to host
 console.python.org: did not receive HSTS header
 constructionjobs.com: did not receive HSTS header
 contactbig.com: did not receive HSTS header
-containerstatistics.com: could not connect to host
+containerstatistics.com: did not receive HSTS header
 contarkos.xyz: could not connect to host
 content-api-dev.azurewebsites.net: could not connect to host
 continuumgaming.com: could not connect to host
 controlcenter.gigahost.dk: did not receive HSTS header
 coolchevy.org.ua: did not receive HSTS header
 cor-ser.es: could not connect to host
 coralproject.net: did not receive HSTS header
 cordial-restaurant.com: did not receive HSTS header
@@ -910,16 +911,17 @@ coverduck.ru: could not connect to host
 cpuvinf.eu.org: could not connect to host
 cr.search.yahoo.com: did not receive HSTS header
 cracking.org: did not receive HSTS header
 craftbeerbarn.co.uk: could not connect to host
 craftedge.xyz: could not connect to host
 craftmine.cz: did not receive HSTS header
 crate.io: did not receive HSTS header
 cravelyrics.com: could not connect to host
+crazifyngers.com: could not connect to host
 crazy-crawler.de: did not receive HSTS header
 crazycen.com: did not receive HSTS header
 crazyhotseeds.com: did not receive HSTS header
 creativephysics.ml: could not connect to host
 creativeplayuk.com: did not receive HSTS header
 crendontech.com: could not connect to host
 crestoncottage.com: could not connect to host
 criticalaim.com: could not connect to host
@@ -946,19 +948,21 @@ cryptopush.com: could not connect to hos
 crysadm.com: max-age too low: 1
 crystalclassics.co.uk: did not receive HSTS header
 csapak.com: max-age too low: 0
 csawctf.poly.edu: could not connect to host
 csfs.org.uk: could not connect to host
 csgodicegame.com: did not receive HSTS header
 csgoelemental.com: could not connect to host
 csgokings.eu: could not connect to host
+cshopify.com: could not connect to host
 csohack.tk: could not connect to host
 cspbuilder.info: could not connect to host
 cspvalidator.org: did not receive HSTS header
+csru.net: could not connect to host
 csvape.com: did not receive HSTS header
 ct-status.org: could not connect to host
 ct.search.yahoo.com: did not receive HSTS header
 cthulhuden.com: could not connect to host
 cubeserver.eu: could not connect to host
 cubewano.com: could not connect to host
 cujanovic.com: did not receive HSTS header
 cumshots-video.ru: could not connect to host
@@ -966,16 +970,17 @@ cunha.be: could not connect to host
 cuntflaps.me: did not receive HSTS header
 cuongquach.com: did not receive HSTS header
 cupidmentor.com: did not receive HSTS header
 curlyroots.com: did not receive HSTS header
 curroapp.com: could not connect to host
 curveweb.co.uk: did not receive HSTS header
 custe.rs: could not connect to host
 cuvva.insure: did not receive HSTS header
+cwage.com: could not connect to host
 cyanogenmod.xxx: could not connect to host
 cyberpunk.ca: could not connect to host
 cybershambles.com: could not connect to host
 cycleluxembourg.lu: did not receive HSTS header
 cydia-search.io: could not connect to host
 cyphertite.com: could not connect to host
 dad256.tk: could not connect to host
 dadtheimpaler.com: could not connect to host
@@ -1003,19 +1008,16 @@ darkhole.cn: could not connect to host
 darkkeepers.dk: did not receive HSTS header
 darknebula.space: could not connect to host
 darkpony.ru: could not connect to host
 darksideof.it: could not connect to host
 darrenellis.xyz: could not connect to host
 dashburst.com: did not receive HSTS header
 dashnimorad.com: did not receive HSTS header
 data-abundance.com: could not connect to host
-databionix.com: could not connect to host
-databutlr.com: could not connect to host
-databutlr.net: could not connect to host
 datahove.no: did not receive HSTS header
 datajapan.co.jp: could not connect to host
 datarank.com: max-age too low: 0
 dataretention.solutions: could not connect to host
 datatekniikka.com: could not connect to host
 datenkeks.de: did not receive HSTS header
 dateno1.com: max-age too low: 0
 datenreiter.cf: could not connect to host
@@ -1073,22 +1075,21 @@ dentaldomain.ph: could not connect to ho
 depeche-mode.moscow: max-age too low: 7200
 depijl-mz.nl: did not receive HSTS header
 depixion.agency: could not connect to host
 dequehablamos.es: could not connect to host
 derevtsov.com: did not receive HSTS header
 derhil.de: did not receive HSTS header
 derwolfe.net: did not receive HSTS header
 desiccantpackets.com: did not receive HSTS header
-designgears.com: could not connect to host
+designgears.com: did not receive HSTS header
 designthinking.or.jp: did not receive HSTS header
 despora.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 destinationbijoux.fr: could not connect to host
 detector.exposed: could not connect to host
-detest.org: could not connect to host
 devcu.net: did not receive HSTS header
 deviltracks.net: could not connect to host
 devincrow.me: could not connect to host
 devnsec.com: could not connect to host
 devtub.com: did not receive HSTS header
 devuan.org: did not receive HSTS header
 dewin.io: could not connect to host
 dhpcs.com: did not receive HSTS header
@@ -1112,17 +1113,16 @@ discovery.lookout.com: did not receive H
 dislocated.de: did not receive HSTS header
 disowned.net: max-age too low: 0
 dissimulo.me: could not connect to host
 dittvertshus.no: could not connect to host
 diva-ey.com: could not connect to host
 dizihocasi.com: could not connect to host
 dizorg.net: could not connect to host
 dj4et.de: could not connect to host
-djlnetworks.co.uk: did not receive HSTS header
 djz4music.com: did not receive HSTS header
 dl.google.com: did not receive HSTS header (error ignored - included regardless)
 dlc.viasinc.com: could not connect to host
 dlemper.de: did not receive HSTS header
 dlitz.net: could not connect to host
 dn42.eu: could not connect to host
 dns.google.com: did not receive HSTS header (error ignored - included regardless)
 dnsknowledge.com: did not receive HSTS header
@@ -1187,23 +1187,23 @@ dubrovskiy.net: could not connect to hos
 dubrovskiy.pro: could not connect to host
 duesee.org: could not connect to host
 dullsir.com: did not receive HSTS header
 duria.de: max-age too low: 3600
 dustri.org: did not receive HSTS header
 dutchessuganda.com: did not receive HSTS header
 dutchrank.com: could not connect to host
 dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
-dworzak.ch: could not connect to host
 dycontrol.de: could not connect to host
 dylanscott.com.au: did not receive HSTS header
 dymersion.com: did not receive HSTS header
 dynamic-innovations.net: could not connect to host
 dzimejl.sk: did not receive HSTS header
 dzlibs.io: could not connect to host
+dzndk.net: could not connect to host
 dzndk.org: could not connect to host
 e-aut.net: did not receive HSTS header
 e-deca2.org: did not receive HSTS header
 e-sa.com: did not receive HSTS header
 e3amn2l.com: could not connect to host
 earga.sm: could not connect to host
 earlybirdsnacks.com: could not connect to host
 earthrise16.com: could not connect to host
@@ -1267,17 +1267,16 @@ elliotgluck.com: could not connect to ho
 elnutricionista.es: did not receive HSTS header
 eloanpersonal.com: max-age too low: 0
 elpo.xyz: could not connect to host
 elsamakhin.com: could not connect to host
 elsitar.com: did not receive HSTS header
 email.lookout.com: could not connect to host
 emanatepixels.com: could not connect to host
 emeldi-commerce.com: max-age too low: 0
-emilyhorsman.com: could not connect to host
 eminovic.me: could not connect to host
 emjainteractive.com: did not receive HSTS header
 emjimadhu.com: could not connect to host
 emmable.com: could not connect to host
 emnitech.com: could not connect to host
 empleosentorreon.mx: could not connect to host
 empleostampico.com: did not receive HSTS header
 enaah.de: could not connect to host
@@ -1309,16 +1308,18 @@ entersynapse.com: could not connect to h
 entrepreneur.or.id: did not receive HSTS header
 enum.eu.org: could not connect to host
 enumify.com: could not connect to host
 envygeeks.com: did not receive HSTS header
 envygeeks.io: did not receive HSTS header
 eol34.com: did not receive HSTS header
 epanurse.com: could not connect to host
 ephry.com: could not connect to host
+epicsecure.de: could not connect to host
+epicsoft.de: could not connect to host
 epoxate.com: could not connect to host
 eq8.net.au: could not connect to host
 equate.net.au: max-age too low: 3600
 equatetechnologies.com.au: max-age too low: 3600
 equilibre-yoga-jennifer-will.com: could not connect to host
 erawanarifnugroho.com: did not receive HSTS header
 eressea.xyz: could not connect to host
 eridanus.uk: could not connect to host
@@ -1352,35 +1353,34 @@ etsysecure.com: could not connect to hos
 etula.ga: could not connect to host
 etula.me: could not connect to host
 euanbaines.com: did not receive HSTS header
 eucl3d.com: did not receive HSTS header
 eulerpi.io: could not connect to host
 eupho.me: could not connect to host
 euroshop24.net: could not connect to host
 evafojtova.cz: did not receive HSTS header
-evalesc.com: could not connect to host
 evantage.org: could not connect to host
 evdenevenakliyatankara.pw: did not receive HSTS header
-everybooks.com: max-age too low: 60
+everybooks.com: could not connect to host
 everylab.org: could not connect to host
 everything.place: could not connect to host
 evin.ml: could not connect to host
 evites.me: could not connect to host
 evomon.com: could not connect to host
 evossd.tk: could not connect to host
 ewex.org: could not connect to host
 ewuchuan.com: could not connect to host
 excelgum.ca: did not receive HSTS header
 exfiles.cz: did not receive HSTS header
 exgravitus.com: could not connect to host
 exitus.jp: max-age too low: 0
 exno.co: could not connect to host
 exousiakaidunamis.xyz: could not connect to host
-expatads.com: could not connect to host
+expatads.com: did not receive HSTS header
 expertmile.com: did not receive HSTS header
 expoundite.net: did not receive HSTS header
 expressfinance.co.za: did not receive HSTS header
 extreemhost.nl: did not receive HSTS header
 extremenetworking.net: could not connect to host
 exy.pw: could not connect to host
 eyeglassuniverse.com: did not receive HSTS header
 ez.fi: could not connect to host
@@ -1516,16 +1516,17 @@ fotopasja.info: could not connect to hos
 fourchin.net: did not receive HSTS header
 foxdev.io: could not connect to host
 foxelbox.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 foxley-farm.co.uk: did not receive HSTS header
 foxley-seeds.co.uk: did not receive HSTS header
 foxleyseeds.co.uk: could not connect to host
 foxtrot.pw: could not connect to host
 fr33d0m.link: could not connect to host
+fragmentspuren.de: could not connect to host
 francevpn.xyz: could not connect to host
 frangor.info: did not receive HSTS header
 frankwei.xyz: did not receive HSTS header
 franta.biz: did not receive HSTS header
 franta.email: did not receive HSTS header
 franzt.de: could not connect to host
 frasys.io: max-age too low: 7776000
 fredvoyage.fr: did not receive HSTS header
@@ -1545,49 +1546,51 @@ frforms.com: did not receive HSTS header
 frickenate.com: could not connect to host
 friendica.ch: could not connect to host
 frizo.com: did not receive HSTS header
 froggstack.de: could not connect to host
 frontisme.nl: could not connect to host
 frontmin.com: did not receive HSTS header
 frost-ci.xyz: could not connect to host
 frosty-gaming.xyz: did not receive HSTS header
+frowin-stemmer.de: could not connect to host
 fruitusers.com: could not connect to host
 frusky.de: did not receive HSTS header
 frusky.net: could not connect to host
 fspphoto.com: could not connect to host
 ftctele.com: did not receive HSTS header
 fuckbilibili.com: did not receive HSTS header
 fuckgfw233.org: could not connect to host
 fukushima-web.com: did not receive HSTS header
 fundacionhijosdelsol.org: could not connect to host
 funkyweddingideas.com.au: could not connect to host
+funnyang.com: could not connect to host
 funrun.com: did not receive HSTS header
 furiffic.com: did not receive HSTS header
 furnation.com: could not connect to host
 furry.be: max-age too low: 86400
 fusionmate.com: could not connect to host
 futbol11.com: did not receive HSTS header
 futurenda.com: could not connect to host
 futuretechnologi.es: could not connect to host
 futureyouhealth.com: did not receive HSTS header
 fx-rk.com: did not receive HSTS header
+fyrkat.no: could not connect to host
 fysiohaenraets.nl: did not receive HSTS header
 fzn.io: could not connect to host
 fzslm.me: did not receive HSTS header
 g01.in.ua: could not connect to host
 g2a.co: did not receive HSTS header
 g2g.com: did not receive HSTS header
 g4w.co: did not receive HSTS header (error ignored - included regardless)
 g5led.nl: could not connect to host
 gabber.scot: could not connect to host
 gaelleetarnaud.com: did not receive HSTS header
 gafachi.com: could not connect to host
 gaiserik.com: could not connect to host
-gaite.me: could not connect to host
 gakkainavi.jp: did not receive HSTS header
 gakkainavi4.com: could not connect to host
 gakkainavi4.net: did not receive HSTS header
 galardi.org: did not receive HSTS header
 galenskap.eu: could not connect to host
 gallery44.org: did not receive HSTS header
 galoisvpn.xyz: could not connect to host
 game-files.net: did not receive HSTS header
@@ -1608,17 +1611,17 @@ gamesdepartment.co.uk: did not receive H
 gameserver-sponsor.de: could not connect to host
 gamingmedia.eu: did not receive HSTS header
 gampenhof.de: did not receive HSTS header
 gaptek.id: did not receive HSTS header
 garciamartin.me: could not connect to host
 garden-life.org: could not connect to host
 gatapro.net: could not connect to host
 gatilagata.com.br: could not connect to host
-gatorsa.es: did not receive HSTS header
+gatorsa.es: could not connect to host
 gdpventure.com: max-age too low: 0
 gedankenbude.info: could not connect to host
 geekcast.co.uk: did not receive HSTS header
 geeky.software: could not connect to host
 geli-graphics.com: did not receive HSTS header
 gem-indonesia.net: could not connect to host
 gendrin.com: could not connect to host
 genuu.com: could not connect to host
@@ -1660,16 +1663,17 @@ gfwsb.ml: could not connect to host
 gglks.com: did not receive HSTS header
 gh16.com.ar: could not connect to host
 gheorghesarcov.ga: could not connect to host
 gheorghesarcov.tk: could not connect to host
 gietvloergarant.nl: did not receive HSTS header
 gigacloud.org: max-age too low: 0
 gilgaz.com: did not receive HSTS header
 gilly.berlin: did not receive HSTS header
+gincher.net: could not connect to host
 gingali.de: did not receive HSTS header
 gintenreiter-photography.com: did not receive HSTS header
 giogadesign.com: did not receive HSTS header
 gipsamsfashion.com: could not connect to host
 gipsic.com: did not receive HSTS header
 gistfy.com: could not connect to host
 github.party: could not connect to host
 givemyanswer.com: did not receive HSTS header
@@ -1744,16 +1748,17 @@ greatnet.de: did not receive HSTS header
 greenhillantiques.co.uk: did not receive HSTS header
 greenvines.com.tw: did not receive HSTS header
 greg.red: could not connect to host
 gregorytlee.me: did not receive HSTS header
 gremots.com: could not connect to host
 greplin.com: could not connect to host
 gresb.com: did not receive HSTS header
 gribani.com: could not connect to host
+griesser2.de: could not connect to host
 grigalanzsoftware.com: could not connect to host
 gripopgriep.net: could not connect to host
 grossmann.gr: could not connect to host
 groups.google.com: did not receive HSTS header (error ignored - included regardless)
 grunex.com: did not receive HSTS header
 gryffin.ga: could not connect to host
 gryffin.ml: could not connect to host
 gryffin.tk: could not connect to host
@@ -1764,16 +1769,17 @@ gtanda.tk: could not connect to host
 gtlfsonlinepay.com: did not receive HSTS header
 gtraxapp.com: could not connect to host
 gts-schulsoftware.de: did not receive HSTS header
 guava.studio: did not receive HSTS header
 gugga.dk: did not receive HSTS header
 guilde-vindicta.fr: did not receive HSTS header
 gulenet.com: could not connect to host
 gunnarhafdal.com: did not receive HSTS header
+guoqiang.info: could not connect to host
 gurom.lv: could not connect to host
 gurusupe.com: could not connect to host
 guso.gq: could not connect to host
 gussi.is: did not receive HSTS header
 gvt2.com: could not connect to host (error ignored - included regardless)
 gvt3.com: could not connect to host (error ignored - included regardless)
 gw2reload.eu: could not connect to host
 gwijaya.com: could not connect to host
@@ -1807,33 +1813,39 @@ hake.me: did not receive HSTS header
 haku.moe: could not connect to host
 hakugin.org: could not connect to host
 halo.red: could not connect to host
 hancc.net: could not connect to host
 hanfu.la: could not connect to host
 hang333.pw: did not receive HSTS header
 hanimalis.fr: could not connect to host
 hansen.hn: could not connect to host
+hao-zhang.com: could not connect to host
 hao2taiwan.com: max-age too low: 0
 haoyugao.com: could not connect to host
+haozhang.org: could not connect to host
+hapijs.cn: could not connect to host
 hapissl.com: could not connect to host
+hapivm.com: could not connect to host
 happyfabric.me: did not receive HSTS header
 happygastro.com: could not connect to host
+hapvm.com: could not connect to host
 harabuhouse.com: did not receive HSTS header
 harbor-light.net: could not connect to host
 hardline.xyz: could not connect to host
 haribosupermix.com: could not connect to host
 harmonycosmetic.com: max-age too low: 300
 harristony.com: could not connect to host
 hartmancpa.com: did not receive HSTS header
 harvestrenewal.org: did not receive HSTS header
 harz.cloud: could not connect to host
 has.vision: could not connect to host
 hash-list.com: could not connect to host
 hasilocke.de: did not receive HSTS header
+hasinase.de: could not connect to host
 haste.ch: could not connect to host
 hastherebeenamassshooting.today: could not connect to host
 hatoko.net: could not connect to host
 haufschild.de: could not connect to host
 haurumcraft.net: could not connect to host
 hausarzt-stader-str.de: did not receive HSTS header
 haveeruexaminer.com: could not connect to host
 haxoff.com: could not connect to host
@@ -1891,28 +1903,26 @@ hogar123.es: could not connect to host
 holifestival-freyung.de: could not connect to host
 holymoly.lu: could not connect to host
 homa.website: could not connect to host
 homophoni.com: could not connect to host
 honeytracks.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 hongzhaxiaofendui.com: could not connect to host
 honoo.com: could not connect to host
 hookandloom.com: did not receive HSTS header
-hooray.beer: could not connect to host
 hoovism.com: did not receive HSTS header
 horosho.in: could not connect to host
 horseboners.xxx: did not receive HSTS header
 hortifarm.ro: did not receive HSTS header
 horvathtom.com: could not connect to host
 hosteasy.nl: did not receive HSTS header
 hosted-service.com: did not receive HSTS header
 hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless)
 hostgarou.com: did not receive HSTS header
 hostinaus.com.au: could not connect to host
-hostinghelp.guru: could not connect to host
 hostisan.com: did not receive HSTS header
 hotchillibox.com: max-age too low: 0
 hotchoc.io: did not receive HSTS header
 houkago-step.com: did not receive HSTS header
 housemaadiah.org: did not receive HSTS header
 housingstudents.org.uk: could not connect to host
 howrandom.org: could not connect to host
 howtocuremysciatica.com: could not connect to host
@@ -1929,35 +1939,38 @@ huarongdao.com: max-age too low: 1
 hugocollignon.fr: could not connect to host
 hugosleep.com.au: did not receive HSTS header
 humblefinances.com: could not connect to host
 humeurs.net: could not connect to host
 humpteedumptee.in: did not receive HSTS header
 huntshomeinspections.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 hurricanelabs.com: did not receive HSTS header
 huskybutt.dog: could not connect to host
+hvh.no: could not connect to host
 hydra.ws: could not connect to host
 hydronium.cf: could not connect to host
 hydronium.ga: could not connect to host
 hydronium.me: could not connect to host
+hydronium.ml: could not connect to host
 hydronium.tk: could not connect to host
 hyper69.com: did not receive HSTS header
 i-jp.net: could not connect to host
 i-partners.sk: did not receive HSTS header
 iamokay.nl: did not receive HSTS header
 iamveto.com: could not connect to host
-iapws.com: did not receive HSTS header
+iapws.com: could not connect to host
 iban.is: could not connect to host
 ibarf.nl: did not receive HSTS header
 icebat.dyndns.org: could not connect to host
 icewoman.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 icfl.com.br: could not connect to host
 ichnichtskaufmann.de: could not connect to host
 ichoosebtec.com: could not connect to host
 icloud.net: could not connect to host
+icodesign.me: could not connect to host
 icpc2016.in.th: could not connect to host
 icreative.nl: did not receive HSTS header
 ictual.com: max-age too low: 0
 id-co.in: could not connect to host
 id-conf.com: did not receive HSTS header
 idacmedia.com: max-age too low: 5184000
 idcrane.com: could not connect to host
 ideadozz.hu: could not connect to host
@@ -1971,33 +1984,33 @@ idgsupply.com: could not connect to host
 idlekernel.com: could not connect to host
 idontexist.me: did not receive HSTS header
 ie.search.yahoo.com: did not receive HSTS header
 ies-italia.it: did not receive HSTS header
 ies.id.lv: could not connect to host
 ifad.org: did not receive HSTS header
 ifleurs.com: could not connect to host
 ifx.ee: could not connect to host
-igk.de: did not receive HSTS header
 ignatisd.gr: did not receive HSTS header
 igule.net: could not connect to host
 ihrlotto.de: could not connect to host
 ihrnationalrat.ch: could not connect to host
 ihsbsd.me: could not connect to host
 ihsbsd.tk: could not connect to host
 ihuanmeng.com: did not receive HSTS header
 ikujii.com: max-age too low: 0
 ikwilguidobellen.nl: did not receive HSTS header
 ilbuongiorno.it: could not connect to host
 ilikerainbows.co: could not connect to host
 ilikerainbows.co.uk: could not connect to host
 ilmconpm.de: did not receive HSTS header
 ilona.graphics: max-age too low: 3600
 iluvscotland.co.uk: did not receive HSTS header
 imakepoems.net: could not connect to host
+imanolbarba.net: could not connect to host
 ime.moe: could not connect to host
 imim.pw: did not receive HSTS header
 immersionwealth.com: could not connect to host
 immoprotect.ca: did not receive HSTS header
 immortals-co.com: did not receive HSTS header
 immoverkauf24.at: did not receive HSTS header
 immoverkauf24.de: did not receive HSTS header
 immunicity.info: could not connect to host
@@ -2040,17 +2053,16 @@ ins1gn1a.com: did not receive HSTS heade
 insane.zone: could not connect to host
 insite-feedback.com: did not receive HSTS header
 inspire-av.com: did not receive HSTS header
 inspiroinc.com: could not connect to host
 instacart.com: did not receive HSTS header
 instantdev.io: could not connect to host
 institutoflordelavida.com: could not connect to host
 intel.li: could not connect to host
-intelldynamics.com: could not connect to host
 interference.io: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 interlun.com: could not connect to host
 internetcasinos.de: could not connect to host
 internetcensus.org: could not connect to host
 interserved.com: did not receive HSTS header
 intex.es: max-age too low: 0
 intim-uslugi-kazan.net: could not connect to host
 intimtoy.com.ua: could not connect to host
@@ -2084,27 +2096,27 @@ ischool.co.jp: did not receive HSTS head
 iseek.biz: max-age too low: 0
 ishillaryclintoninprisonyet.com: could not connect to host
 isitamor.pm: could not connect to host
 iskaz.rs: did not receive HSTS header
 isogram.nl: could not connect to host
 israkurort.com: did not receive HSTS header
 isslshop.com: could not connect to host
 istaspirtslietas.lv: did not receive HSTS header
+isteinbaby.de: could not connect to host
 it-go.net: did not receive HSTS header
 itechgeek.com: max-age too low: 0
 ithakama.com: did not receive HSTS header
 ithakama.cz: did not receive HSTS header
 itos.asia: did not receive HSTS header
 itos.pl: did not receive HSTS header
 itriskltd.com: could not connect to host
 itsadog.co.uk: did not receive HSTS header
 itsagadget.com: did not receive HSTS header
 itsamurai.ru: max-age too low: 2592000
-itsatrap.nl: could not connect to host
 itsecurityassurance.pw: could not connect to host
 itsg-faq.de: could not connect to host
 itshost.ru: could not connect to host
 ivancacic.com: did not receive HSTS header
 ivi-fertility.com: max-age too low: 0
 ivi.es: max-age too low: 0
 ivk.website: could not connect to host
 ixec2.tk: could not connect to host
@@ -2157,17 +2169,16 @@ jayshao.com: did not receive HSTS header
 jazzinutrecht.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 jazzncheese.com: could not connect to host
 jbn.mx: could not connect to host
 jcch.de: could not connect to host
 jcor.me: did not receive HSTS header
 jcoscia.com: could not connect to host
 jctf.io: could not connect to host
 jeff393.com: could not connect to host
-jeffersonregan.com: could not connect to host
 jenjoit.de: could not connect to host
 jensenbanden.no: could not connect to host
 jeremye77.com: could not connect to host
 jesorsenville.com: did not receive HSTS header
 jessicabenedictus.nl: could not connect to host
 jesuisformidable.nl: could not connect to host
 jetaprices.com: max-age too low: 0
 jetsetcharge.com: could not connect to host
@@ -2215,27 +2226,25 @@ jottit.com: could not connect to host
 jpbike.cz: could not connect to host
 jrc9.ca: did not receive HSTS header
 jrgold.me: could not connect to host
 jrmd.io: could not connect to host
 jrvar.com: did not receive HSTS header
 jsanders.us: did not receive HSTS header
 jsg-technologies.de: did not receive HSTS header
 jslay.net: could not connect to host
-jsteward.moe: could not connect to host
 jualautoclave.com: did not receive HSTS header
 jualssh.com: could not connect to host
 juliamweber.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 julian-kipka.de: could not connect to host
 jumbox.xyz: could not connect to host
 junaos.xyz: did not receive HSTS header
 junge-selbsthilfe.info: could not connect to host
 junqtion.com: could not connect to host
 jupp0r.de: did not receive HSTS header
-justinharrison.ca: could not connect to host
 justlikethat.hosting: did not receive HSTS header
 justnaw.co.uk: could not connect to host
 justudin.com: did not receive HSTS header
 juwairen.cn: did not receive HSTS header
 jvoice.net: could not connect to host
 jwilsson.me: could not connect to host
 jxm.in: could not connect to host
 jznet.org: max-age too low: 86400
@@ -2282,17 +2291,16 @@ kerangalam.com: could not connect to hos
 kerksanders.nl: did not receive HSTS header
 kermadec.net: could not connect to host
 kernl.us: did not receive HSTS header
 keymaster.lookout.com: did not receive HSTS header
 kg-rating.com: could not connect to host
 kgxtech.com: max-age too low: 2592000
 ki-on.net: did not receive HSTS header
 kickass.al: could not connect to host
-kickstart.com.pk: could not connect to host
 kid-dachau.de: did not receive HSTS header
 kiel-media.de: did not receive HSTS header
 kienlen.org: could not connect to host
 kimpost.org: could not connect to host
 kinderly.co.uk: did not receive HSTS header
 kinderwagen-test24.de: could not connect to host
 kindof.ninja: could not connect to host
 kingmanhall.org: could not connect to host
@@ -2357,16 +2365,17 @@ kroetenfuchs.de: could not connect to ho
 kropkait.pl: could not connect to host
 krouzkyliduska.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 krunut.com: did not receive HSTS header
 krypteia.org: could not connect to host
 kryptomech.com: could not connect to host
 ksfh-mail.de: could not connect to host
 kstan.me: could not connect to host
 kswriter.com: could not connect to host
+kuchentraum.eu: could not connect to host
 kucom.it: did not receive HSTS header
 kueulangtahunanak.net: could not connect to host
 kummerlaender.eu: did not receive HSTS header
 kuoruan.com: could not connect to host
 kupelne-ptacek.sk: did not receive HSTS header
 kuppingercole.com: did not receive HSTS header
 kura.io: could not connect to host
 kurehun.org: could not connect to host
@@ -2405,17 +2414,17 @@ laobox.fr: could not connect to host
 laozhu.me: did not receive HSTS header
 laquack.com: did not receive HSTS header
 laserfuchs.de: did not receive HSTS header
 lashstuff.com: did not receive HSTS header
 lask.in: did not receive HSTS header
 latinred.com: could not connect to host
 latour-managedcare.ch: did not receive HSTS header
 latus.xyz: could not connect to host
-lausitzer-widerstand.de: could not connect to host
+lausitzer-widerstand.de: did not receive HSTS header
 lavine.ch: did not receive HSTS header
 lavval.com: could not connect to host
 lawformt.com: could not connect to host
 laxatus.com: did not receive HSTS header
 laxiongames.es: could not connect to host
 laylo.nl: did not receive HSTS header
 lbrt.xyz: could not connect to host
 ldarby.me.uk: could not connect to host
@@ -2434,17 +2443,16 @@ leiyun.me: did not receive HSTS header
 lellyboi.ml: could not connect to host
 lelongbank.com: did not receive HSTS header
 lemp.io: did not receive HSTS header
 lenovogaming.com: did not receive HSTS header
 lentri.com: did not receive HSTS header
 leob.in: did not receive HSTS header
 leolana.com: could not connect to host
 leon-jaekel.com: could not connect to host
-leonardcamacho.me: could not connect to host
 leopold.email: could not connect to host
 leopotamgroup.com: could not connect to host
 leovanna.co.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 lepont.pl: could not connect to host
 lerner.moscow: did not receive HSTS header
 les-corsaires.net: could not connect to host
 lesdouceursdeliyana.com: could not connect to host
 lesperlesdunet.fr: could not connect to host
@@ -2508,17 +2516,17 @@ liquorsanthe.in: could not connect to ho
 lisonfan.com: did not receive HSTS header
 listafirmelor.com: could not connect to host
 litespeed.io: could not connect to host
 litz.ca: could not connect to host
 litzenberger.ca: could not connect to host
 livedemo.io: could not connect to host
 livej.am: could not connect to host
 livi.co: did not receive HSTS header
-lnoldan.com: could not connect to host
+livolett.de: could not connect to host
 loadingdeck.com: did not receive HSTS header
 loadso.me: could not connect to host
 loafbox.com: could not connect to host
 locktheirphone.com: could not connect to host
 locomotive.ca: did not receive HSTS header
 login.corp.google.com: max-age too low: 7776000 (error ignored - included regardless)
 loginseite.com: could not connect to host
 lolmegafroi.de: could not connect to host
@@ -2559,17 +2567,17 @@ lufthansaexperts.com: max-age too low: 2
 luine.xyz: did not receive HSTS header
 luis-checa.com: could not connect to host
 luisv.me: could not connect to host
 lukonet.com: did not receive HSTS header
 lumd.me: could not connect to host
 lumi.do: did not receive HSTS header
 lungdoc.us: could not connect to host
 luno.io: could not connect to host
-luody.info: could not connect to host
+luody.info: did not receive HSTS header
 luoe.ml: could not connect to host
 luoxiao.im: could not connect to host
 luripump.se: could not connect to host
 lusis.fr: did not receive HSTS header
 lusis.net: did not receive HSTS header
 lustrumxi.nl: did not receive HSTS header
 luther.fi: did not receive HSTS header
 luxus-russen.de: did not receive HSTS header
@@ -2590,17 +2598,16 @@ macchaberrycream.com: could not connect 
 macdj.tk: could not connect to host
 macgeneral.de: did not receive HSTS header
 machon.biz: could not connect to host
 macosxfilerecovery.com: did not receive HSTS header
 madars.org: did not receive HSTS header
 maddin.ga: could not connect to host
 madebymagnitude.com: did not receive HSTS header
 maderwin.com: could not connect to host
-madusecurity.com: could not connect to host
 mae-berlinistanbul.com: could not connect to host
 mafamane.com: could not connect to host
 mafiareturns.com: max-age too low: 2592000
 magenx.com: did not receive HSTS header
 mahamed91.pw: could not connect to host
 mail-settings.google.com: did not receive HSTS header (error ignored - included regardless)
 mail.google.com: did not receive HSTS header (error ignored - included regardless)
 maildragon.com: could not connect to host
@@ -2620,19 +2627,21 @@ mammothmail.org: could not connect to ho
 managemynetsuite.com: could not connect to host
 maniadeprazer.com.br: could not connect to host
 manifestbin.com: did not receive HSTS header
 manningbrothers.com: did not receive HSTS header
 mannsolutions.co.uk: did not receive HSTS header
 mansion-note.com: did not receive HSTS header
 manufacturing.gov: could not connect to host
 maomaofuli.vip: could not connect to host
-marchagen.nl: could not connect to host
+marchagen.nl: did not receive HSTS header
+marcofinke.de: could not connect to host
 marcontrol.com: did not receive HSTS header
 marcuskoh.com: did not receive HSTS header
+margaretrosefashions.co.uk: could not connect to host
 mariannematthew.com: could not connect to host
 marie-curie.fr: could not connect to host
 marie-elisabeth.dk: did not receive HSTS header
 mario.party: did not receive HSTS header
 markaconnor.com: could not connect to host
 markayapilandirma.com: could not connect to host
 market.android.com: did not receive HSTS header (error ignored - included regardless)
 markrego.com: could not connect to host
@@ -2656,17 +2665,16 @@ matchneedle.com: could not connect to ho
 maternalsafety.org: did not receive HSTS header
 matrip.de: could not connect to host
 matrix.ac: did not receive HSTS header
 matrixcheats.net: could not connect to host
 matsuz.com: could not connect to host
 mattberryman.com: did not receive HSTS header
 mattcoles.io: did not receive HSTS header
 mattfin.ch: could not connect to host
-matthewkenny.co.uk: could not connect to host
 matthewprenger.com: could not connect to host
 matthiassteen.be: max-age too low: 0
 mattressinsider.com: max-age too low: 3153600
 mattsvensson.com: did not receive HSTS header
 mattwb65.com: could not connect to host
 matty.digital: max-age too low: 3600
 maultrom.ml: could not connect to host
 maur.cz: did not receive HSTS header
@@ -2674,17 +2682,16 @@ mavisang.cf: could not connect to host
 mawe.red: could not connect to host
 maya.mg: could not connect to host
 mca2017.org: did not receive HSTS header
 mcc.re: could not connect to host
 mccarty.io: could not connect to host
 mccrackon.com: could not connect to host
 mcdonalds.ru: did not receive HSTS header
 mcga.media: did not receive HSTS header
-mcl.gg: did not receive HSTS header
 mclab.su: could not connect to host
 mdewendt.de: could not connect to host
 mdfnet.se: did not receive HSTS header
 mdscomp.net: did not receive HSTS header
 mea.in.ua: could not connect to host
 meamod.com: did not receive HSTS header
 mechanus.io: max-age too low: 2592000
 medallia.io: could not connect to host
@@ -2718,20 +2725,17 @@ mereckas.com: did not receive HSTS heade
 meredithkm.info: could not connect to host
 meritz.rocks: could not connect to host
 mersinunivercity.com: did not receive HSTS header
 merson.me: could not connect to host
 meshok.ru: did not receive HSTS header
 mesmoque.com: did not receive HSTS header
 metagrader.com: could not connect to host
 metebalci.com: did not receive HSTS header
-meteobox.es: could not connect to host
-meteobox.mx: could not connect to host
-meteobox.pl: could not connect to host
-meteobox.sk: could not connect to host
+meteobox.mx: did not receive HSTS header
 meteorapp.space: could not connect to host
 meteosky.net: could not connect to host
 metin2blog.de: did not receive HSTS header
 metis.pw: could not connect to host
 meuemail.pro: could not connect to host
 mexbt.com: could not connect to host
 meyercloud.de: could not connect to host
 mfcatalin.com: could not connect to host
@@ -2769,16 +2773,17 @@ miku.be: did not receive HSTS header
 miku.hatsune.my: max-age too low: 5184000
 milesgeek.com: did not receive HSTS header
 mindcraft.ga: could not connect to host
 mindoktor.se: did not receive HSTS header
 minecraftserverz.com: could not connect to host
 minecraftvoter.com: could not connect to host
 mineover.es: could not connect to host
 minikneet.nl: did not receive HSTS header
+minimvc.com: could not connect to host
 minnesotadata.com: could not connect to host
 minoris.se: could not connect to host
 miragrow.com: could not connect to host
 mirindadomo.ru: did not receive HSTS header
 mironized.com: did not receive HSTS header
 mirrorx.com: did not receive HSTS header
 missrain.tw: could not connect to host
 mister.hosting: could not connect to host
@@ -2800,25 +2805,25 @@ mnemotiv.com: could not connect to host
 mnetworkingsolutions.co.uk: did not receive HSTS header
 mobaircon.com: could not connect to host
 mobifinans.ru: did not receive HSTS header
 mobilekey.co: could not connect to host
 mobilemedics.com: did not receive HSTS header
 mobilethreat.net: could not connect to host
 mobilethreatnetwork.net: could not connect to host
 mobilpass.no: could not connect to host
-mobix5.com: could not connect to host
 mocloud.eu: could not connect to host
 model9.io: did not receive HSTS header
 modemagazines.co.uk: could not connect to host
 modernibytovytextil.cz: could not connect to host
 moebel-nagel.de: did not receive HSTS header
 moelord.org: could not connect to host
 moen.io: did not receive HSTS header
 mogry.net: did not receive HSTS header
+mona.lu: did not receive HSTS header
 monarca.systems: could not connect to host
 monasterialis.eu: could not connect to host
 mondar.io: did not receive HSTS header
 mondopoint.com: did not receive HSTS header
 moneytoday.com: max-age too low: 0
 monitman.com: could not connect to host
 montenero.pl: could not connect to host
 moon.lc: could not connect to host
@@ -2840,16 +2845,17 @@ motocyklovedily.cz: did not receive HSTS
 motoryz.com: max-age too low: 300
 mottvd.com: could not connect to host
 moula.com.au: did not receive HSTS header
 mountainmusicpromotions.com: did not receive HSTS header
 movepin.com: did not receive HSTS header
 moviesabout.net: could not connect to host
 moy-gorod.od.ua: did not receive HSTS header
 moy.cat: did not receive HSTS header
+mozoa.net: did not receive HSTS header
 mp3juices.is: could not connect to host
 mqas.net: could not connect to host
 mrdani.net: could not connect to host
 mrettich.org: did not receive HSTS header
 mrnonz.com: max-age too low: 0
 mrpopat.in: did not receive HSTS header
 mrs-shop.com: did not receive HSTS header
 msc-seereisen.net: could not connect to host
@@ -2886,23 +2892,23 @@ myandroidtools.cc: could not connect to 
 mybon.at: could not connect to host
 mybudget.xyz: could not connect to host
 mybuilderinlondon.co.uk: could not connect to host
 mycollab.net: could not connect to host
 mycoted.com: did not receive HSTS header
 mydeos.com: could not connect to host
 mydigipass.com: did not receive HSTS header
 myepass.de: could not connect to host
-myg21.com: could not connect to host
 mygate.at: could not connect to host
 mygdut.com: did not receive HSTS header
 mygov.scot: did not receive HSTS header
 myiocc.org: could not connect to host
 mykolab.com: did not receive HSTS header
 mykreuzfahrt.de: could not connect to host
+myms.eu: could not connect to host
 myni.io: could not connect to host
 mypagella.com: could not connect to host
 mypagella.eu: could not connect to host
 mypagella.it: could not connect to host
 mypension.ca: could not connect to host
 myphonebox.de: could not connect to host
 myraytech.net: did not receive HSTS header
 mysecretrewards.com: did not receive HSTS header
@@ -2915,17 +2921,17 @@ n2x.in: could not connect to host
 n4l.pw: could not connect to host
 nabytko.cz: could not connect to host
 nadia.pt: could not connect to host
 nagoya-kyuyo.com: could not connect to host
 naiharngym.com: did not receive HSTS header
 najedlo.sk: did not receive HSTS header
 nakliyatsirketi.biz: did not receive HSTS header
 nakuro.de: could not connect to host
-nalifornia.com: could not connect to host
+nalifornia.com: did not receive HSTS header
 nallon.com.br: could not connect to host
 namacindia.com: did not receive HSTS header
 namaho.com: could not connect to host
 nametaken-cloud.duckdns.org: could not connect to host
 namorico.me: did not receive HSTS header
 nan.zone: could not connect to host
 nanogeneinc.com: could not connect to host
 nanto.eu: could not connect to host
@@ -3034,16 +3040,17 @@ nope.website: could not connect to host
 nopex.no: could not connect to host
 nopol.de: did not receive HSTS header
 norandom.com: could not connect to host
 norb.at: could not connect to host
 nordiccasinocommunity.com: did not receive HSTS header
 nordor.homeip.net: could not connect to host
 nosecretshop.com: could not connect to host
 notadd.com: did not receive HSTS header
+notcompletelycorrect.com: could not connect to host
 notenoughtime.de: could not connect to host
 nottheonion.net: did not receive HSTS header
 nouvelle-vague-saint-cast.fr: did not receive HSTS header
 novacoast.com: did not receive HSTS header
 novatrucking.de: could not connect to host
 nowak.ninja: did not receive HSTS header
 noworrywp.com: could not connect to host
 nozoe.jp: did not receive HSTS header
@@ -3109,17 +3116,16 @@ okok.rent: could not connect to host
 okutama.in.th: could not connect to host
 olafnorge.de: could not connect to host
 olanderflorist.com: could not connect to host
 oldchaphome.nl: could not connect to host
 oldoakflorist.com: could not connect to host
 oliverdunk.com: did not receive HSTS header
 ollehbizev.co.kr: could not connect to host
 ollie.io: did not receive HSTS header
-olmari.fi: did not receive HSTS header
 omgaanmetidealen.com: could not connect to host
 ominto.com: max-age too low: 0
 omniti.com: max-age too low: 1
 omquote.gq: could not connect to host
 oneb4nk.com: could not connect to host
 oneclickloan.com: max-age too low: 0
 onefour.co: could not connect to host
 onehourloan.com: could not connect to host
@@ -3134,16 +3140,17 @@ onlinecompliance.org: did not receive HS
 onlinedeposit.us: could not connect to host
 onlinekasino.de: did not receive HSTS header
 onlinepollsph.com: could not connect to host
 onlinespielothek.com: did not receive HSTS header
 onlinewetten.de: could not connect to host
 onlyshopstation.com: did not receive HSTS header
 ononpay.com: did not receive HSTS header
 onpatient.com: did not receive HSTS header
+onsitemassageco.com: did not receive HSTS header
 ontras.com: could not connect to host
 onyxwall.com: could not connect to host
 onyxwall.link: could not connect to host
 onyxwall.net: could not connect to host
 ookjesprookje.nl: could not connect to host
 ooonja.de: could not connect to host
 oopsmycase.com: could not connect to host
 oost.io: did not receive HSTS header
@@ -3253,17 +3260,16 @@ passwords.google.com: did not receive HS
 pastaf.com: could not connect to host
 paste.linode.com: could not connect to host
 pastebin.linode.com: could not connect to host
 pastenib.com: could not connect to host
 paster.li: did not receive HSTS header
 pataua.kiwi: did not receive HSTS header
 paternitydnatest.com: could not connect to host
 patientinsight.net: could not connect to host
-patrz.eu: could not connect to host
 patt.us: did not receive HSTS header
 patterson.mp: could not connect to host
 paulyang.cn: did not receive HSTS header
 pavelfojt.cz: did not receive HSTS header
 paxwinkel.nl: did not receive HSTS header
 pay.gigahost.dk: did not receive HSTS header
 payfreez.com: could not connect to host
 payments.google.com: did not receive HSTS header (error ignored - included regardless)
@@ -3276,16 +3282,17 @@ pchax.net: could not connect to host
 pchospital.cc: did not receive HSTS header
 pdamsidoarjo.co.id: could not connect to host
 pdevio.com: could not connect to host
 pdf.yt: could not connect to host
 peakapp.nl: could not connect to host
 peissen.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 pekkapikkarainen.fi: did not receive HSTS header
 pekkarik.ru: could not connect to host
+pengi.me: could not connect to host
 penguinclientsystem.com: could not connect to host
 pensacolawinterfest.org: could not connect to host
 pentano.net: could not connect to host
 pepperhead.com: did not receive HSTS header
 pepperworldhotshop.de: did not receive HSTS header
 perfectionis.me: could not connect to host
 performous.org: could not connect to host
 perfumista.vn: did not receive HSTS header
@@ -3297,16 +3304,17 @@ personalinjurylist.com: did not receive 
 personalizedtouch.co: could not connect to host
 perthdevicelab.com: did not receive HSTS header
 pet-nsk.ru: could not connect to host
 petchart.net: could not connect to host
 petplum.com: did not receive HSTS header
 petrachuk.ru: could not connect to host
 petravdbos.nl: did not receive HSTS header
 petrolplus.ru: did not receive HSTS header
+petrovsky.pro: could not connect to host
 petsittersservices.com: could not connect to host
 pettsy.com: could not connect to host
 pewboards.com: could not connect to host
 pfudor.tk: could not connect to host
 pgpm.io: could not connect to host
 pharmgkb.org: could not connect to host
 phil.tw: could not connect to host
 phoebe.co.nz: did not receive HSTS header
@@ -3362,31 +3370,31 @@ pleier.it: did not receive HSTS header
 plhdb.org: did not receive HSTS header
 plirt.ru: did not receive HSTS header
 plixer.com: did not receive HSTS header
 plogable.co: could not connect to host
 plombirator.kz: did not receive HSTS header
 plothost.com: did not receive HSTS header
 ploup.net: could not connect to host
 pluff.nl: could not connect to host
+plur.com.au: did not receive HSTS header
 pmnts.io: could not connect to host
 po.gl: did not receive HSTS header
 pocketsix.com: did not receive HSTS header
 pocloud.homelinux.net: could not connect to host
 poiema.com.sg: did not receive HSTS header
 pol.in.th: could not connect to host
 pole.net.nz: could not connect to host
 poleartschool.com: could not connect to host
 poles4pilots.com: did not receive HSTS header
 policeiwitness.sg: could not connect to host
 polimat.org: could not connect to host
 politically-incorrect.xyz: could not connect to host
 politologos.org: did not receive HSTS header
 polycoise.com: could not connect to host
-polymathematician.com: could not connect to host
 polypho.nyc: could not connect to host
 pompompoes.com: could not connect to host
 pontualcomp.com: max-age too low: 2592000
 poolsandstuff.com: did not receive HSTS header
 poon.tech: could not connect to host
 portalplatform.net: did not receive HSTS header
 poshpak.com: max-age too low: 86400
 postcodewise.co.uk: did not receive HSTS header
@@ -3415,22 +3423,22 @@ printfn.com: could not connect to host
 priolkar.com: did not receive HSTS header
 privacylabs.io: did not receive HSTS header
 privacyrup.net: could not connect to host
 prnt.li: did not receive HSTS header
 pro-zone.com: could not connect to host
 prodpad.com: did not receive HSTS header
 professionalboundaries.com: did not receive HSTS header
 profi-durchgangsmelder.de: did not receive HSTS header
-profpay.com: could not connect to host
 profundr.com: could not connect to host
 progblog.net: could not connect to host
 progg.no: could not connect to host
 progress-technologies.com: could not connect to host
 prohostonline.fi: could not connect to host
+proj.org.cn: could not connect to host
 projectdp.net: could not connect to host
 projectmercury.space: could not connect to host
 promecon-gmbh.de: did not receive HSTS header
 prontocleaners.co.uk: could not connect to host
 prontolight.com: did not receive HSTS header
 prontomovers.co.uk: could not connect to host
 propactrading.com: could not connect to host
 prosocialmachines.com: could not connect to host
@@ -3473,17 +3481,17 @@ qccqld.org.au: could not connect to host
 qingpat.com: did not receive HSTS header
 qingxuan.info: max-age too low: 864000
 qinxi1992.com: did not receive HSTS header
 qldconservation.org: could not connect to host
 qorm.co.uk: did not receive HSTS header
 qrara.net: did not receive HSTS header
 qrlending.com: did not receive HSTS header
 quail.solutions: could not connect to host
-quality1.com.br: did not receive HSTS header
+quality1.com.br: could not connect to host
 quantacloud.ch: could not connect to host
 quantenteranik.eu: could not connect to host
 quantum-cloud.xyz: could not connect to host
 quantumcourse.org: did not receive HSTS header
 quebecmailbox.com: did not receive HSTS header
 queercoders.com: did not receive HSTS header
 questsandrewards.com: could not connect to host
 quli.nl: did not receive HSTS header
@@ -3502,20 +3510,21 @@ rafaelcz.de: could not connect to host
 railgun.com.cn: could not connect to host
 rainbowbarracuda.com: could not connect to host
 ramonj.nl: could not connect to host
 randomcage.com: did not receive HSTS header
 randomcloud.net: could not connect to host
 randomhero.cloud: could not connect to host
 rankthespot.com: could not connect to host
 rannseier.org: did not receive HSTS header
-rapido.nu: could not connect to host
+rapido.nu: did not receive HSTS header
 rapidresearch.me: could not connect to host
 rapidthunder.io: could not connect to host
 rasing.me: did not receive HSTS header
+raspass.me: could not connect to host
 rastreador.com.es: did not receive HSTS header
 ratajczak.fr: could not connect to host
 rate-esport.de: could not connect to host
 rationalism.com: could not connect to host
 raulfraile.net: could not connect to host
 raven.lipetsk.ru: could not connect to host
 rawet.se: did not receive HSTS header
 rawstorieslondon.com: could not connect to host
@@ -3562,17 +3571,17 @@ remodela.com.ve: could not connect to ho
 rene-schwarz.com: could not connect to host
 renem.net: did not receive HSTS header
 renlong.org: did not receive HSTS header
 renrenss.com: did not receive HSTS header
 rentacarcluj.xyz: could not connect to host
 rentcarassist.com: could not connect to host
 renteater.com: could not connect to host
 replacemychina.com: could not connect to host
-reprolife.co.uk: max-age too low: 0
+reprolife.co.uk: could not connect to host
 res-rheingau.de: did not receive HSTS header
 res42.com: could not connect to host
 research.facebook.com: did not receive HSTS header
 reserve-online.net: did not receive HSTS header
 respice.xyz: could not connect to host
 respostas.com.br: did not receive HSTS header
 restchart.com: did not receive HSTS header
 retcor.net: could not connect to host
@@ -3604,16 +3613,17 @@ ring0.xyz: did not receive HSTS header
 ringh.am: could not connect to host
 rippleunion.com: could not connect to host
 riskmgt.com.au: could not connect to host
 rj.gg: could not connect to host
 rk6.cz: could not connect to host
 rkkhok.hu: did not receive HSTS header
 rkmantpur.org: did not receive HSTS header
 rme.li: did not receive HSTS header
+rms.sexy: could not connect to host
 rngmeme.com: could not connect to host
 roadfeast.com: could not connect to host
 roan24.pl: did not receive HSTS header
 robertglastra.com: could not connect to host
 robigalia.org: did not receive HSTS header
 robteix.com: did not receive HSTS header
 robtex.net: did not receive HSTS header
 robtex.org: did not receive HSTS header
@@ -3640,17 +3650,16 @@ rossen.be: did not receive HSTS header
 rotterdamjazz.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 roundtheme.com: did not receive HSTS header
 rous.se: could not connect to host
 rout0r.org: did not receive HSTS header
 rouvray.org: could not connect to host
 royalpub.net: did not receive HSTS header
 rr.in.th: could not connect to host
 rrke.cc: did not receive HSTS header
-rrom.me: could not connect to host
 rsajeey.info: could not connect to host
 rsauget.fr: could not connect to host
 rsf.io: could not connect to host
 rsmaps.org: could not connect to host
 rubbereggs.ca: could not connect to host
 rubberfurs.org: max-age too low: 86400
 rubecodeberg.com: could not connect to host
 rubenschulz.nl: did not receive HSTS header
@@ -3672,16 +3681,17 @@ russmarshall.com: could not connect to h
 ruxit.com: did not receive HSTS header
 rw.search.yahoo.com: did not receive HSTS header
 rx-contact.com: did not receive HSTS header
 rxprep.com: did not receive HSTS header
 rxv.cc: could not connect to host
 ryansmithphotography.com: did not receive HSTS header
 ryanteck.uk: did not receive HSTS header
 s.how: did not receive HSTS header
+safelist.eu: did not receive HSTS header
 safematix.com: could not connect to host
 safewings-nh.nl: did not receive HSTS header
 safic.net: could not connect to host
 sageth.com: max-age too low: 0
 sah3.net: could not connect to host
 sairai.bid: did not receive HSTS header
 sakaki.anime.my: max-age too low: 5184000
 sakaserver.com: did not receive HSTS header
@@ -3723,32 +3733,34 @@ saveaward.gov: could not connect to host
 saveyour.biz: did not receive HSTS header
 sawamura-rental.com: did not receive HSTS header
 sazima.ru: did not receive HSTS header
 sbox-archives.com: could not connect to host
 sby.de: did not receive HSTS header
 sc4le.com: could not connect to host
 scepticism.com: could not connect to host
 schadegarant.net: could not connect to host
+schamlosharmlos.de: could not connect to host
 schnell-gold.com: could not connect to host
 schoop.me: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 schrauger.com: did not receive HSTS header
 schrauger.info: did not receive HSTS header
 schrauger.net: did not receive HSTS header
 schrauger.org: did not receive HSTS header
 schrauger.run: did not receive HSTS header
 schreiber-netzwerk.eu: did not receive HSTS header
 schrodinger.io: could not connect to host
 schulterglatzen-altenwalde.de: could not connect to host
 schultzflorists.com: could not connect to host
 schwarzkopfforyou.de: did not receive HSTS header
 schweizerbolzonello.net: could not connect to host
 scienceathome.org: did not receive HSTS header
 scooshonline.co.uk: did not receive HSTS header
 scotbirchfield.com: did not receive HSTS header
+scottferguson.com.au: could not connect to host
 scottgthomas.com: could not connect to host
 scrambl.is: could not connect to host
 scrambler.in: could not connect to host
 scrapings.net: could not connect to host
 screencaster.io: did not receive HSTS header
 screenresolution.space: could not connect to host
 screensaversplanet.com: did not receive HSTS header
 scribe.systems: could not connect to host
@@ -3789,25 +3801,26 @@ selfcarecentral.com: did not receive HST
 selfie-france.fr: could not connect to host
 selldorado.com: could not connect to host
 sello.com: did not receive HSTS header
 sellocdn.com: could not connect to host
 semen3325.xyz: could not connect to host
 semenkovich.com: did not receive HSTS header
 semps-servers.de: could not connect to host
 semps.de: did not receive HSTS header
+sendc.at: could not connect to host
+sendcat.com: could not connect to host
 senedirect.com: did not receive HSTS header
 sensiblemn.org: could not connect to host
 sensibus.com: did not receive HSTS header
 seo.consulting: did not receive HSTS header
 seomobo.com: could not connect to host
 seowarp.net: did not receive HSTS header
 sep23.ru: did not receive HSTS header
 seq.tf: did not receive HSTS header
-serathius.ovh: could not connect to host
 serenitycreams.com: did not receive HSTS header
 serfdom.io: did not receive HSTS header
 serized.pw: could not connect to host
 servercode.ca: did not receive HSTS header
 serverdensity.io: did not receive HSTS header
 servergno.me: did not receive HSTS header
 servermonkey.nl: could not connect to host
 seryo.moe: could not connect to host
@@ -3842,16 +3855,17 @@ shinonome-lab.eu.org: could not connect 
 shiona.xyz: did not receive HSTS header
 shocksrv.com: did not receive HSTS header
 shooshosha.com: did not receive HSTS header
 shopontarget.com: did not receive HSTS header
 shoprose.ru: could not connect to host
 shops.neonisi.com: could not connect to host
 shortr.li: could not connect to host
 showkeeper.tv: did not receive HSTS header
+shu-kin.net: could not connect to host
 shukatsu-note.com: could not connect to host
 shv25.se: could not connect to host
 shwongacc.com: could not connect to host
 shyrydan.es: could not connect to host
 siammedia.co: could not connect to host
 siciliadigitale.pro: could not connect to host
 siddhant.me: could not connect to host
 siebens.net: could not connect to host
@@ -3958,17 +3972,16 @@ solinter.com.br: did not receive HSTS he
 solit.systems: did not receive HSTS header
 soll-i.ch: did not receive HSTS header
 solsystems.ru: could not connect to host
 someshit.xyz: could not connect to host
 somethingnew.xyz: could not connect to host
 sonicrainboom.rocks: could not connect to host
 soobi.org: did not receive HSTS header
 soondy.com: did not receive HSTS header
-sortaweird.net: could not connect to host
 sotiran.com: did not receive HSTS header
 sotor.de: did not receive HSTS header
 soulema.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 soulfulglamour.uk: could not connect to host
 sourcelair.com: did not receive HSTS header
 southside-crew.club: could not connect to host
 southworcestershiregpservices.co.uk: could not connect to host
 souyar.de: could not connect to host
@@ -3997,22 +4010,23 @@ spencerbaer.com: could not connect to ho
 sperohub.io: could not connect to host
 spherenix.org: could not connect to host
 spicydog.tk: could not connect to host
 spiegels.nl: could not connect to host
 spikeykc.me: did not receive HSTS header
 spillmaker.no: did not receive HSTS header
 spilsbury.io: could not connect to host
 spititout.it: could not connect to host
-spittersberger.recipes: did not receive HSTS header
+spittersberger.recipes: could not connect to host
 sponsortobias.com: did not receive HSTS header
 sportwette.eu: did not receive HSTS header
 spot-events.com: could not connect to host
 spotifyripper.tk: could not connect to host
 spotlightsrule.ddns.net: could not connect to host
+spr.id.au: did not receive HSTS header
 spreadsheets.google.com: did not receive HSTS header (error ignored - included regardless)
 sproutconnections.com: did not receive HSTS header
 sprybear.com: did not receive HSTS header
 square.gs: could not connect to host
 squatldf.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 sqzryang.com: did not receive HSTS header
 srevilak.net: did not receive HSTS header
 srna.sk: could not connect to host
@@ -4105,16 +4119,17 @@ subsys.no: did not receive HSTS header
 subtitle.rip: could not connect to host
 sudo.li: did not receive HSTS header
 suian.or.jp: max-age too low: 86400
 suite73.org: could not connect to host
 suksit.com: could not connect to host
 sumoatm.com: did not receive HSTS header
 sumoscout.de: did not receive HSTS header
 suncountrymarine.com: did not receive HSTS header
+sunflyer.cn: did not receive HSTS header
 sunnyfruit.ru: did not receive HSTS header
 sunshinepress.org: could not connect to host
 supcro.com: could not connect to host
 superbabysitting.ch: could not connect to host
 superbike.tw: could not connect to host
 supereight.net: did not receive HSTS header
 superiorfloridavacation.com: did not receive HSTS header
 supersalescontest.nl: did not receive HSTS header
@@ -4185,16 +4200,17 @@ taxsnaps.co.nz: did not receive HSTS hea
 tazz.in: could not connect to host
 tc-bonito.de: max-age too low: 3600
 tcao.info: could not connect to host
 tcby45.xyz: did not receive HSTS header
 tcdw.net: did not receive HSTS header
 tcl.ath.cx: did not receive HSTS header
 tcomms.org: max-age too low: 0
 tcp.expert: did not receive HSTS header
+tcptun.com: could not connect to host
 teachforcanada.ca: did not receive HSTS header
 team-teasers.com: could not connect to host
 teamsocial.co: did not receive HSTS header
 teamzeus.cz: could not connect to host
 tech55i.com: did not receive HSTS header
 techassist.io: did not receive HSTS header
 techelements.co: could not connect to host
 techhipster.net: could not connect to host
@@ -4329,31 +4345,32 @@ timwittenberg.com: could not connect to 
 tipbox.is: could not connect to host
 tipsyk.ru: could not connect to host
 tirex.media: did not receive HSTS header
 titanleaf.com: could not connect to host
 titouan.co: did not receive HSTS header
 tittelbach.at: did not receive HSTS header
 titties.ml: could not connect to host
 tjc.wiki: could not connect to host
+tkappertjedemetamorfose.nl: could not connect to host
 tkarstens.de: did not receive HSTS header
 tkat.ch: could not connect to host
 tkn.tokyo: could not connect to host
-tlach.cz: did not receive HSTS header
 tlo.hosting: could not connect to host
 tlo.link: did not receive HSTS header
 tlo.network: could not connect to host
 tloxygen.com: did not receive HSTS header
 tls.li: could not connect to host
 tm-solutions.eu: did not receive HSTS header
 tmaward.net: could not connect to host
 tmitchell.io: could not connect to host
 tmprod.com: did not receive HSTS header
 tncnanet.com.br: could not connect to host
 tnrsca.jp: did not receive HSTS header
+tobi-mayer.de: could not connect to host
 tobias-bielefeld.de: did not receive HSTS header
 tobiasmathes.com: could not connect to host
 tobiasmathes.name: could not connect to host
 tobiasofficial.at: could not connect to host
 todamateria.com.br: did not receive HSTS header
 todo.is: did not receive HSTS header
 todobazar.es: could not connect to host
 tollmanz.com: did not receive HSTS header
@@ -4389,21 +4406,21 @@ tradinghope.com: could not connect to ho
 traindb.nl: did not receive HSTS header
 trainut.com: could not connect to host
 transitownplaza.com: could not connect to host
 translate.googleapis.com: did not receive HSTS header (error ignored - included regardless)
 transportal.sk: did not receive HSTS header
 travelinsurance.co.nz: did not receive HSTS header
 treeby.net: could not connect to host
 trendberry.ru: could not connect to host
+trik.es: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 trinityaffirmations.com: max-age too low: 0
 trinitycore.org: max-age too low: 2592000
 tripdelta.com: did not receive HSTS header
 trixies-wish.nz: could not connect to host
-trkpuls.tk: could not connect to host
 trollme.me: could not connect to host
 trunkjunk.co: did not receive HSTS header
 trusitio.com: did not receive HSTS header
 trusteecar.com: did not receive HSTS header
 trustmeimfancy.com: could not connect to host
 trybind.com: could not connect to host
 tryoneday.co: did not receive HSTS header
 ts2.se: could not connect to host
@@ -4478,17 +4495,17 @@ unblocked.win: could not connect to host
 unblocked.works: did not receive HSTS header
 unblocked.world: did not receive HSTS header
 unccdesign.club: could not connect to host
 unclegen.xyz: could not connect to host
 undernet.uy: could not connect to host
 unfiltered.nyc: did not receive HSTS header
 unfuddle.cn: could not connect to host
 uni-games.com: could not connect to host
-unicooo.com: could not connect to host
+unicooo.com: did not receive HSTS header
 unison.com: did not receive HSTS header
 unisyssecurity.com: did not receive HSTS header
 unitedcyberdevelopment.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 unitlabs.net: could not connect to host
 university4industry.com: did not receive HSTS header
 univz.com: could not connect to host
 unknownphenomena.net: could not connect to host
 unplugg3r.dk: could not connect to host
@@ -4568,17 +4585,16 @@ videomuz.com: did not receive HSTS heade
 vidz.ga: could not connect to host
 vieaw.com: could not connect to host
 vietnamchevrolet.net: did not receive HSTS header
 vietnamphotographytours.com: did not receive HSTS header
 viewsea.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 vigilo.cf: could not connect to host
 vijos.org: did not receive HSTS header
 viktorsvantesson.net: did not receive HSTS header
-villasenor.online: could not connect to host
 vincentkooijman.at: did not receive HSTS header
 vincentkooijman.nl: did not receive HSTS header
 vincentpancol.com: could not connect to host
 vintageheartcoffee.com: did not receive HSTS header
 vio.no: did not receive HSTS header
 viperdns.com: could not connect to host
 vipi.es: could not connect to host
 vipmusic.ga: could not connect to host
@@ -4588,22 +4604,22 @@ visiontree-beta.eu: could not connect to
 visitbroadstairs.com: could not connect to host
 vissanum.com: did not receive HSTS header
 vistarait.com: did not receive HSTS header
 vitagenda.nl: could not connect to host
 vitalorange.com: did not receive HSTS header
 vitapingu.de: could not connect to host
 viva-french.com: did not receive HSTS header
 vivocloud.com: did not receive HSTS header
-vjirovsky.cz: could not connect to host
 vlastimilburian.cz: did not receive HSTS header
 vlora.city: could not connect to host
 vm0.eu: did not receive HSTS header
 vmrdev.com: could not connect to host
 voceinveste.com: did not receive HSTS header
+vodpay.com: could not connect to host
 vodpay.net: could not connect to host
 vodpay.org: could not connect to host
 voicesuk.co.uk: did not receive HSTS header
 voidi.ca: could not connect to host
 voidpay.com: could not connect to host
 voidpay.net: could not connect to host
 voidpay.org: could not connect to host
 volcrado.com: did not receive HSTS header
@@ -4674,16 +4690,17 @@ webswitch.io: could not connect to host
 webtechgadgetry.com: did not receive HSTS header
 webtiles.co.uk: could not connect to host
 webwork.pw: could not connect to host
 weddingenvelopes.co.uk: did not receive HSTS header
 weiyuz.com: could not connect to host
 weizenke.im: could not connect to host
 wellastore.ru: did not receive HSTS header
 wellsolveit.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
+welpy.com: could not connect to host
 weltmeisterschaft.net: could not connect to host
 weltverschwoerung.de: did not receive HSTS header
 weme.eu: could not connect to host
 wendalyncheng.com: did not receive HSTS header
 werdeeintimo.de: did not receive HSTS header
 werkenbijkfc.nl: did not receive HSTS header
 werkplaatsoost.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 werkruimtebottendaal.nl: did not receive HSTS header
@@ -4794,29 +4811,31 @@ www.sandbox.mydigipass.com: could not co
 www.surfeasy.com: did not receive HSTS header
 www.zenpayroll.com: did not receive HSTS header
 www3.info: could not connect to host
 wxukang.cn: could not connect to host
 wyzphoto.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 x-case.de: max-age too low: 0
 x2w.io: could not connect to host
 x3led.com: could not connect to host
+x509.pub: could not connect to host
+x509.pw: could not connect to host
 xa.search.yahoo.com: did not receive HSTS header
 xandocs.com: could not connect to host
 xatr0z.org: could not connect to host
 xavierbarroso.com: could not connect to host
 xcoop.me: could not connect to host
 xellos.ga: could not connect to host
 xellos.ml: could not connect to host
 xendo.net: could not connect to host
 xenesisziarovky.sk: could not connect to host
 xett.com: did not receive HSTS header
 xf-liam.com: did not receive HSTS header
 xfive.de: did not receive HSTS header
-xia100.xyz: did not receive HSTS header
+xia100.xyz: could not connect to host
 xiaody.me: could not connect to host
 xiaolvmu.me: could not connect to host
 xiaoxiao.im: could not connect to host
 ximens.me: did not receive HSTS header
 xisa.it: could not connect to host
 xiyu.moe: could not connect to host
 xmppwocky.net: could not connect to host
 xn--3lqt7ir4md4tzwa.cn: did not receive HSTS header
@@ -4833,16 +4852,17 @@ xn--datenrettung-mnchen-jbc.com: did not
 xn--dmonenjger-q5ag.net: could not connect to host
 xn--lgb3a8bcpn.cf: could not connect to host
 xn--lgb3a8bcpn.ga: could not connect to host
 xn--lgb3a8bcpn.gq: could not connect to host
 xn--lgb3a8bcpn.ml: could not connect to host
 xn--ls8hi7a.tk: could not connect to host
 xn--mgbbh2a9fub.xn--ngbc5azd: did not receive HSTS header
 xn--neb-tma3u8u.xyz: could not connect to host
+xn--pq1a637b.xn--6qq986b3xl: could not connect to host
 xn--werner-schffer-fib.de: could not connect to host
 xn--yoamomisuasbcn-ynb.com: could not connect to host
 xnode.org: did not receive HSTS header
 xobox.me: could not connect to host
 xoffy.com: did not receive HSTS header
 xombra.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121"  data: no]
 xpi.fr: could not connect to host
 xsmobile.de: could not connect to host
@@ -4888,33 +4908,34 @@ yoloprod.fr: could not connect to host
 yoloseo.com: could not connect to host
 youcontrol.ru: could not connect to host
 youngandunited.nl: did not receive HSTS header
 youon.tokyo: could not connect to host
 yourbapp.ch: could not connect to host
 yourcomputer.expert: did not receive HSTS header
 yoursecondphone.co: could not connect to host
 yourstrongbox.com: could not connect to host
+ypcs.fi: could not connect to host
 ypiresia.fr: could not connect to host
 ytcuber.xyz: could not connect to host
 yu.gg: did not receive HSTS header
 yuan.ga: did not receive HSTS header
 yuhen.ru: did not receive HSTS header
 yuko.moe: could not connect to host
 yunzhu.li: did not receive HSTS header
 yunzhu.org: could not connect to host
 yutabon.com: could not connect to host
 yux.io: did not receive HSTS header
 ywei.org: could not connect to host
 yzal.io: could not connect to host
 z33.ch: did not receive HSTS header
 z3liff.com: could not connect to host
 z3liff.net: could not connect to host
 za.search.yahoo.com: did not receive HSTS header
-zachgibbens.org: could not connect to host
+zachgibbens.org: did not receive HSTS header
 zadieheimlich.com: did not receive HSTS header
 zamorano.edu: could not connect to host
 zap.yt: could not connect to host
 zarooba.com: could not connect to host
 zbigniewgalucki.eu: did not receive HSTS header
 zbp.at: did not receive HSTS header
 zebrababy.cn: did not receive HSTS header
 zefiris.org: did not receive HSTS header
@@ -4928,16 +4949,18 @@ zentraler-kreditausschuss.de: did not re
 zentralwolke.de: did not receive HSTS header
 zera.com.au: could not connect to host
 zerolab.org: could not connect to host
 zertif.info: could not connect to host
 zerudi.com: did not receive HSTS header
 zett4.me: could not connect to host
 zeytin.pro: could not connect to host
 zh.search.yahoo.com: did not receive HSTS header
+zhang-hao.com: could not connect to host
+zhanghao.me: could not connect to host
 zhaojin97.cn: did not receive HSTS header
 zhendingresources.com: could not connect to host
 zinenapse.info: could not connect to host
 zirtue.io: could not connect to host
 ziyuanabc.xyz: could not connect to host
 zkillboard.com: did not receive HSTS header
 zking.ga: could not connect to host
 zmy.im: did not receive HSTS header
@@ -4954,9 +4977,8 @@ zqhong.com: could not connect to host
 ztan.tk: could not connect to host
 ztcaoll222.cn: did not receive HSTS header
 zten.org: could not connect to host
 zulu7.com: could not connect to host
 zvncloud.com: did not receive HSTS header
 zwollemagazine.nl: did not receive HSTS header
 zwy.me: did not receive HSTS header
 zyf.pw: could not connect to host
-zymbit.com: could not connect to host
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -3,17 +3,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /*****************************************************************************/
 /* This is an automatically generated file. If you're not                    */
 /* nsSiteSecurityService.cpp, you shouldn't be #including it.     */
 /*****************************************************************************/
 
 #include <stdint.h>
-const PRTime gPreloadListExpirationTime = INT64_C(1499008573994000);
+const PRTime gPreloadListExpirationTime = INT64_C(1499095501319000);
 
 static const char kSTSHostTable[] = {
   /* "0.me.uk", true */ '0', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "007-preisvergleich.de", true */ '0', '0', '7', '-', 'p', 'r', 'e', 'i', 's', 'v', 'e', 'r', 'g', 'l', 'e', 'i', 'c', 'h', '.', 'd', 'e', '\0',
   /* "0100dev.com", true */ '0', '1', '0', '0', 'd', 'e', 'v', '.', 'c', 'o', 'm', '\0',
   /* "0100dev.nl", true */ '0', '1', '0', '0', 'd', 'e', 'v', '.', 'n', 'l', '\0',
   /* "01electronica.com.ar", true */ '0', '1', 'e', 'l', 'e', 'c', 't', 'r', 'o', 'n', 'i', 'c', 'a', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
   /* "01seguridad.com.ar", true */ '0', '1', 's', 'e', 'g', 'u', 'r', 'i', 'd', 'a', 'd', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
@@ -23,16 +23,17 @@ static const char kSTSHostTable[] = {
   /* "0au.de", true */ '0', 'a', 'u', '.', 'd', 'e', '\0',
   /* "0day.su", true */ '0', 'd', 'a', 'y', '.', 's', 'u', '\0',
   /* "0i0.nl", true */ '0', 'i', '0', '.', 'n', 'l', '\0',
   /* "0ik.de", true */ '0', 'i', 'k', '.', 'd', 'e', '\0',
   /* "0knowledge.de", true */ '0', 'k', 'n', 'o', 'w', 'l', 'e', 'd', 'g', 'e', '.', 'd', 'e', '\0',
   /* "0o0.ooo", true */ '0', 'o', '0', '.', 'o', 'o', 'o', '\0',
   /* "0paste.com", true */ '0', 'p', 'a', 's', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "0x.cx", true */ '0', 'x', '.', 'c', 'x', '\0',
+  /* "0x.sk", true */ '0', 'x', '.', 's', 'k', '\0',
   /* "0x17.de", true */ '0', 'x', '1', '7', '.', 'd', 'e', '\0',
   /* "0x52.net", true */ '0', 'x', '5', '2', '.', 'n', 'e', 't', '\0',
   /* "0x52.org", true */ '0', 'x', '5', '2', '.', 'o', 'r', 'g', '\0',
   /* "0x539.pw", true */ '0', 'x', '5', '3', '9', '.', 'p', 'w', '\0',
   /* "0x65.net", true */ '0', 'x', '6', '5', '.', 'n', 'e', 't', '\0',
   /* "0x90.fi", true */ '0', 'x', '9', '0', '.', 'f', 'i', '\0',
   /* "0x90.io", true */ '0', 'x', '9', '0', '.', 'i', 'o', '\0',
   /* "0xAA55.me", true */ '0', 'x', 'A', 'A', '5', '5', '.', 'm', 'e', '\0',
@@ -129,17 +130,16 @@ static const char kSTSHostTable[] = {
   /* "2hypeenterprises.com", true */ '2', 'h', 'y', 'p', 'e', 'e', 'n', 't', 'e', 'r', 'p', 'r', 'i', 's', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "2intermediate.co.uk", true */ '2', 'i', 'n', 't', 'e', 'r', 'm', 'e', 'd', 'i', 'a', 't', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "2kgwf.fi", true */ '2', 'k', 'g', 'w', 'f', '.', 'f', 'i', '\0',
   /* "2nains.ch", true */ '2', 'n', 'a', 'i', 'n', 's', '.', 'c', 'h', '\0',
   /* "2nerds1bit.com", true */ '2', 'n', 'e', 'r', 'd', 's', '1', 'b', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "2pay.fr", true */ '2', 'p', 'a', 'y', '.', 'f', 'r', '\0',
   /* "2programmers.net", true */ '2', 'p', 'r', 'o', 'g', 'r', 'a', 'm', 'm', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "2ulcceria.nl", true */ '2', 'u', 'l', 'c', 'c', 'e', 'r', 'i', 'a', '.', 'n', 'l', '\0',
-  /* "300m.com", true */ '3', '0', '0', 'm', '.', 'c', 'o', 'm', '\0',
   /* "314chan.org", false */ '3', '1', '4', 'c', 'h', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "31tv.ru", true */ '3', '1', 't', 'v', '.', 'r', 'u', '\0',
   /* "321live.nl", true */ '3', '2', '1', 'l', 'i', 'v', 'e', '.', 'n', 'l', '\0',
   /* "32h.de", true */ '3', '2', 'h', '.', 'd', 'e', '\0',
   /* "32ph.com", true */ '3', '2', 'p', 'h', '.', 'c', 'o', 'm', '\0',
   /* "33-km.ru", true */ '3', '3', '-', 'k', 'm', '.', 'r', 'u', '\0',
   /* "3473-wiki.de", true */ '3', '4', '7', '3', '-', 'w', 'i', 'k', 'i', '.', 'd', 'e', '\0',
   /* "35792.de", true */ '3', '5', '7', '9', '2', '.', 'd', 'e', '\0',
@@ -183,16 +183,17 @@ static const char kSTSHostTable[] = {
   /* "4x.fi", true */ '4', 'x', '.', 'f', 'i', '\0',
   /* "500p.xyz", true */ '5', '0', '0', 'p', '.', 'x', 'y', 'z', '\0',
   /* "50plusnet.nl", true */ '5', '0', 'p', 'l', 'u', 's', 'n', 'e', 't', '.', 'n', 'l', '\0',
   /* "54below.com", true */ '5', '4', 'b', 'e', 'l', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "54bf.com", true */ '5', '4', 'b', 'f', '.', 'c', 'o', 'm', '\0',
   /* "57aromas.com", true */ '5', '7', 'a', 'r', 'o', 'm', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "5apps.com", true */ '5', 'a', 'p', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "5h0r7.com", true */ '5', 'h', '0', 'r', '7', '.', 'c', 'o', 'm', '\0',
+  /* "646.io", false */ '6', '4', '6', '.', 'i', 'o', '\0',
   /* "6660111.ru", true */ '6', '6', '6', '0', '1', '1', '1', '.', 'r', 'u', '\0',
   /* "692b8c32.de", true */ '6', '9', '2', 'b', '8', 'c', '3', '2', '.', 'd', 'e', '\0',
   /* "6969.us", true */ '6', '9', '6', '9', '.', 'u', 's', '\0',
   /* "69square.com", true */ '6', '9', 's', 'q', 'u', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "700.az", true */ '7', '0', '0', '.', 'a', 'z', '\0',
   /* "7183.org", true */ '7', '1', '8', '3', '.', 'o', 'r', 'g', '\0',
   /* "777coin.com", true */ '7', '7', '7', 'c', 'o', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "7sons.de", true */ '7', 's', 'o', 'n', 's', '.', 'd', 'e', '\0',
@@ -381,17 +382,16 @@ static const char kSTSHostTable[] = {
   /* "adonnante.com", true */ 'a', 'd', 'o', 'n', 'n', 'a', 'n', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "adoptionlink.co.uk", true */ 'a', 'd', 'o', 'p', 't', 'i', 'o', 'n', 'l', 'i', 'n', 'k', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "adorai.tk", true */ 'a', 'd', 'o', 'r', 'a', 'i', '.', 't', 'k', '\0',
   /* "adquisitio.in", true */ 'a', 'd', 'q', 'u', 'i', 's', 'i', 't', 'i', 'o', '.', 'i', 'n', '\0',
   /* "adr.gov", true */ 'a', 'd', 'r', '.', 'g', 'o', 'v', '\0',
   /* "adrenaline-gaming.ru", false */ 'a', 'd', 'r', 'e', 'n', 'a', 'l', 'i', 'n', 'e', '-', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'r', 'u', '\0',
   /* "adrianajewelry.my", true */ 'a', 'd', 'r', 'i', 'a', 'n', 'a', 'j', 'e', 'w', 'e', 'l', 'r', 'y', '.', 'm', 'y', '\0',
   /* "adrinet.tk", true */ 'a', 'd', 'r', 'i', 'n', 'e', 't', '.', 't', 'k', '\0',
-  /* "aduedu.de", true */ 'a', 'd', 'u', 'e', 'd', 'u', '.', 'd', 'e', '\0',
   /* "aduvi.de", true */ 'a', 'd', 'u', 'v', 'i', '.', 'd', 'e', '\0',
   /* "advanced-online.eu", true */ 'a', 'd', 'v', 'a', 'n', 'c', 'e', 'd', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'e', 'u', '\0',
   /* "advanced-scribes.com", true */ 'a', 'd', 'v', 'a', 'n', 'c', 'e', 'd', '-', 's', 'c', 'r', 'i', 'b', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "advanced.info", true */ 'a', 'd', 'v', 'a', 'n', 'c', 'e', 'd', '.', 'i', 'n', 'f', 'o', '\0',
   /* "advancedseotool.it", true */ 'a', 'd', 'v', 'a', 'n', 'c', 'e', 'd', 's', 'e', 'o', 't', 'o', 'o', 'l', '.', 'i', 't', '\0',
   /* "advancis.net", true */ 'a', 'd', 'v', 'a', 'n', 'c', 'i', 's', '.', 'n', 'e', 't', '\0',
   /* "advelty.cz", true */ 'a', 'd', 'v', 'e', 'l', 't', 'y', '.', 'c', 'z', '\0',
   /* "adventistdeploy.org", true */ 'a', 'd', 'v', 'e', 'n', 't', 'i', 's', 't', 'd', 'e', 'p', 'l', 'o', 'y', '.', 'o', 'r', 'g', '\0',
@@ -498,17 +498,16 @@ static const char kSTSHostTable[] = {
   /* "aiwdirect.com", true */ 'a', 'i', 'w', 'd', 'i', 'r', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "ajouin.com", true */ 'a', 'j', 'o', 'u', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "akachanikuji.com", true */ 'a', 'k', 'a', 'c', 'h', 'a', 'n', 'i', 'k', 'u', 'j', 'i', '.', 'c', 'o', 'm', '\0',
   /* "akaoma.com", true */ 'a', 'k', 'a', 'o', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "akay.me", true */ 'a', 'k', 'a', 'y', '.', 'm', 'e', '\0',
   /* "akboy.pw", true */ 'a', 'k', 'b', 'o', 'y', '.', 'p', 'w', '\0',
   /* "akdigitalegesellschaft.de", false */ 'a', 'k', 'd', 'i', 'g', 'i', 't', 'a', 'l', 'e', 'g', 'e', 's', 'e', 'l', 'l', 's', 'c', 'h', 'a', 'f', 't', '.', 'd', 'e', '\0',
   /* "akelius.de", false */ 'a', 'k', 'e', 'l', 'i', 'u', 's', '.', 'd', 'e', '\0',
-  /* "akerek.hu", true */ 'a', 'k', 'e', 'r', 'e', 'k', '.', 'h', 'u', '\0',
   /* "akhilindurti.com", false */ 'a', 'k', 'h', 'i', 'l', 'i', 'n', 'd', 'u', 'r', 't', 'i', '.', 'c', 'o', 'm', '\0',
   /* "akhras.at", true */ 'a', 'k', 'h', 'r', 'a', 's', '.', 'a', 't', '\0',
   /* "akostecki.de", true */ 'a', 'k', 'o', 's', 't', 'e', 'c', 'k', 'i', '.', 'd', 'e', '\0',
   /* "akovana.com", true */ 'a', 'k', 'o', 'v', 'a', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "akoww.de", true */ 'a', 'k', 'o', 'w', 'w', '.', 'd', 'e', '\0',
   /* "akpwebdesign.com", true */ 'a', 'k', 'p', 'w', 'e', 'b', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "akr.io", true */ 'a', 'k', 'r', '.', 'i', 'o', '\0',
   /* "akropolis-ravensburg.de", true */ 'a', 'k', 'r', 'o', 'p', 'o', 'l', 'i', 's', '-', 'r', 'a', 'v', 'e', 'n', 's', 'b', 'u', 'r', 'g', '.', 'd', 'e', '\0',
@@ -573,17 +572,16 @@ static const char kSTSHostTable[] = {
   /* "alexyang.me", true */ 'a', 'l', 'e', 'x', 'y', 'a', 'n', 'g', '.', 'm', 'e', '\0',
   /* "alfa-tech.su", true */ 'a', 'l', 'f', 'a', '-', 't', 'e', 'c', 'h', '.', 's', 'u', '\0',
   /* "alfredxing.com", false */ 'a', 'l', 'f', 'r', 'e', 'd', 'x', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "algarmatic-automatismos.pt", true */ 'a', 'l', 'g', 'a', 'r', 'm', 'a', 't', 'i', 'c', '-', 'a', 'u', 't', 'o', 'm', 'a', 't', 'i', 's', 'm', 'o', 's', '.', 'p', 't', '\0',
   /* "algolia.com", true */ 'a', 'l', 'g', 'o', 'l', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "alicestudio.it", true */ 'a', 'l', 'i', 'c', 'e', 's', 't', 'u', 'd', 'i', 'o', '.', 'i', 't', '\0',
   /* "alienstat.com", true */ 'a', 'l', 'i', 'e', 'n', 's', 't', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "alinasmusicstudio.com", true */ 'a', 'l', 'i', 'n', 'a', 's', 'm', 'u', 's', 'i', 'c', 's', 't', 'u', 'd', 'i', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "alinode.com", true */ 'a', 'l', 'i', 'n', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "alisonisrealestate.com", true */ 'a', 'l', 'i', 's', 'o', 'n', 'i', 's', 'r', 'e', 'a', 'l', 'e', 's', 't', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "alisonlitchfield.com", true */ 'a', 'l', 'i', 's', 'o', 'n', 'l', 'i', 't', 'c', 'h', 'f', 'i', 'e', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "alisync.com", true */ 'a', 'l', 'i', 's', 'y', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "aljaspod.hu", true */ 'a', 'l', 'j', 'a', 's', 'p', 'o', 'd', '.', 'h', 'u', '\0',
   /* "aljaspod.net", true */ 'a', 'l', 'j', 'a', 's', 'p', 'o', 'd', '.', 'n', 'e', 't', '\0',
   /* "alkamitech.com", true */ 'a', 'l', 'k', 'a', 'm', 'i', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "alkel.info", true */ 'a', 'l', 'k', 'e', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "all-connect.net", false */ 'a', 'l', 'l', '-', 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'n', 'e', 't', '\0',
@@ -662,16 +660,17 @@ static const char kSTSHostTable[] = {
   /* "amdouglas.uk", true */ 'a', 'm', 'd', 'o', 'u', 'g', 'l', 'a', 's', '.', 'u', 'k', '\0',
   /* "ameego.com", true */ 'a', 'm', 'e', 'e', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ameego.it", true */ 'a', 'm', 'e', 'e', 'g', 'o', '.', 'i', 't', '\0',
   /* "ameego.net", true */ 'a', 'm', 'e', 'e', 'g', 'o', '.', 'n', 'e', 't', '\0',
   /* "ameego.nl", true */ 'a', 'm', 'e', 'e', 'g', 'o', '.', 'n', 'l', '\0',
   /* "ameego.org", true */ 'a', 'm', 'e', 'e', 'g', 'o', '.', 'o', 'r', 'g', '\0',
   /* "amees.me", true */ 'a', 'm', 'e', 'e', 's', '.', 'm', 'e', '\0',
   /* "american.dating", true */ 'a', 'm', 'e', 'r', 'i', 'c', 'a', 'n', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
+  /* "americanbio.com", true */ 'a', 'm', 'e', 'r', 'i', 'c', 'a', 'n', 'b', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "americansportsinstitute.org", true */ 'a', 'm', 'e', 'r', 'i', 'c', 'a', 'n', 's', 'p', 'o', 'r', 't', 's', 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "americkykongres.cz", true */ 'a', 'm', 'e', 'r', 'i', 'c', 'k', 'y', 'k', 'o', 'n', 'g', 'r', 'e', 's', '.', 'c', 'z', '\0',
   /* "amerigroup.com", true */ 'a', 'm', 'e', 'r', 'i', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "amerimarkdirect.com", true */ 'a', 'm', 'e', 'r', 'i', 'm', 'a', 'r', 'k', 'd', 'i', 'r', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "amerimex.cc", true */ 'a', 'm', 'e', 'r', 'i', 'm', 'e', 'x', '.', 'c', 'c', '\0',
   /* "ameza.co.uk", true */ 'a', 'm', 'e', 'z', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "ameza.com.mx", true */ 'a', 'm', 'e', 'z', 'a', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0',
   /* "ameza.io", true */ 'a', 'm', 'e', 'z', 'a', '.', 'i', 'o', '\0',
@@ -1010,16 +1009,19 @@ static const char kSTSHostTable[] = {
   /* "askmagicconch.com", true */ 'a', 's', 'k', 'm', 'a', 'g', 'i', 'c', 'c', 'o', 'n', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "askme24.de", true */ 'a', 's', 'k', 'm', 'e', '2', '4', '.', 'd', 'e', '\0',
   /* "askwhy.cz", true */ 'a', 's', 'k', 'w', 'h', 'y', '.', 'c', 'z', '\0',
   /* "askwhy.eu", true */ 'a', 's', 'k', 'w', 'h', 'y', '.', 'e', 'u', '\0',
   /* "aspargesgaarden.no", true */ 'a', 's', 'p', 'a', 'r', 'g', 'e', 's', 'g', 'a', 'a', 'r', 'd', 'e', 'n', '.', 'n', 'o', '\0',
   /* "asphaltfruehling.de", true */ 'a', 's', 'p', 'h', 'a', 'l', 't', 'f', 'r', 'u', 'e', 'h', 'l', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "asphyxia.su", true */ 'a', 's', 'p', 'h', 'y', 'x', 'i', 'a', '.', 's', 'u', '\0',
   /* "aspires.co.jp", true */ 'a', 's', 'p', 'i', 'r', 'e', 's', '.', 'c', 'o', '.', 'j', 'p', '\0',
+  /* "asr.li", true */ 'a', 's', 'r', '.', 'l', 'i', '\0',
+  /* "asr.rocks", true */ 'a', 's', 'r', '.', 'r', 'o', 'c', 'k', 's', '\0',
+  /* "asr.solar", true */ 'a', 's', 'r', '.', 's', 'o', 'l', 'a', 'r', '\0',
   /* "assemble-together.org", true */ 'a', 's', 's', 'e', 'm', 'b', 'l', 'e', '-', 't', 'o', 'g', 'e', 't', 'h', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "assindia.nl", true */ 'a', 's', 's', 'i', 'n', 'd', 'i', 'a', '.', 'n', 'l', '\0',
   /* "assurancesmons.be", true */ 'a', 's', 's', 'u', 'r', 'a', 'n', 'c', 'e', 's', 'm', 'o', 'n', 's', '.', 'b', 'e', '\0',
   /* "asta-bar.de", true */ 'a', 's', 't', 'a', '-', 'b', 'a', 'r', '.', 'd', 'e', '\0',
   /* "astengox.com", true */ 'a', 's', 't', 'e', 'n', 'g', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "astrea-voetbal-groningen.nl", true */ 'a', 's', 't', 'r', 'e', 'a', '-', 'v', 'o', 'e', 't', 'b', 'a', 'l', '-', 'g', 'r', 'o', 'n', 'i', 'n', 'g', 'e', 'n', '.', 'n', 'l', '\0',
   /* "asuhe.cc", true */ 'a', 's', 'u', 'h', 'e', '.', 'c', 'c', '\0',
   /* "asuhe.xyz", true */ 'a', 's', 'u', 'h', 'e', '.', 'x', 'y', 'z', '\0',
@@ -1510,17 +1512,16 @@ static const char kSTSHostTable[] = {
   /* "biboumail.fr", true */ 'b', 'i', 'b', 'o', 'u', 'm', 'a', 'i', 'l', '.', 'f', 'r', '\0',
   /* "bicha.net", true */ 'b', 'i', 'c', 'h', 'a', '.', 'n', 'e', 't', '\0',
   /* "bichonmaltes.com.br", true */ 'b', 'i', 'c', 'h', 'o', 'n', 'm', 'a', 'l', 't', 'e', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "bicranial.io", true */ 'b', 'i', 'c', 'r', 'a', 'n', 'i', 'a', 'l', '.', 'i', 'o', '\0',
   /* "bicycle-events.com", true */ 'b', 'i', 'c', 'y', 'c', 'l', 'e', '-', 'e', 'v', 'e', 'n', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "biddl.com", true */ 'b', 'i', 'd', 'd', 'l', '.', 'c', 'o', 'm', '\0',
   /* "bielsa.me", true */ 'b', 'i', 'e', 'l', 's', 'a', '.', 'm', 'e', '\0',
   /* "bienici.com", true */ 'b', 'i', 'e', 'n', 'i', 'c', 'i', '.', 'c', 'o', 'm', '\0',
-  /* "bierbaumer.net", true */ 'b', 'i', 'e', 'r', 'b', 'a', 'u', 'm', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "bierbringer.at", true */ 'b', 'i', 'e', 'r', 'b', 'r', 'i', 'n', 'g', 'e', 'r', '.', 'a', 't', '\0',
   /* "biergaizi.info", true */ 'b', 'i', 'e', 'r', 'g', 'a', 'i', 'z', 'i', '.', 'i', 'n', 'f', 'o', '\0',
   /* "bieser.ch", true */ 'b', 'i', 'e', 's', 'e', 'r', '.', 'c', 'h', '\0',
   /* "big-andy.co.uk", true */ 'b', 'i', 'g', '-', 'a', 'n', 'd', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "bigbluedoor.net", true */ 'b', 'i', 'g', 'b', 'l', 'u', 'e', 'd', 'o', 'o', 'r', '.', 'n', 'e', 't', '\0',
   /* "bigclassaction.com", true */ 'b', 'i', 'g', 'c', 'l', 'a', 's', 's', 'a', 'c', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "bight.ca", true */ 'b', 'i', 'g', 'h', 't', '.', 'c', 'a', '\0',
   /* "bigskymontanalandforsale.com", true */ 'b', 'i', 'g', 's', 'k', 'y', 'm', 'o', 'n', 't', 'a', 'n', 'a', 'l', 'a', 'n', 'd', 'f', 'o', 'r', 's', 'a', 'l', 'e', '.', 'c', 'o', 'm', '\0',
@@ -2022,17 +2023,16 @@ static const char kSTSHostTable[] = {
   /* "bunsenlabs.org", true */ 'b', 'u', 'n', 's', 'e', 'n', 'l', 'a', 'b', 's', '.', 'o', 'r', 'g', '\0',
   /* "buonventosbt.eu", true */ 'b', 'u', 'o', 'n', 'v', 'e', 'n', 't', 'o', 's', 'b', 't', '.', 'e', 'u', '\0',
   /* "bureaubolster.nl", true */ 'b', 'u', 'r', 'e', 'a', 'u', 'b', 'o', 'l', 's', 't', 'e', 'r', '.', 'n', 'l', '\0',
   /* "burgers.io", true */ 'b', 'u', 'r', 'g', 'e', 'r', 's', '.', 'i', 'o', '\0',
   /* "buri.be", false */ 'b', 'u', 'r', 'i', '.', 'b', 'e', '\0',
   /* "burningcrash.de", true */ 'b', 'u', 'r', 'n', 'i', 'n', 'g', 'c', 'r', 'a', 's', 'h', '.', 'd', 'e', '\0',
   /* "burningflipside.com", true */ 'b', 'u', 'r', 'n', 'i', 'n', 'g', 'f', 'l', 'i', 'p', 's', 'i', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "burnworks.com", true */ 'b', 'u', 'r', 'n', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
-  /* "burpsuite.site", true */ 'b', 'u', 'r', 'p', 's', 'u', 'i', 't', 'e', '.', 's', 'i', 't', 'e', '\0',
   /* "burr.is", true */ 'b', 'u', 'r', 'r', '.', 'i', 's', '\0',
   /* "burtrum.family", true */ 'b', 'u', 'r', 't', 'r', 'u', 'm', '.', 'f', 'a', 'm', 'i', 'l', 'y', '\0',
   /* "burtrum.name", true */ 'b', 'u', 'r', 't', 'r', 'u', 'm', '.', 'n', 'a', 'm', 'e', '\0',
   /* "burtrum.org", true */ 'b', 'u', 'r', 't', 'r', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "burzmali.com", true */ 'b', 'u', 'r', 'z', 'm', 'a', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "busindre.com", true */ 'b', 'u', 's', 'i', 'n', 'd', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "business.facebook.com", false */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "business.medbank.com.mt", true */ 'b', 'u', 's', 'i', 'n', 'e', 's', 's', '.', 'm', 'e', 'd', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '.', 'm', 't', '\0',
@@ -2146,17 +2146,16 @@ static const char kSTSHostTable[] = {
   /* "calculator-imt.com", true */ 'c', 'a', 'l', 'c', 'u', 'l', 'a', 't', 'o', 'r', '-', 'i', 'm', 't', '.', 'c', 'o', 'm', '\0',
   /* "calculator.tf", true */ 'c', 'a', 'l', 'c', 'u', 'l', 'a', 't', 'o', 'r', '.', 't', 'f', '\0',
   /* "calebmorris.com", false */ 'c', 'a', 'l', 'e', 'b', 'm', 'o', 'r', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "caletka.cz", true */ 'c', 'a', 'l', 'e', 't', 'k', 'a', '.', 'c', 'z', '\0',
   /* "calgoty.com", true */ 'c', 'a', 'l', 'g', 'o', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "calibreapp.com", false */ 'c', 'a', 'l', 'i', 'b', 'r', 'e', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "calibso.net", true */ 'c', 'a', 'l', 'i', 'b', 's', 'o', '.', 'n', 'e', 't', '\0',
   /* "calixte-concept.fr", true */ 'c', 'a', 'l', 'i', 'x', 't', 'e', '-', 'c', 'o', 'n', 'c', 'e', 'p', 't', '.', 'f', 'r', '\0',
-  /* "call.me", false */ 'c', 'a', 'l', 'l', '.', 'm', 'e', '\0',
   /* "callabs.net", true */ 'c', 'a', 'l', 'l', 'a', 'b', 's', '.', 'n', 'e', 't', '\0',
   /* "callaction.co", true */ 'c', 'a', 'l', 'l', 'a', 'c', 't', 'i', 'o', 'n', '.', 'c', 'o', '\0',
   /* "callear.org", true */ 'c', 'a', 'l', 'l', 'e', 'a', 'r', '.', 'o', 'r', 'g', '\0',
   /* "callhub.io", true */ 'c', 'a', 'l', 'l', 'h', 'u', 'b', '.', 'i', 'o', '\0',
   /* "callision.com", true */ 'c', 'a', 'l', 'l', 'i', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "callsigns.ca", true */ 'c', 'a', 'l', 'l', 's', 'i', 'g', 'n', 's', '.', 'c', 'a', '\0',
   /* "calomel.org", true */ 'c', 'a', 'l', 'o', 'm', 'e', 'l', '.', 'o', 'r', 'g', '\0',
   /* "calories.org", true */ 'c', 'a', 'l', 'o', 'r', 'i', 'e', 's', '.', 'o', 'r', 'g', '\0',
@@ -2411,16 +2410,17 @@ static const char kSTSHostTable[] = {
   /* "charlierogers.co.uk", true */ 'c', 'h', 'a', 'r', 'l', 'i', 'e', 'r', 'o', 'g', 'e', 'r', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "charlierogers.com", true */ 'c', 'h', 'a', 'r', 'l', 'i', 'e', 'r', 'o', 'g', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "charlottesvillegolfcommunities.com", true */ 'c', 'h', 'a', 'r', 'l', 'o', 't', 't', 'e', 's', 'v', 'i', 'l', 'l', 'e', 'g', 'o', 'l', 'f', 'c', 'o', 'm', 'm', 'u', 'n', 'i', 't', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "charmander.me", true */ 'c', 'h', 'a', 'r', 'm', 'a', 'n', 'd', 'e', 'r', '.', 'm', 'e', '\0',
   /* "charmyadesara.com", true */ 'c', 'h', 'a', 'r', 'm', 'y', 'a', 'd', 'e', 's', 'a', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "charr.xyz", true */ 'c', 'h', 'a', 'r', 'r', '.', 'x', 'y', 'z', '\0',
   /* "charta-digitale-vernetzung.de", true */ 'c', 'h', 'a', 'r', 't', 'a', '-', 'd', 'i', 'g', 'i', 't', 'a', 'l', 'e', '-', 'v', 'e', 'r', 'n', 'e', 't', 'z', 'u', 'n', 'g', '.', 'd', 'e', '\0',
   /* "charteroak.org", true */ 'c', 'h', 'a', 'r', 't', 'e', 'r', 'o', 'a', 'k', '.', 'o', 'r', 'g', '\0',
+  /* "chaska.co.za", true */ 'c', 'h', 'a', 's', 'k', 'a', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "chat-porc.eu", true */ 'c', 'h', 'a', 't', '-', 'p', 'o', 'r', 'c', '.', 'e', 'u', '\0',
   /* "chatbelgie.eu", true */ 'c', 'h', 'a', 't', 'b', 'e', 'l', 'g', 'i', 'e', '.', 'e', 'u', '\0',
   /* "chatear.social", true */ 'c', 'h', 'a', 't', 'e', 'a', 'r', '.', 's', 'o', 'c', 'i', 'a', 'l', '\0',
   /* "chateau-belvoir.com", true */ 'c', 'h', 'a', 't', 'e', 'a', 'u', '-', 'b', 'e', 'l', 'v', 'o', 'i', 'r', '.', 'c', 'o', 'm', '\0',
   /* "chatnederland.eu", true */ 'c', 'h', 'a', 't', 'n', 'e', 'd', 'e', 'r', 'l', 'a', 'n', 'd', '.', 'e', 'u', '\0',
   /* "chatxp.com", true */ 'c', 'h', 'a', 't', 'x', 'p', '.', 'c', 'o', 'm', '\0',
   /* "chaz6.com", true */ 'c', 'h', 'a', 'z', '6', '.', 'c', 'o', 'm', '\0',
   /* "chazay.net", false */ 'c', 'h', 'a', 'z', 'a', 'y', '.', 'n', 'e', 't', '\0',
@@ -2442,16 +2442,17 @@ static const char kSTSHostTable[] = {
   /* "cheez.systems", true */ 'c', 'h', 'e', 'e', 'z', '.', 's', 'y', 's', 't', 'e', 'm', 's', '\0',
   /* "chelseafs.co.uk", true */ 'c', 'h', 'e', 'l', 's', 'e', 'a', 'f', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "chenapartment.com", true */ 'c', 'h', 'e', 'n', 'a', 'p', 'a', 'r', 't', 'm', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "chengl.com", true */ 'c', 'h', 'e', 'n', 'g', 'l', '.', 'c', 'o', 'm', '\0',
   /* "chenky.com", true */ 'c', 'h', 'e', 'n', 'k', 'y', '.', 'c', 'o', 'm', '\0',
   /* "chennien.com", true */ 'c', 'h', 'e', 'n', 'n', 'i', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "chenzhekl.me", true */ 'c', 'h', 'e', 'n', 'z', 'h', 'e', 'k', 'l', '.', 'm', 'e', '\0',
   /* "chepaofen.com", true */ 'c', 'h', 'e', 'p', 'a', 'o', 'f', 'e', 'n', '.', 'c', 'o', 'm', '\0',
+  /* "cherryonit.com", true */ 'c', 'h', 'e', 'r', 'r', 'y', 'o', 'n', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "cherrywoodtech.com", true */ 'c', 'h', 'e', 'r', 'r', 'y', 'w', 'o', 'o', 'd', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "chesterbrass.uk", true */ 'c', 'h', 'e', 's', 't', 'e', 'r', 'b', 'r', 'a', 's', 's', '.', 'u', 'k', '\0',
   /* "chestnut.cf", true */ 'c', 'h', 'e', 's', 't', 'n', 'u', 't', '.', 'c', 'f', '\0',
   /* "chewey.de", true */ 'c', 'h', 'e', 'w', 'e', 'y', '.', 'd', 'e', '\0',
   /* "chewey.org", true */ 'c', 'h', 'e', 'w', 'e', 'y', '.', 'o', 'r', 'g', '\0',
   /* "chfr.search.yahoo.com", false */ 'c', 'h', 'f', 'r', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "chhy.at", true */ 'c', 'h', 'h', 'y', '.', 'a', 't', '\0',
   /* "chiaramail.com", true */ 'c', 'h', 'i', 'a', 'r', 'a', 'm', 'a', 'i', 'l', '.', 'c', 'o', 'm', '\0',
@@ -2673,18 +2674,16 @@ static const char kSTSHostTable[] = {
   /* "clvs7.com", true */ 'c', 'l', 'v', 's', '7', '.', 'c', 'o', 'm', '\0',
   /* "cmahy.be", true */ 'c', 'm', 'a', 'h', 'y', '.', 'b', 'e', '\0',
   /* "cmdline.org", true */ 'c', 'm', 'd', 'l', 'i', 'n', 'e', '.', 'o', 'r', 'g', '\0',
   /* "cmylife.nl", true */ 'c', 'm', 'y', 'l', 'i', 'f', 'e', '.', 'n', 'l', '\0',
   /* "cnam.net", true */ 'c', 'n', 'a', 'm', '.', 'n', 'e', 't', '\0',
   /* "cnc-lehrgang.de", true */ 'c', 'n', 'c', '-', 'l', 'e', 'h', 'r', 'g', 'a', 'n', 'g', '.', 'd', 'e', '\0',
   /* "cncn.us", true */ 'c', 'n', 'c', 'n', '.', 'u', 's', '\0',
   /* "cnlic.com", true */ 'c', 'n', 'l', 'i', 'c', '.', 'c', 'o', 'm', '\0',
-  /* "cnwage.com", true */ 'c', 'n', 'w', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "cnwarn.com", true */ 'c', 'n', 'w', 'a', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "co.search.yahoo.com", false */ 'c', 'o', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "coachingconsultancy.com", true */ 'c', 'o', 'a', 'c', 'h', 'i', 'n', 'g', 'c', 'o', 'n', 's', 'u', 'l', 't', 'a', 'n', 'c', 'y', '.', 'c', 'o', 'm', '\0',
   /* "coalpointcottage.com", true */ 'c', 'o', 'a', 'l', 'p', 'o', 'i', 'n', 't', 'c', 'o', 't', 't', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "coam.co", true */ 'c', 'o', 'a', 'm', '.', 'c', 'o', '\0',
   /* "coatl-industries.com", true */ 'c', 'o', 'a', 't', 'l', '-', 'i', 'n', 'd', 'u', 's', 't', 'r', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "cobalt.io", true */ 'c', 'o', 'b', 'a', 'l', 't', '.', 'i', 'o', '\0',
   /* "cobrasystems.nl", true */ 'c', 'o', 'b', 'r', 'a', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'n', 'l', '\0',
   /* "cocaine.ninja", true */ 'c', 'o', 'c', 'a', 'i', 'n', 'e', '.', 'n', 'i', 'n', 'j', 'a', '\0',
@@ -2701,24 +2700,24 @@ static const char kSTSHostTable[] = {
   /* "code.facebook.com", false */ 'c', 'o', 'd', 'e', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "code.fm", true */ 'c', 'o', 'd', 'e', '.', 'f', 'm', '\0',
   /* "code.google.com", true */ 'c', 'o', 'd', 'e', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "code67.com", true */ 'c', 'o', 'd', 'e', '6', '7', '.', 'c', 'o', 'm', '\0',
   /* "codebrahma.com", true */ 'c', 'o', 'd', 'e', 'b', 'r', 'a', 'h', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "codedump.net", true */ 'c', 'o', 'd', 'e', 'd', 'u', 'm', 'p', '.', 'n', 'e', 't', '\0',
   /* "codeferm.com", true */ 'c', 'o', 'd', 'e', 'f', 'e', 'r', 'm', '.', 'c', 'o', 'm', '\0',
   /* "codefordus.nrw", true */ 'c', 'o', 'd', 'e', 'f', 'o', 'r', 'd', 'u', 's', '.', 'n', 'r', 'w', '\0',
-  /* "codeforhakodate.org", true */ 'c', 'o', 'd', 'e', 'f', 'o', 'r', 'h', 'a', 'k', 'o', 'd', 'a', 't', 'e', '.', 'o', 'r', 'g', '\0',
   /* "codefoundry.it", false */ 'c', 'o', 'd', 'e', 'f', 'o', 'u', 'n', 'd', 'r', 'y', '.', 'i', 't', '\0',
   /* "codeit.guru", true */ 'c', 'o', 'd', 'e', 'i', 't', '.', 'g', 'u', 'r', 'u', '\0',
   /* "codelove.de", true */ 'c', 'o', 'd', 'e', 'l', 'o', 'v', 'e', '.', 'd', 'e', '\0',
   /* "codenode.io", true */ 'c', 'o', 'd', 'e', 'n', 'o', 'd', 'e', '.', 'i', 'o', '\0',
   /* "codeplay.org", true */ 'c', 'o', 'd', 'e', 'p', 'l', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "codepoints.net", true */ 'c', 'o', 'd', 'e', 'p', 'o', 'i', 'n', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "codepref.com", true */ 'c', 'o', 'd', 'e', 'p', 'r', 'e', 'f', '.', 'c', 'o', 'm', '\0',
+  /* "codepult.com", true */ 'c', 'o', 'd', 'e', 'p', 'u', 'l', 't', '.', 'c', 'o', 'm', '\0',
   /* "codera.co.uk", true */ 'c', 'o', 'd', 'e', 'r', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "codereview.appspot.com", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "codereview.chromium.org", false */ 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', '.', 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "coderhangout.com", true */ 'c', 'o', 'd', 'e', 'r', 'h', 'a', 'n', 'g', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "codesport.io", true */ 'c', 'o', 'd', 'e', 's', 'p', 'o', 'r', 't', '.', 'i', 'o', '\0',
   /* "codeux.com", true */ 'c', 'o', 'd', 'e', 'u', 'x', '.', 'c', 'o', 'm', '\0',
   /* "codewild.de", true */ 'c', 'o', 'd', 'e', 'w', 'i', 'l', 'd', '.', 'd', 'e', '\0',
   /* "codewiz.xyz", true */ 'c', 'o', 'd', 'e', 'w', 'i', 'z', '.', 'x', 'y', 'z', '\0',
@@ -2957,17 +2956,16 @@ static const char kSTSHostTable[] = {
   /* "craftcms.com", false */ 'c', 'r', 'a', 'f', 't', 'c', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "craftcommerce.com", true */ 'c', 'r', 'a', 'f', 't', 'c', 'o', 'm', 'm', 'e', 'r', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "craftinginredlipstick.com", true */ 'c', 'r', 'a', 'f', 't', 'i', 'n', 'g', 'i', 'n', 'r', 'e', 'd', 'l', 'i', 'p', 's', 't', 'i', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "craigbates.co.uk", true */ 'c', 'r', 'a', 'i', 'g', 'b', 'a', 't', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "craigfrancis.co.uk", true */ 'c', 'r', 'a', 'i', 'g', 'f', 'r', 'a', 'n', 'c', 'i', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "craigrouse.com", true */ 'c', 'r', 'a', 'i', 'g', 'r', 'o', 'u', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cranems.com.ua", true */ 'c', 'r', 'a', 'n', 'e', 'm', 's', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "cranesafe.com", true */ 'c', 'r', 'a', 'n', 'e', 's', 'a', 'f', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "crazifyngers.com", true */ 'c', 'r', 'a', 'z', 'i', 'f', 'y', 'n', 'g', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "crazydomains.ae", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'a', 'e', '\0',
   /* "crazydomains.co.nz", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "crazydomains.co.uk", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "crazydomains.com.au", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "crazydomains.in", true */ 'c', 'r', 'a', 'z', 'y', 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'i', 'n', '\0',
   /* "crazymeeshu.com", true */ 'c', 'r', 'a', 'z', 'y', 'm', 'e', 'e', 's', 'h', 'u', '.', 'c', 'o', 'm', '\0',
   /* "crazypaul.com", true */ 'c', 'r', 'a', 'z', 'y', 'p', 'a', 'u', 'l', '.', 'c', 'o', 'm', '\0',
   /* "crbug.com", true */ 'c', 'r', 'b', 'u', 'g', '.', 'c', 'o', 'm', '\0',
@@ -3048,20 +3046,18 @@ static const char kSTSHostTable[] = {
   /* "csbs.fr", true */ 'c', 's', 'b', 's', '.', 'f', 'r', '\0',
   /* "cselzer.com", false */ 'c', 's', 'e', 'l', 'z', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "csengle.de", true */ 'c', 's', 'e', 'n', 'g', 'l', 'e', '.', 'd', 'e', '\0',
   /* "csfm.com", true */ 'c', 's', 'f', 'm', '.', 'c', 'o', 'm', '\0',
   /* "csgo.help", true */ 'c', 's', 'g', 'o', '.', 'h', 'e', 'l', 'p', '\0',
   /* "csgogamers.com", true */ 'c', 's', 'g', 'o', 'g', 'a', 'm', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "csgohandouts.com", true */ 'c', 's', 'g', 'o', 'h', 'a', 'n', 'd', 'o', 'u', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "csgotwister.com", true */ 'c', 's', 'g', 'o', 't', 'w', 'i', 's', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
-  /* "cshopify.com", true */ 'c', 's', 'h', 'o', 'p', 'i', 'f', 'y', '.', 'c', 'o', 'm', '\0',
   /* "csmainframe.com", true */ 'c', 's', 'm', 'a', 'i', 'n', 'f', 'r', 'a', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "csokolade.hu", true */ 'c', 's', 'o', 'k', 'o', 'l', 'a', 'd', 'e', '.', 'h', 'u', '\0',
-  /* "csru.net", true */ 'c', 's', 'r', 'u', '.', 'n', 'e', 't', '\0',
   /* "css.net", true */ 'c', 's', 's', '.', 'n', 'e', 't', '\0',
   /* "cssu.in", true */ 'c', 's', 's', 'u', '.', 'i', 'n', '\0',
   /* "cstkit.com", true */ 'c', 's', 't', 'k', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "csuw.net", true */ 'c', 's', 'u', 'w', '.', 'n', 'e', 't', '\0',
   /* "cthomas.work", true */ 'c', 't', 'h', 'o', 'm', 'a', 's', '.', 'w', 'o', 'r', 'k', '\0',
   /* "ctns.de", true */ 'c', 't', 'n', 's', '.', 'd', 'e', '\0',
   /* "ctoforhire.com.au", true */ 'c', 't', 'o', 'f', 'o', 'r', 'h', 'i', 'r', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "ctpe.net", true */ 'c', 't', 'p', 'e', '.', 'n', 'e', 't', '\0',
@@ -3130,17 +3126,16 @@ static const char kSTSHostTable[] = {
   /* "cvjm-memmingen.de", true */ 'c', 'v', 'j', 'm', '-', 'm', 'e', 'm', 'm', 'i', 'n', 'g', 'e', 'n', '.', 'd', 'e', '\0',
   /* "cvlibrary.co.uk", true */ 'c', 'v', 'l', 'i', 'b', 'r', 'a', 'r', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "cvmu.jp", true */ 'c', 'v', 'm', 'u', '.', 'j', 'p', '\0',
   /* "cvr.dk", true */ 'c', 'v', 'r', '.', 'd', 'k', '\0',
   /* "cvsoftub.com", true */ 'c', 'v', 's', 'o', 'f', 't', 'u', 'b', '.', 'c', 'o', 'm', '\0',
   /* "cvtparking.co.uk", true */ 'c', 'v', 't', 'p', 'a', 'r', 'k', 'i', 'n', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "cvursache.com", true */ 'c', 'v', 'u', 'r', 's', 'a', 'c', 'h', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cvv.cn", true */ 'c', 'v', 'v', '.', 'c', 'n', '\0',
-  /* "cwage.com", true */ 'c', 'w', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cwagner.me", true */ 'c', 'w', 'a', 'g', 'n', 'e', 'r', '.', 'm', 'e', '\0',
   /* "cyber-konzept.de", true */ 'c', 'y', 'b', 'e', 'r', '-', 'k', 'o', 'n', 'z', 'e', 'p', 't', '.', 'd', 'e', '\0',
   /* "cyberfrancais.ro", true */ 'c', 'y', 'b', 'e', 'r', 'f', 'r', 'a', 'n', 'c', 'a', 'i', 's', '.', 'r', 'o', '\0',
   /* "cyberguerrilla.info", true */ 'c', 'y', 'b', 'e', 'r', 'g', 'u', 'e', 'r', 'r', 'i', 'l', 'l', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "cyberguerrilla.org", true */ 'c', 'y', 'b', 'e', 'r', 'g', 'u', 'e', 'r', 'r', 'i', 'l', 'l', 'a', '.', 'o', 'r', 'g', '\0',
   /* "cyberhouse.at", false */ 'c', 'y', 'b', 'e', 'r', 'h', 'o', 'u', 's', 'e', '.', 'a', 't', '\0',
   /* "cyberianhusky.com", true */ 'c', 'y', 'b', 'e', 'r', 'i', 'a', 'n', 'h', 'u', 's', 'k', 'y', '.', 'c', 'o', 'm', '\0',
   /* "cyberkov.com", true */ 'c', 'y', 'b', 'e', 'r', 'k', 'o', 'v', '.', 'c', 'o', 'm', '\0',
@@ -3291,16 +3286,19 @@ static const char kSTSHostTable[] = {
   /* "darwinkel.net", false */ 'd', 'a', 'r', 'w', 'i', 'n', 'k', 'e', 'l', '.', 'n', 'e', 't', '\0',
   /* "das-mediale-haus.de", true */ 'd', 'a', 's', '-', 'm', 'e', 'd', 'i', 'a', 'l', 'e', '-', 'h', 'a', 'u', 's', '.', 'd', 'e', '\0',
   /* "das-sommercamp.de", true */ 'd', 'a', 's', '-', 's', 'o', 'm', 'm', 'e', 'r', 'c', 'a', 'm', 'p', '.', 'd', 'e', '\0',
   /* "dash-board.jp", false */ 'd', 'a', 's', 'h', '-', 'b', 'o', 'a', 'r', 'd', '.', 'j', 'p', '\0',
   /* "dash.rocks", true */ 'd', 'a', 's', 'h', '.', 'r', 'o', 'c', 'k', 's', '\0',
   /* "dashboard.yt", true */ 'd', 'a', 's', 'h', 'b', 'o', 'a', 'r', 'd', '.', 'y', 't', '\0',
   /* "data.haus", true */ 'd', 'a', 't', 'a', '.', 'h', 'a', 'u', 's', '\0',
   /* "data.qld.gov.au", false */ 'd', 'a', 't', 'a', '.', 'q', 'l', 'd', '.', 'g', 'o', 'v', '.', 'a', 'u', '\0',
+  /* "databionix.com", true */ 'd', 'a', 't', 'a', 'b', 'i', 'o', 'n', 'i', 'x', '.', 'c', 'o', 'm', '\0',
+  /* "databutlr.com", true */ 'd', 'a', 't', 'a', 'b', 'u', 't', 'l', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "databutlr.net", true */ 'd', 'a', 't', 'a', 'b', 'u', 't', 'l', 'r', '.', 'n', 'e', 't', '\0',
   /* "datacalle.com", true */ 'd', 'a', 't', 'a', 'c', 'a', 'l', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "datacandy.com", true */ 'd', 'a', 't', 'a', 'c', 'a', 'n', 'd', 'y', '.', 'c', 'o', 'm', '\0',
   /* "datadit.hu", true */ 'd', 'a', 't', 'a', 'd', 'i', 't', '.', 'h', 'u', '\0',
   /* "datadyne.technology", true */ 'd', 'a', 't', 'a', 'd', 'y', 'n', 'e', '.', 't', 'e', 'c', 'h', 'n', 'o', 'l', 'o', 'g', 'y', '\0',
   /* "dataisme.com", true */ 'd', 'a', 't', 'a', 'i', 's', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "datamatic.ru", true */ 'd', 'a', 't', 'a', 'm', 'a', 't', 'i', 'c', '.', 'r', 'u', '\0',
   /* "datapun.ch", true */ 'd', 'a', 't', 'a', 'p', 'u', 'n', '.', 'c', 'h', '\0',
   /* "datascience.cafe", true */ 'd', 'a', 't', 'a', 's', 'c', 'i', 'e', 'n', 'c', 'e', '.', 'c', 'a', 'f', 'e', '\0',
@@ -3506,16 +3504,17 @@ static const char kSTSHostTable[] = {
   /* "designville.sk", true */ 'd', 'e', 's', 'i', 'g', 'n', 'v', 'i', 'l', 'l', 'e', '.', 's', 'k', '\0',
   /* "desmaakvanplanten.be", true */ 'd', 'e', 's', 'm', 'a', 'a', 'k', 'v', 'a', 'n', 'p', 'l', 'a', 'n', 't', 'e', 'n', '.', 'b', 'e', '\0',
   /* "desserteagleselvenar.tk", true */ 'd', 'e', 's', 's', 'e', 'r', 't', 'e', 'a', 'g', 'l', 'e', 's', 'e', 'l', 'v', 'e', 'n', 'a', 'r', '.', 't', 'k', '\0',
   /* "desterman.ru", true */ 'd', 'e', 's', 't', 'e', 'r', 'm', 'a', 'n', '.', 'r', 'u', '\0',
   /* "destinattorneyjohngreene.com", true */ 'd', 'e', 's', 't', 'i', 'n', 'a', 't', 't', 'o', 'r', 'n', 'e', 'y', 'j', 'o', 'h', 'n', 'g', 'r', 'e', 'e', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "destom.be", true */ 'd', 'e', 's', 't', 'o', 'm', '.', 'b', 'e', '\0',
   /* "desu.ne.jp", true */ 'd', 'e', 's', 'u', '.', 'n', 'e', '.', 'j', 'p', '\0',
   /* "detectify.com", false */ 'd', 'e', 't', 'e', 'c', 't', 'i', 'f', 'y', '.', 'c', 'o', 'm', '\0',
+  /* "detest.org", true */ 'd', 'e', 't', 'e', 's', 't', '.', 'o', 'r', 'g', '\0',
   /* "dethemium.com", true */ 'd', 'e', 't', 'h', 'e', 'm', 'i', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "detoxsinutritie.ro", true */ 'd', 'e', 't', 'o', 'x', 's', 'i', 'n', 'u', 't', 'r', 'i', 't', 'i', 'e', '.', 'r', 'o', '\0',
   /* "detskysad.com", true */ 'd', 'e', 't', 's', 'k', 'y', 's', 'a', 'd', '.', 'c', 'o', 'm', '\0',
   /* "detteflies.com", true */ 'd', 'e', 't', 't', 'e', 'f', 'l', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "detutorial.com", false */ 'd', 'e', 't', 'u', 't', 'o', 'r', 'i', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "deurenfabriek.nl", true */ 'd', 'e', 'u', 'r', 'e', 'n', 'f', 'a', 'b', 'r', 'i', 'e', 'k', '.', 'n', 'l', '\0',
   /* "deusu.de", true */ 'd', 'e', 'u', 's', 'u', '.', 'd', 'e', '\0',
   /* "deusu.org", true */ 'd', 'e', 'u', 's', 'u', '.', 'o', 'r', 'g', '\0',
@@ -3709,16 +3708,17 @@ static const char kSTSHostTable[] = {
   /* "divingwithnic.com", true */ 'd', 'i', 'v', 'i', 'n', 'g', 'w', 'i', 't', 'h', 'n', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "dixiediner.com", true */ 'd', 'i', 'x', 'i', 'e', 'd', 'i', 'n', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "dixmag.com", true */ 'd', 'i', 'x', 'm', 'a', 'g', '.', 'c', 'o', 'm', '\0',
   /* "diybook.at", true */ 'd', 'i', 'y', 'b', 'o', 'o', 'k', '.', 'a', 't', '\0',
   /* "diycc.org", true */ 'd', 'i', 'y', 'c', 'c', '.', 'o', 'r', 'g', '\0',
   /* "djangoproject.com", true */ 'd', 'j', 'a', 'n', 'g', 'o', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "djangosnippets.org", true */ 'd', 'j', 'a', 'n', 'g', 'o', 's', 'n', 'i', 'p', 'p', 'e', 't', 's', '.', 'o', 'r', 'g', '\0',
   /* "djlive.pl", true */ 'd', 'j', 'l', 'i', 'v', 'e', '.', 'p', 'l', '\0',
+  /* "djlnetworks.co.uk", true */ 'd', 'j', 'l', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "djul.net", true */ 'd', 'j', 'u', 'l', '.', 'n', 'e', 't', '\0',
   /* "djxmmx.net", false */ 'd', 'j', 'x', 'm', 'm', 'x', '.', 'n', 'e', 't', '\0',
   /* "dk.search.yahoo.com", false */ 'd', 'k', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "dkds.us", true */ 'd', 'k', 'd', 's', '.', 'u', 's', '\0',
   /* "dkravchenko.su", true */ 'd', 'k', 'r', 'a', 'v', 'c', 'h', 'e', 'n', 'k', 'o', '.', 's', 'u', '\0',
   /* "dl.google.com", true */ 'd', 'l', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dlaspania.pl", true */ 'd', 'l', 'a', 's', 'p', 'a', 'n', 'i', 'a', '.', 'p', 'l', '\0',
   /* "dlld.com", true */ 'd', 'l', 'l', 'd', '.', 'c', 'o', 'm', '\0',
@@ -3791,17 +3791,17 @@ static const char kSTSHostTable[] = {
   /* "dollemore.com", true */ 'd', 'o', 'l', 'l', 'e', 'm', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "dolphin-hosting.com", true */ 'd', 'o', 'l', 'p', 'h', 'i', 'n', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dolphin-it.de", true */ 'd', 'o', 'l', 'p', 'h', 'i', 'n', '-', 'i', 't', '.', 'd', 'e', '\0',
   /* "dolphinswithlasers.com", true */ 'd', 'o', 'l', 'p', 'h', 'i', 'n', 's', 'w', 'i', 't', 'h', 'l', 'a', 's', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "dom-medicina.ru", true */ 'd', 'o', 'm', '-', 'm', 'e', 'd', 'i', 'c', 'i', 'n', 'a', '.', 'r', 'u', '\0',
   /* "doma.in", true */ 'd', 'o', 'm', 'a', '.', 'i', 'n', '\0',
   /* "domadillo.com", true */ 'd', 'o', 'm', 'a', 'd', 'i', 'l', 'l', 'o', '.', 'c', 'o', 'm', '\0',
   /* "domain001.info", true */ 'd', 'o', 'm', 'a', 'i', 'n', '0', '0', '1', '.', 'i', 'n', 'f', 'o', '\0',
-  /* "domainexpress.de", true */ 'd', 'o', 'm', 'a', 'i', 'n', 'e', 'x', 'p', 'r', 'e', 's', 's', '.', 'd', 'e', '\0',
+  /* "domainexpress.de", false */ 'd', 'o', 'm', 'a', 'i', 'n', 'e', 'x', 'p', 'r', 'e', 's', 's', '.', 'd', 'e', '\0',
   /* "domainkauf.de", true */ 'd', 'o', 'm', 'a', 'i', 'n', 'k', 'a', 'u', 'f', '.', 'd', 'e', '\0',
   /* "domains.google.com", true */ 'd', 'o', 'm', 'a', 'i', 'n', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "domainstaff.com", true */ 'd', 'o', 'm', 'a', 'i', 'n', 's', 't', 'a', 'f', 'f', '.', 'c', 'o', 'm', '\0',
   /* "domenic.me", true */ 'd', 'o', 'm', 'e', 'n', 'i', 'c', '.', 'm', 'e', '\0',
   /* "domfee.com", true */ 'd', 'o', 'm', 'f', 'e', 'e', '.', 'c', 'o', 'm', '\0',
   /* "domhaase.me", true */ 'd', 'o', 'm', 'h', 'a', 'a', 's', 'e', '.', 'm', 'e', '\0',
   /* "dominationgame.co.uk", true */ 'd', 'o', 'm', 'i', 'n', 'a', 't', 'i', 'o', 'n', 'g', 'a', 'm', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "dominikkulaga.pl", true */ 'd', 'o', 'm', 'i', 'n', 'i', 'k', 'k', 'u', 'l', 'a', 'g', 'a', '.', 'p', 'l', '\0',
@@ -3984,33 +3984,33 @@ static const char kSTSHostTable[] = {
   /* "dutyfreeonboard.com", true */ 'd', 'u', 't', 'y', 'f', 'r', 'e', 'e', 'o', 'n', 'b', 'o', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "duuu.ch", true */ 'd', 'u', 'u', 'u', '.', 'c', 'h', '\0',
   /* "dvbris.co.uk", true */ 'd', 'v', 'b', 'r', 'i', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "dvbris.com", true */ 'd', 'v', 'b', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "dvorupotocnych.sk", true */ 'd', 'v', 'o', 'r', 'u', 'p', 'o', 't', 'o', 'c', 'n', 'y', 'c', 'h', '.', 's', 'k', '\0',
   /* "dvotx.org", true */ 'd', 'v', 'o', 't', 'x', '.', 'o', 'r', 'g', '\0',
   /* "dvwc.org", true */ 'd', 'v', 'w', 'c', '.', 'o', 'r', 'g', '\0',
   /* "dwnld.me", true */ 'd', 'w', 'n', 'l', 'd', '.', 'm', 'e', '\0',
+  /* "dworzak.ch", true */ 'd', 'w', 'o', 'r', 'z', 'a', 'k', '.', 'c', 'h', '\0',
   /* "dwtm.ch", true */ 'd', 'w', 't', 'm', '.', 'c', 'h', '\0',
   /* "dxa.io", false */ 'd', 'x', 'a', '.', 'i', 'o', '\0',
   /* "dxgl.info", true */ 'd', 'x', 'g', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "dyeager.org", true */ 'd', 'y', 'e', 'a', 'g', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "dyktig.as", true */ 'd', 'y', 'k', 't', 'i', 'g', '.', 'a', 's', '\0',
   /* "dyn-nserve.net", true */ 'd', 'y', 'n', '-', 'n', 's', 'e', 'r', 'v', 'e', '.', 'n', 'e', 't', '\0',
   /* "dyn.im", true */ 'd', 'y', 'n', '.', 'i', 'm', '\0',
   /* "dynaloop.net", true */ 'd', 'y', 'n', 'a', 'l', 'o', 'o', 'p', '.', 'n', 'e', 't', '\0',
   /* "dynamicnet.net", false */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 'n', 'e', 't', '.', 'n', 'e', 't', '\0',
   /* "dynamicsnetwork.net", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 's', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'n', 'e', 't', '\0',
   /* "dynamictostatic.com", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', 't', 'o', 's', 't', 'a', 't', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "dynamize.solutions", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'z', 'e', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0',
   /* "dyrenesverden.no", true */ 'd', 'y', 'r', 'e', 'n', 'e', 's', 'v', 'e', 'r', 'd', 'e', 'n', '.', 'n', 'o', '\0',
   /* "dyrkar.com", true */ 'd', 'y', 'r', 'k', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "dziekonski.com", true */ 'd', 'z', 'i', 'e', 'k', 'o', 'n', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "dzndk.com", true */ 'd', 'z', 'n', 'd', 'k', '.', 'c', 'o', 'm', '\0',
-  /* "dzndk.net", true */ 'd', 'z', 'n', 'd', 'k', '.', 'n', 'e', 't', '\0',
   /* "dzyabchenko.com", true */ 'd', 'z', 'y', 'a', 'b', 'c', 'h', 'e', 'n', 'k', 'o', '.', 'c', 'o', 'm', '\0',
   /* "e-biografias.net", true */ 'e', '-', 'b', 'i', 'o', 'g', 'r', 'a', 'f', 'i', 'a', 's', '.', 'n', 'e', 't', '\0',
   /* "e-isfa.eu", true */ 'e', '-', 'i', 's', 'f', 'a', '.', 'e', 'u', '\0',
   /* "e-kontakti.fi", true */ 'e', '-', 'k', 'o', 'n', 't', 'a', 'k', 't', 'i', '.', 'f', 'i', '\0',
   /* "e-learningbs.com", true */ 'e', '-', 'l', 'e', 'a', 'r', 'n', 'i', 'n', 'g', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "e-lifetechnology.com", true */ 'e', '-', 'l', 'i', 'f', 'e', 't', 'e', 'c', 'h', 'n', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "e-mak.eu", true */ 'e', '-', 'm', 'a', 'k', '.', 'e', 'u', '\0',
   /* "e-rickroll-r.pw", true */ 'e', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'r', '.', 'p', 'w', '\0',
@@ -4269,16 +4269,17 @@ static const char kSTSHostTable[] = {
   /* "embroideryexpress.co.uk", true */ 'e', 'm', 'b', 'r', 'o', 'i', 'd', 'e', 'r', 'y', 'e', 'x', 'p', 'r', 'e', 's', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "emero.de", true */ 'e', 'm', 'e', 'r', 'o', '.', 'd', 'e', '\0',
   /* "emesolutions.net", true */ 'e', 'm', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'n', 'e', 't', '\0',
   /* "emi-air-comprime.com", true */ 'e', 'm', 'i', '-', 'a', 'i', 'r', '-', 'c', 'o', 'm', 'p', 'r', 'i', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "emielraaijmakers.nl", true */ 'e', 'm', 'i', 'e', 'l', 'r', 'a', 'a', 'i', 'j', 'm', 'a', 'k', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "emilong.com", true */ 'e', 'm', 'i', 'l', 'o', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "emilstahl.dk", true */ 'e', 'm', 'i', 'l', 's', 't', 'a', 'h', 'l', '.', 'd', 'k', '\0',
   /* "emilvarga.com", true */ 'e', 'm', 'i', 'l', 'v', 'a', 'r', 'g', 'a', '.', 'c', 'o', 'm', '\0',
+  /* "emilyhorsman.com", true */ 'e', 'm', 'i', 'l', 'y', 'h', 'o', 'r', 's', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "emilyshepherd.me", true */ 'e', 'm', 'i', 'l', 'y', 's', 'h', 'e', 'p', 'h', 'e', 'r', 'd', '.', 'm', 'e', '\0',
   /* "emirabiz.com", false */ 'e', 'm', 'i', 'r', 'a', 'b', 'i', 'z', '.', 'c', 'o', 'm', '\0',
   /* "emkanrecords.com", true */ 'e', 'm', 'k', 'a', 'n', 'r', 'e', 'c', 'o', 'r', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "emkei.cz", true */ 'e', 'm', 'k', 'e', 'i', '.', 'c', 'z', '\0',
   /* "empathy.ca", true */ 'e', 'm', 'p', 'a', 't', 'h', 'y', '.', 'c', 'a', '\0',
   /* "empowerdb.com", true */ 'e', 'm', 'p', 'o', 'w', 'e', 'r', 'd', 'b', '.', 'c', 'o', 'm', '\0',
   /* "emprego.pt", true */ 'e', 'm', 'p', 'r', 'e', 'g', 'o', '.', 'p', 't', '\0',
   /* "emptypath.com", true */ 'e', 'm', 'p', 't', 'y', 'p', 'a', 't', 'h', '.', 'c', 'o', 'm', '\0',
@@ -4359,18 +4360,16 @@ static const char kSTSHostTable[] = {
   /* "eopugetsound.org", false */ 'e', 'o', 'p', 'u', 'g', 'e', 't', 's', 'o', 'u', 'n', 'd', '.', 'o', 'r', 'g', '\0',
   /* "epay.bg", true */ 'e', 'p', 'a', 'y', '.', 'b', 'g', '\0',
   /* "epaygateway.net", true */ 'e', 'p', 'a', 'y', 'g', 'a', 't', 'e', 'w', 'a', 'y', '.', 'n', 'e', 't', '\0',
   /* "epicenter.work", true */ 'e', 'p', 'i', 'c', 'e', 'n', 't', 'e', 'r', '.', 'w', 'o', 'r', 'k', '\0',
   /* "epicenter.works", true */ 'e', 'p', 'i', 'c', 'e', 'n', 't', 'e', 'r', '.', 'w', 'o', 'r', 'k', 's', '\0',
   /* "epicentre.works", true */ 'e', 'p', 'i', 'c', 'e', 'n', 't', 'r', 'e', '.', 'w', 'o', 'r', 'k', 's', '\0',
   /* "epichouse.net", true */ 'e', 'p', 'i', 'c', 'h', 'o', 'u', 's', 'e', '.', 'n', 'e', 't', '\0',
   /* "epicpages.com", true */ 'e', 'p', 'i', 'c', 'p', 'a', 'g', 'e', 's', '.', 'c', 'o', 'm', '\0',
-  /* "epicsecure.de", true */ 'e', 'p', 'i', 'c', 's', 'e', 'c', 'u', 'r', 'e', '.', 'd', 'e', '\0',
-  /* "epicsoft.de", true */ 'e', 'p', 'i', 'c', 's', 'o', 'f', 't', '.', 'd', 'e', '\0',
   /* "epicwalnutcreek.com", true */ 'e', 'p', 'i', 'c', 'w', 'a', 'l', 'n', 'u', 't', 'c', 'r', 'e', 'e', 'k', '.', 'c', 'o', 'm', '\0',
   /* "epizentrum.work", true */ 'e', 'p', 'i', 'z', 'e', 'n', 't', 'r', 'u', 'm', '.', 'w', 'o', 'r', 'k', '\0',
   /* "epizentrum.works", true */ 'e', 'p', 'i', 'z', 'e', 'n', 't', 'r', 'u', 'm', '.', 'w', 'o', 'r', 'k', 's', '\0',
   /* "epoch.com", true */ 'e', 'p', 'o', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "epostplus.li", true */ 'e', 'p', 'o', 's', 't', 'p', 'l', 'u', 's', '.', 'l', 'i', '\0',
   /* "epsilon.dk", true */ 'e', 'p', 's', 'i', 'l', 'o', 'n', '.', 'd', 'k', '\0',
   /* "epublibre.org", true */ 'e', 'p', 'u', 'b', 'l', 'i', 'b', 'r', 'e', '.', 'o', 'r', 'g', '\0',
   /* "eq-serve.com", true */ 'e', 'q', '-', 's', 'e', 'r', 'v', 'e', '.', 'c', 'o', 'm', '\0',
@@ -4516,16 +4515,17 @@ static const char kSTSHostTable[] = {
   /* "european-agency.org", true */ 'e', 'u', 'r', 'o', 'p', 'e', 'a', 'n', '-', 'a', 'g', 'e', 'n', 'c', 'y', '.', 'o', 'r', 'g', '\0',
   /* "europop.com", true */ 'e', 'u', 'r', 'o', 'p', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "euroshop.or.at", true */ 'e', 'u', 'r', 'o', 's', 'h', 'o', 'p', '.', 'o', 'r', '.', 'a', 't', '\0',
   /* "eurostrategy.vn.ua", true */ 'e', 'u', 'r', 'o', 's', 't', 'r', 'a', 't', 'e', 'g', 'y', '.', 'v', 'n', '.', 'u', 'a', '\0',
   /* "eurotramp.com", true */ 'e', 'u', 'r', 'o', 't', 'r', 'a', 'm', 'p', '.', 'c', 'o', 'm', '\0',
   /* "eurotravelstar.eu", true */ 'e', 'u', 'r', 'o', 't', 'r', 'a', 'v', 'e', 'l', 's', 't', 'a', 'r', '.', 'e', 'u', '\0',
   /* "ev-zertifikate.de", true */ 'e', 'v', '-', 'z', 'e', 'r', 't', 'i', 'f', 'i', 'k', 'a', 't', 'e', '.', 'd', 'e', '\0',
   /* "eva.cz", true */ 'e', 'v', 'a', '.', 'c', 'z', '\0',
+  /* "evalesc.com", true */ 'e', 'v', 'a', 'l', 'e', 's', 'c', '.', 'c', 'o', 'm', '\0',
   /* "evanhandgraaf.nl", true */ 'e', 'v', 'a', 'n', 'h', 'a', 'n', 'd', 'g', 'r', 'a', 'a', 'f', '.', 'n', 'l', '\0',
   /* "evankurniawan.com", true */ 'e', 'v', 'a', 'n', 'k', 'u', 'r', 'n', 'i', 'a', 'w', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "evantageglobal.com", true */ 'e', 'v', 'a', 'n', 't', 'a', 'g', 'e', 'g', 'l', 'o', 'b', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "evapp.org", true */ 'e', 'v', 'a', 'p', 'p', '.', 'o', 'r', 'g', '\0',
   /* "evasion-energie.com", true */ 'e', 'v', 'a', 's', 'i', 'o', 'n', '-', 'e', 'n', 'e', 'r', 'g', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "evasovova.cz", true */ 'e', 'v', 'a', 's', 'o', 'v', 'o', 'v', 'a', '.', 'c', 'z', '\0',
   /* "eve0s.com", true */ 'e', 'v', 'e', '0', 's', '.', 'c', 'o', 'm', '\0',
   /* "evegalaxy.net", true */ 'e', 'v', 'e', 'g', 'a', 'l', 'a', 'x', 'y', '.', 'n', 'e', 't', '\0',
@@ -5035,17 +5035,16 @@ static const char kSTSHostTable[] = {
   /* "foxhound.com.br", true */ 'f', 'o', 'x', 'h', 'o', 'u', 'n', 'd', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "foxontheinter.net", true */ 'f', 'o', 'x', 'o', 'n', 't', 'h', 'e', 'i', 'n', 't', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "foxterrier.com.br", true */ 'f', 'o', 'x', 't', 'e', 'r', 'r', 'i', 'e', 'r', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "fpc.gov", false */ 'f', 'p', 'c', '.', 'g', 'o', 'v', '\0',
   /* "fpy.cz", true */ 'f', 'p', 'y', '.', 'c', 'z', '\0',
   /* "fr.search.yahoo.com", false */ 'f', 'r', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "frack.nl", true */ 'f', 'r', 'a', 'c', 'k', '.', 'n', 'l', '\0',
   /* "fraesentest.de", true */ 'f', 'r', 'a', 'e', 's', 'e', 'n', 't', 'e', 's', 't', '.', 'd', 'e', '\0',
-  /* "fragmentspuren.de", true */ 'f', 'r', 'a', 'g', 'm', 'e', 'n', 't', 's', 'p', 'u', 'r', 'e', 'n', '.', 'd', 'e', '\0',
   /* "fragnic.com", true */ 'f', 'r', 'a', 'g', 'n', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "fraho.eu", true */ 'f', 'r', 'a', 'h', 'o', '.', 'e', 'u', '\0',
   /* "fralef.me", false */ 'f', 'r', 'a', 'l', 'e', 'f', '.', 'm', 'e', '\0',
   /* "fran.cr", true */ 'f', 'r', 'a', 'n', '.', 'c', 'r', '\0',
   /* "francescopalazzo.com", true */ 'f', 'r', 'a', 'n', 'c', 'e', 's', 'c', 'o', 'p', 'a', 'l', 'a', 'z', 'z', 'o', '.', 'c', 'o', 'm', '\0',
   /* "francisli.net", true */ 'f', 'r', 'a', 'n', 'c', 'i', 's', 'l', 'i', '.', 'n', 'e', 't', '\0',
   /* "franckgirard.net", true */ 'f', 'r', 'a', 'n', 'c', 'k', 'g', 'i', 'r', 'a', 'r', 'd', '.', 'n', 'e', 't', '\0',
   /* "francoz.me", true */ 'f', 'r', 'a', 'n', 'c', 'o', 'z', '.', 'm', 'e', '\0',
@@ -5126,17 +5125,16 @@ static const char kSTSHostTable[] = {
   /* "fromix.de", true */ 'f', 'r', 'o', 'm', 'i', 'x', '.', 'd', 'e', '\0',
   /* "fromlemaytoz.com", true */ 'f', 'r', 'o', 'm', 'l', 'e', 'm', 'a', 'y', 't', 'o', 'z', '.', 'c', 'o', 'm', '\0',
   /* "fromscratch.rocks", true */ 'f', 'r', 'o', 'm', 's', 'c', 'r', 'a', 't', 'c', 'h', '.', 'r', 'o', 'c', 'k', 's', '\0',
   /* "fronteers.nl", false */ 'f', 'r', 'o', 'n', 't', 'e', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "froot.se", true */ 'f', 'r', 'o', 'o', 't', '.', 's', 'e', '\0',
   /* "frostbytes.net", true */ 'f', 'r', 'o', 's', 't', 'b', 'y', 't', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "frostwarning.com", true */ 'f', 'r', 'o', 's', 't', 'w', 'a', 'r', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "frothy.coffee", true */ 'f', 'r', 'o', 't', 'h', 'y', '.', 'c', 'o', 'f', 'f', 'e', 'e', '\0',
-  /* "frowin-stemmer.de", true */ 'f', 'r', 'o', 'w', 'i', 'n', '-', 's', 't', 'e', 'm', 'm', 'e', 'r', '.', 'd', 'e', '\0',
   /* "froxlor.support", true */ 'f', 'r', 'o', 'x', 'l', 'o', 'r', '.', 's', 'u', 'p', 'p', 'o', 'r', 't', '\0',
   /* "frtn.com", true */ 'f', 'r', 't', 'n', '.', 'c', 'o', 'm', '\0',
   /* "frtr.gov", true */ 'f', 'r', 't', 'r', '.', 'g', 'o', 'v', '\0',
   /* "fruchthof24.de", true */ 'f', 'r', 'u', 'c', 'h', 't', 'h', 'o', 'f', '2', '4', '.', 'd', 'e', '\0',
   /* "frugro.be", true */ 'f', 'r', 'u', 'g', 'r', 'o', '.', 'b', 'e', '\0',
   /* "fs-gamenet.de", true */ 'f', 's', '-', 'g', 'a', 'm', 'e', 'n', 'e', 't', '.', 'd', 'e', '\0',
   /* "fsapubs.gov", true */ 'f', 's', 'a', 'p', 'u', 'b', 's', '.', 'g', 'o', 'v', '\0',
   /* "fsbpaintrock.com", true */ 'f', 's', 'b', 'p', 'a', 'i', 'n', 't', 'r', 'o', 'c', 'k', '.', 'c', 'o', 'm', '\0',
@@ -5165,17 +5163,16 @@ static const char kSTSHostTable[] = {
   /* "funchestra.at", false */ 'f', 'u', 'n', 'c', 'h', 'e', 's', 't', 'r', 'a', '.', 'a', 't', '\0',
   /* "functions-online.com", true */ 'f', 'u', 'n', 'c', 't', 'i', 'o', 'n', 's', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fundays.nl", true */ 'f', 'u', 'n', 'd', 'a', 'y', 's', '.', 'n', 'l', '\0',
   /* "funderburg.me", true */ 'f', 'u', 'n', 'd', 'e', 'r', 'b', 'u', 'r', 'g', '.', 'm', 'e', '\0',
   /* "fundingempire.com", true */ 'f', 'u', 'n', 'd', 'i', 'n', 'g', 'e', 'm', 'p', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "funi4u.com", true */ 'f', 'u', 'n', 'i', '4', 'u', '.', 'c', 'o', 'm', '\0',
   /* "funktionel.co", true */ 'f', 'u', 'n', 'k', 't', 'i', 'o', 'n', 'e', 'l', '.', 'c', 'o', '\0',
   /* "funny-stamps.de", true */ 'f', 'u', 'n', 'n', 'y', '-', 's', 't', 'a', 'm', 'p', 's', '.', 'd', 'e', '\0',
-  /* "funnyang.com", true */ 'f', 'u', 'n', 'n', 'y', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "funnystamps.de", true */ 'f', 'u', 'n', 'n', 'y', 's', 't', 'a', 'm', 'p', 's', '.', 'd', 'e', '\0',
   /* "funstamps.de", true */ 'f', 'u', 'n', 's', 't', 'a', 'm', 'p', 's', '.', 'd', 'e', '\0',
   /* "funstempel.de", true */ 'f', 'u', 'n', 's', 't', 'e', 'm', 'p', 'e', 'l', '.', 'd', 'e', '\0',
   /* "funtime.kiev.ua", false */ 'f', 'u', 'n', 't', 'i', 'm', 'e', '.', 'k', 'i', 'e', 'v', '.', 'u', 'a', '\0',
   /* "furgo.love", true */ 'f', 'u', 'r', 'g', 'o', '.', 'l', 'o', 'v', 'e', '\0',
   /* "furkancaliskan.com", true */ 'f', 'u', 'r', 'k', 'a', 'n', 'c', 'a', 'l', 'i', 's', 'k', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "furnitureconcept.co.uk", true */ 'f', 'u', 'r', 'n', 'i', 't', 'u', 'r', 'e', 'c', 'o', 'n', 'c', 'e', 'p', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "furry.dk", true */ 'f', 'u', 'r', 'r', 'y', '.', 'd', 'k', '\0',
@@ -5203,17 +5200,16 @@ static const char kSTSHostTable[] = {
   /* "fxopen.com.br", true */ 'f', 'x', 'o', 'p', 'e', 'n', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "fxopen.com.mx", true */ 'f', 'x', 'o', 'p', 'e', 'n', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0',
   /* "fxopen.ru", true */ 'f', 'x', 'o', 'p', 'e', 'n', '.', 'r', 'u', '\0',
   /* "fxp.co.il", true */ 'f', 'x', 'p', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "fxpig-ib.com", true */ 'f', 'x', 'p', 'i', 'g', '-', 'i', 'b', '.', 'c', 'o', 'm', '\0',
   /* "fxtalk.cn", true */ 'f', 'x', 't', 'a', 'l', 'k', '.', 'c', 'n', '\0',
   /* "fyfywka.com", true */ 'f', 'y', 'f', 'y', 'w', 'k', 'a', '.', 'c', 'o', 'm', '\0',
   /* "fyn.nl", true */ 'f', 'y', 'n', '.', 'n', 'l', '\0',
-  /* "fyrkat.no", true */ 'f', 'y', 'r', 'k', 'a', 't', '.', 'n', 'o', '\0',
   /* "g-m-w.eu", true */ 'g', '-', 'm', '-', 'w', '.', 'e', 'u', '\0',
   /* "g-marketing.ro", true */ 'g', '-', 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', '.', 'r', 'o', '\0',
   /* "g-o.pl", true */ 'g', '-', 'o', '.', 'p', 'l', '\0',
   /* "g-rickroll-o.pw", true */ 'g', '-', 'r', 'i', 'c', 'k', 'r', 'o', 'l', 'l', '-', 'o', '.', 'p', 'w', '\0',
   /* "g2links.com", true */ 'g', '2', 'l', 'i', 'n', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "g2pla.net", true */ 'g', '2', 'p', 'l', 'a', '.', 'n', 'e', 't', '\0',
   /* "g2soft.net", true */ 'g', '2', 's', 'o', 'f', 't', '.', 'n', 'e', 't', '\0',
   /* "g3rv4.com", true */ 'g', '3', 'r', 'v', '4', '.', 'c', 'o', 'm', '\0',
@@ -5224,16 +5220,17 @@ static const char kSTSHostTable[] = {
   /* "gablaxian.com", true */ 'g', 'a', 'b', 'l', 'a', 'x', 'i', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "gabriele-kluge.de", true */ 'g', 'a', 'b', 'r', 'i', 'e', 'l', 'e', '-', 'k', 'l', 'u', 'g', 'e', '.', 'd', 'e', '\0',
   /* "gaestehaus-monika.com", true */ 'g', 'a', 'e', 's', 't', 'e', 'h', 'a', 'u', 's', '-', 'm', 'o', 'n', 'i', 'k', 'a', '.', 'c', 'o', 'm', '\0',
   /* "gagniard.org", true */ 'g', 'a', 'g', 'n', 'i', 'a', 'r', 'd', '.', 'o', 'r', 'g', '\0',
   /* "gagor.pl", true */ 'g', 'a', 'g', 'o', 'r', '.', 'p', 'l', '\0',
   /* "gagstempel.de", true */ 'g', 'a', 'g', 's', 't', 'e', 'm', 'p', 'e', 'l', '.', 'd', 'e', '\0',
   /* "gaichon.com", true */ 'g', 'a', 'i', 'c', 'h', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "gaireg.de", true */ 'g', 'a', 'i', 'r', 'e', 'g', '.', 'd', 'e', '\0',
+  /* "gaite.me", true */ 'g', 'a', 'i', 't', 'e', '.', 'm', 'e', '\0',
   /* "gakkainavi-epsilon.jp", true */ 'g', 'a', 'k', 'k', 'a', 'i', 'n', 'a', 'v', 'i', '-', 'e', 'p', 's', 'i', 'l', 'o', 'n', '.', 'j', 'p', '\0',
   /* "gakkainavi-epsilon.net", true */ 'g', 'a', 'k', 'k', 'a', 'i', 'n', 'a', 'v', 'i', '-', 'e', 'p', 's', 'i', 'l', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "gakkainavi.net", true */ 'g', 'a', 'k', 'k', 'a', 'i', 'n', 'a', 'v', 'i', '.', 'n', 'e', 't', '\0',
   /* "gakkainavi4.jp", true */ 'g', 'a', 'k', 'k', 'a', 'i', 'n', 'a', 'v', 'i', '4', '.', 'j', 'p', '\0',
   /* "galactic-crew.org", true */ 'g', 'a', 'l', 'a', 'c', 't', 'i', 'c', '-', 'c', 'r', 'e', 'w', '.', 'o', 'r', 'g', '\0',
   /* "galena.io", true */ 'g', 'a', 'l', 'e', 'n', 'a', '.', 'i', 'o', '\0',
   /* "galgoafegao.com.br", true */ 'g', 'a', 'l', 'g', 'o', 'a', 'f', 'e', 'g', 'a', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "galgoingles.com.br", true */ 'g', 'a', 'l', 'g', 'o', 'i', 'n', 'g', 'l', 'e', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
@@ -5454,17 +5451,16 @@ static const char kSTSHostTable[] = {
   /* "giga.nl", true */ 'g', 'i', 'g', 'a', '.', 'n', 'l', '\0',
   /* "gigacog.com", true */ 'g', 'i', 'g', 'a', 'c', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "gigawa.lt", true */ 'g', 'i', 'g', 'a', 'w', 'a', '.', 'l', 't', '\0',
   /* "gijsbertus.com", true */ 'g', 'i', 'j', 's', 'b', 'e', 'r', 't', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "gilcloud.com", true */ 'g', 'i', 'l', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "gillet-cros.fr", true */ 'g', 'i', 'l', 'l', 'e', 't', '-', 'c', 'r', 'o', 's', '.', 'f', 'r', '\0',
   /* "gillmanandsoame.co.uk", true */ 'g', 'i', 'l', 'l', 'm', 'a', 'n', 'a', 'n', 'd', 's', 'o', 'a', 'm', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "gilroywestwood.org", true */ 'g', 'i', 'l', 'r', 'o', 'y', 'w', 'e', 's', 't', 'w', 'o', 'o', 'd', '.', 'o', 'r', 'g', '\0',
-  /* "gincher.net", true */ 'g', 'i', 'n', 'c', 'h', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "ginja.co.th", true */ 'g', 'i', 'n', 'j', 'a', '.', 'c', 'o', '.', 't', 'h', '\0',
   /* "ginkel.com", true */ 'g', 'i', 'n', 'k', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "ginnegappen.nl", true */ 'g', 'i', 'n', 'n', 'e', 'g', 'a', 'p', 'p', 'e', 'n', '.', 'n', 'l', '\0',
   /* "ginzadelunch.jp", true */ 'g', 'i', 'n', 'z', 'a', 'd', 'e', 'l', 'u', 'n', 'c', 'h', '.', 'j', 'p', '\0',
   /* "gip-carif-idf.net", true */ 'g', 'i', 'p', '-', 'c', 'a', 'r', 'i', 'f', '-', 'i', 'd', 'f', '.', 'n', 'e', 't', '\0',
   /* "gip-carif-idf.org", true */ 'g', 'i', 'p', '-', 'c', 'a', 'r', 'i', 'f', '-', 'i', 'd', 'f', '.', 'o', 'r', 'g', '\0',
   /* "giri.co", true */ 'g', 'i', 'r', 'i', '.', 'c', 'o', '\0',
   /* "girlsnet.work", true */ 'g', 'i', 'r', 'l', 's', 'n', 'e', 't', '.', 'w', 'o', 'r', 'k', '\0',
@@ -5685,17 +5681,16 @@ static const char kSTSHostTable[] = {
   /* "grieg-gaarden.no", true */ 'g', 'r', 'i', 'e', 'g', '-', 'g', 'a', 'a', 'r', 'd', 'e', 'n', '.', 'n', 'o', '\0',
   /* "grieg.com", true */ 'g', 'r', 'i', 'e', 'g', '.', 'c', 'o', 'm', '\0',
   /* "grieg.net", true */ 'g', 'r', 'i', 'e', 'g', '.', 'n', 'e', 't', '\0',
   /* "grieg.no", true */ 'g', 'r', 'i', 'e', 'g', '.', 'n', 'o', '\0',
   /* "griegfoundation.no", true */ 'g', 'r', 'i', 'e', 'g', 'f', 'o', 'u', 'n', 'd', 'a', 't', 'i', 'o', 'n', '.', 'n', 'o', '\0',
   /* "grieglogistics.no", true */ 'g', 'r', 'i', 'e', 'g', 'l', 'o', 'g', 'i', 's', 't', 'i', 'c', 's', '.', 'n', 'o', '\0',
   /* "griegshipbrokers.com", true */ 'g', 'r', 'i', 'e', 'g', 's', 'h', 'i', 'p', 'b', 'r', 'o', 'k', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "griegshipbrokers.no", true */ 'g', 'r', 'i', 'e', 'g', 's', 'h', 'i', 'p', 'b', 'r', 'o', 'k', 'e', 'r', 's', '.', 'n', 'o', '\0',
-  /* "griesser2.de", true */ 'g', 'r', 'i', 'e', 's', 's', 'e', 'r', '2', '.', 'd', 'e', '\0',
   /* "grillinfools.com", true */ 'g', 'r', 'i', 'l', 'l', 'i', 'n', 'f', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "grimcalc.com", true */ 'g', 'r', 'i', 'm', 'c', 'a', 'l', 'c', '.', 'c', 'o', 'm', '\0',
   /* "grimm-gastrobedarf.de", true */ 'g', 'r', 'i', 'm', 'm', '-', 'g', 'a', 's', 't', 'r', 'o', 'b', 'e', 'd', 'a', 'r', 'f', '.', 'd', 'e', '\0',
   /* "grimneko.de", true */ 'g', 'r', 'i', 'm', 'n', 'e', 'k', 'o', '.', 'd', 'e', '\0',
   /* "gritte.ch", true */ 'g', 'r', 'i', 't', 't', 'e', '.', 'c', 'h', '\0',
   /* "grizzlys.com", true */ 'g', 'r', 'i', 'z', 'z', 'l', 'y', 's', '.', 'c', 'o', 'm', '\0',
   /* "groben-itsolutions.de", true */ 'g', 'r', 'o', 'b', 'e', 'n', '-', 'i', 't', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'd', 'e', '\0',
   /* "grocock.me.uk", true */ 'g', 'r', 'o', 'c', 'o', 'c', 'k', '.', 'm', 'e', '.', 'u', 'k', '\0',
@@ -5761,17 +5756,16 @@ static const char kSTSHostTable[] = {
   /* "guineapigmustach.es", true */ 'g', 'u', 'i', 'n', 'e', 'a', 'p', 'i', 'g', 'm', 'u', 's', 't', 'a', 'c', 'h', '.', 'e', 's', '\0',
   /* "guitarmarketing.com", false */ 'g', 'u', 'i', 't', 'a', 'r', 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "gulch.in.ua", false */ 'g', 'u', 'l', 'c', 'h', '.', 'i', 'n', '.', 'u', 'a', '\0',
   /* "gulenbase.no", true */ 'g', 'u', 'l', 'e', 'n', 'b', 'a', 's', 'e', '.', 'n', 'o', '\0',
   /* "gummibande.noip.me", true */ 'g', 'u', 'm', 'm', 'i', 'b', 'a', 'n', 'd', 'e', '.', 'n', 'o', 'i', 'p', '.', 'm', 'e', '\0',
   /* "gunnaro.com", true */ 'g', 'u', 'n', 'n', 'a', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "guntbert.net", true */ 'g', 'u', 'n', 't', 'b', 'e', 'r', 't', '.', 'n', 'e', 't', '\0',
   /* "gunwatch.co.uk", true */ 'g', 'u', 'n', 'w', 'a', 't', 'c', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0',
-  /* "guoqiang.info", true */ 'g', 'u', 'o', 'q', 'i', 'a', 'n', 'g', '.', 'i', 'n', 'f', 'o', '\0',
   /* "guphi.net", true */ 'g', 'u', 'p', 'h', 'i', '.', 'n', 'e', 't', '\0',
   /* "gurkan.in", true */ 'g', 'u', 'r', 'k', 'a', 'n', '.', 'i', 'n', '\0',
   /* "gurmel.ru", true */ 'g', 'u', 'r', 'm', 'e', 'l', '.', 'r', 'u', '\0',
   /* "gurochan.ch", true */ 'g', 'u', 'r', 'o', 'c', 'h', 'a', 'n', '.', 'c', 'h', '\0',
   /* "guru-naradi.cz", true */ 'g', 'u', 'r', 'u', '-', 'n', 'a', 'r', 'a', 'd', 'i', '.', 'c', 'z', '\0',
   /* "gurueffect.com", true */ 'g', 'u', 'r', 'u', 'e', 'f', 'f', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "gus.host", true */ 'g', 'u', 's', '.', 'h', 'o', 's', 't', '\0',
   /* "gus.moe", true */ 'g', 'u', 's', '.', 'm', 'o', 'e', '\0',
@@ -5866,32 +5860,27 @@ static const char kSTSHostTable[] = {
   /* "hannah.link", true */ 'h', 'a', 'n', 'n', 'a', 'h', '.', 'l', 'i', 'n', 'k', '\0',
   /* "hannover-banditen.de", true */ 'h', 'a', 'n', 'n', 'o', 'v', 'e', 'r', '-', 'b', 'a', 'n', 'd', 'i', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "hans-natur.de", true */ 'h', 'a', 'n', 's', '-', 'n', 'a', 't', 'u', 'r', '.', 'd', 'e', '\0',
   /* "hansvaneijsden.com", true */ 'h', 'a', 'n', 's', 'v', 'a', 'n', 'e', 'i', 'j', 's', 'd', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "hansvaneijsden.nl", true */ 'h', 'a', 'n', 's', 'v', 'a', 'n', 'e', 'i', 'j', 's', 'd', 'e', 'n', '.', 'n', 'l', '\0',
   /* "hantse.com", true */ 'h', 'a', 'n', 't', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "hanu.la", true */ 'h', 'a', 'n', 'u', '.', 'l', 'a', '\0',
   /* "hanzubon.jp", true */ 'h', 'a', 'n', 'z', 'u', 'b', 'o', 'n', '.', 'j', 'p', '\0',
-  /* "hao-zhang.com", true */ 'h', 'a', 'o', '-', 'z', 'h', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "haomwei.com", true */ 'h', 'a', 'o', 'm', 'w', 'e', 'i', '.', 'c', 'o', 'm', '\0',
-  /* "haozhang.org", true */ 'h', 'a', 'o', 'z', 'h', 'a', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "haozi.me", true */ 'h', 'a', 'o', 'z', 'i', '.', 'm', 'e', '\0',
-  /* "hapijs.cn", true */ 'h', 'a', 'p', 'i', 'j', 's', '.', 'c', 'n', '\0',
-  /* "hapivm.com", true */ 'h', 'a', 'p', 'i', 'v', 'm', '.', 'c', 'o', 'm', '\0',
   /* "happist.com", true */ 'h', 'a', 'p', 'p', 'i', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "happix.nl", true */ 'h', 'a', 'p', 'p', 'i', 'x', '.', 'n', 'l', '\0',
   /* "happyandrelaxeddogs.eu", true */ 'h', 'a', 'p', 'p', 'y', 'a', 'n', 'd', 'r', 'e', 'l', 'a', 'x', 'e', 'd', 'd', 'o', 'g', 's', '.', 'e', 'u', '\0',
   /* "happycoder.net", false */ 'h', 'a', 'p', 'p', 'y', 'c', 'o', 'd', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "happygadget.me", true */ 'h', 'a', 'p', 'p', 'y', 'g', 'a', 'd', 'g', 'e', 't', '.', 'm', 'e', '\0',
   /* "happylifestyle.com", true */ 'h', 'a', 'p', 'p', 'y', 'l', 'i', 'f', 'e', 's', 't', 'y', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "happyteamlabs.com", true */ 'h', 'a', 'p', 'p', 'y', 't', 'e', 'a', 'm', 'l', 'a', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "happytiger.eu", true */ 'h', 'a', 'p', 'p', 'y', 't', 'i', 'g', 'e', 'r', '.', 'e', 'u', '\0',
   /* "happyukgo.com", true */ 'h', 'a', 'p', 'p', 'y', 'u', 'k', 'g', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "hapvm.com", true */ 'h', 'a', 'p', 'v', 'm', '.', 'c', 'o', 'm', '\0',
   /* "haraj.com.sa", true */ 'h', 'a', 'r', 'a', 'j', '.', 'c', 'o', 'm', '.', 's', 'a', '\0',
   /* "harambe.site", true */ 'h', 'a', 'r', 'a', 'm', 'b', 'e', '.', 's', 'i', 't', 'e', '\0',
   /* "hardeman.nu", true */ 'h', 'a', 'r', 'd', 'e', 'm', 'a', 'n', '.', 'n', 'u', '\0',
   /* "hardenize.com", true */ 'h', 'a', 'r', 'd', 'e', 'n', 'i', 'z', 'e', '.', 'c', 'o', 'm', '\0',
   /* "hardertimes.com", true */ 'h', 'a', 'r', 'd', 'e', 'r', 't', 'i', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "hardfalcon.net", true */ 'h', 'a', 'r', 'd', 'f', 'a', 'l', 'c', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "hardh.at", true */ 'h', 'a', 'r', 'd', 'h', '.', 'a', 't', '\0',
   /* "hardtfrieden.de", true */ 'h', 'a', 'r', 'd', 't', 'f', 'r', 'i', 'e', 'd', 'e', 'n', '.', 'd', 'e', '\0',
@@ -5914,17 +5903,16 @@ static const char kSTSHostTable[] = {
   /* "hashiconf.com", true */ 'h', 'a', 's', 'h', 'i', 'c', 'o', 'n', 'f', '.', 'c', 'o', 'm', '\0',
   /* "hashiconf.eu", true */ 'h', 'a', 's', 'h', 'i', 'c', 'o', 'n', 'f', '.', 'e', 'u', '\0',
   /* "hashicorp.com", true */ 'h', 'a', 's', 'h', 'i', 'c', 'o', 'r', 'p', '.', 'c', 'o', 'm', '\0',
   /* "hashimah.ca", true */ 'h', 'a', 's', 'h', 'i', 'm', 'a', 'h', '.', 'c', 'a', '\0',
   /* "hashnode.com", true */ 'h', 'a', 's', 'h', 'n', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "hashplex.com", true */ 'h', 'a', 's', 'h', 'p', 'l', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "hashru.nl", true */ 'h', 'a', 's', 'h', 'r', 'u', '.', 'n', 'l', '\0',
   /* "hashworks.net", true */ 'h', 'a', 's', 'h', 'w', 'o', 'r', 'k', 's', '.', 'n', 'e', 't', '\0',
-  /* "hasinase.de", false */ 'h', 'a', 's', 'i', 'n', 'a', 's', 'e', '.', 'd', 'e', '\0',
   /* "haskovec.com", true */ 'h', 'a', 's', 'k', 'o', 'v', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "hasselbach-dellwig.de", true */ 'h', 'a', 's', 's', 'e', 'l', 'b', 'a', 'c', 'h', '-', 'd', 'e', 'l', 'l', 'w', 'i', 'g', '.', 'd', 'e', '\0',
   /* "hatcherlawgroupnm.com", true */ 'h', 'a', 't', 'c', 'h', 'e', 'r', 'l', 'a', 'w', 'g', 'r', 'o', 'u', 'p', 'n', 'm', '.', 'c', 'o', 'm', '\0',
   /* "hatethe.uk", true */ 'h', 'a', 't', 'e', 't', 'h', 'e', '.', 'u', 'k', '\0',
   /* "hatisenang.com", false */ 'h', 'a', 't', 'i', 's', 'e', 'n', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "haucke.xyz", true */ 'h', 'a', 'u', 'c', 'k', 'e', '.', 'x', 'y', 'z', '\0',
   /* "hauntedfishtank.com", false */ 'h', 'a', 'u', 'n', 't', 'e', 'd', 'f', 'i', 's', 'h', 't', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "hausverbrauch.de", true */ 'h', 'a', 'u', 's', 'v', 'e', 'r', 'b', 'r', 'a', 'u', 'c', 'h', '.', 'd', 'e', '\0',
@@ -6182,16 +6170,17 @@ static const char kSTSHostTable[] = {
   /* "honkion.net", true */ 'h', 'o', 'n', 'k', 'i', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "honovere.de", true */ 'h', 'o', 'n', 'o', 'v', 'e', 'r', 'e', '.', 'd', 'e', '\0',
   /* "hoodoo.io", true */ 'h', 'o', 'o', 'd', 'o', 'o', '.', 'i', 'o', '\0',
   /* "hoodoo.tech", true */ 'h', 'o', 'o', 'd', 'o', 'o', '.', 't', 'e', 'c', 'h', '\0',
   /* "hoodtrader.com", true */ 'h', 'o', 'o', 'd', 't', 'r', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "hookbin.com", true */ 'h', 'o', 'o', 'k', 'b', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "hooowl.com", true */ 'h', 'o', 'o', 'o', 'w', 'l', '.', 'c', 'o', 'm', '\0',
   /* "hoopsacademyusa.com", true */ 'h', 'o', 'o', 'p', 's', 'a', 'c', 'a', 'd', 'e', 'm', 'y', 'u', 's', 'a', '.', 'c', 'o', 'm', '\0',
+  /* "hooray.beer", true */ 'h', 'o', 'o', 'r', 'a', 'y', '.', 'b', 'e', 'e', 'r', '\0',
   /* "hopesb.org", true */ 'h', 'o', 'p', 'e', 's', 'b', '.', 'o', 'r', 'g', '\0',
   /* "hopewellproperties.co.uk", true */ 'h', 'o', 'p', 'e', 'w', 'e', 'l', 'l', 'p', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "hopps.me", true */ 'h', 'o', 'p', 'p', 's', '.', 'm', 'e', '\0',
   /* "hord.ca", true */ 'h', 'o', 'r', 'd', '.', 'c', 'a', '\0',
   /* "horeizai.net", true */ 'h', 'o', 'r', 'e', 'i', 'z', 'a', 'i', '.', 'n', 'e', 't', '\0',
   /* "horizonhomes-samui.com", true */ 'h', 'o', 'r', 'i', 'z', 'o', 'n', 'h', 'o', 'm', 'e', 's', '-', 's', 'a', 'm', 'u', 'i', '.', 'c', 'o', 'm', '\0',
   /* "hornblasters.com", true */ 'h', 'o', 'r', 'n', 'b', 'l', 'a', 's', 't', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "horning.co", true */ 'h', 'o', 'r', 'n', 'i', 'n', 'g', '.', 'c', 'o', '\0',
@@ -6209,16 +6198,17 @@ static const char kSTSHostTable[] = {
   /* "hosted-oswa.org", true */ 'h', 'o', 's', 't', 'e', 'd', '-', 'o', 's', 'w', 'a', '.', 'o', 'r', 'g', '\0',
   /* "hosted4u.de", true */ 'h', 'o', 's', 't', 'e', 'd', '4', 'u', '.', 'd', 'e', '\0',
   /* "hostedbgp.net", true */ 'h', 'o', 's', 't', 'e', 'd', 'b', 'g', 'p', '.', 'n', 'e', 't', '\0',
   /* "hostedtalkgadget.google.com", true */ 'h', 'o', 's', 't', 'e', 'd', 't', 'a', 'l', 'k', 'g', 'a', 'd', 'g', 'e', 't', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "hostelite.com", true */ 'h', 'o', 's', 't', 'e', 'l', 'i', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "hostfission.com", true */ 'h', 'o', 's', 't', 'f', 'i', 's', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "hostingactive.it", true */ 'h', 'o', 's', 't', 'i', 'n', 'g', 'a', 'c', 't', 'i', 'v', 'e', '.', 'i', 't', '\0',
   /* "hostingfj.com", true */ 'h', 'o', 's', 't', 'i', 'n', 'g', 'f', 'j', '.', 'c', 'o', 'm', '\0',
+  /* "hostinghelp.guru", true */ 'h', 'o', 's', 't', 'i', 'n', 'g', 'h', 'e', 'l', 'p', '.', 'g', 'u', 'r', 'u', '\0',
   /* "hostinginnederland.nl", true */ 'h', 'o', 's', 't', 'i', 'n', 'g', 'i', 'n', 'n', 'e', 'd', 'e', 'r', 'l', 'a', 'n', 'd', '.', 'n', 'l', '\0',
   /* "hostix.de", true */ 'h', 'o', 's', 't', 'i', 'x', '.', 'd', 'e', '\0',
   /* "hostma.ma", true */ 'h', 'o', 's', 't', 'm', 'a', '.', 'm', 'a', '\0',
   /* "hostmijnpagina.nl", true */ 'h', 'o', 's', 't', 'm', 'i', 'j', 'n', 'p', 'a', 'g', 'i', 'n', 'a', '.', 'n', 'l', '\0',
   /* "hotchillibox.co.za", true */ 'h', 'o', 't', 'c', 'h', 'i', 'l', 'l', 'i', 'b', 'o', 'x', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "hotel-kronjuwel.de", true */ 'h', 'o', 't', 'e', 'l', '-', 'k', 'r', 'o', 'n', 'j', 'u', 'w', 'e', 'l', '.', 'd', 'e', '\0',
   /* "hotel-pension-sonnalp.eu", true */ 'h', 'o', 't', 'e', 'l', '-', 'p', 'e', 'n', 's', 'i', 'o', 'n', '-', 's', 'o', 'n', 'n', 'a', 'l', 'p', '.', 'e', 'u', '\0',
   /* "hotel-tongruben.de", true */ 'h', 'o', 't', 'e', 'l', '-', 't', 'o', 'n', 'g', 'r', 'u', 'b', 'e', 'n', '.', 'd', 'e', '\0',
@@ -6318,31 +6308,29 @@ static const char kSTSHostTable[] = {
   /* "husic.net", true */ 'h', 'u', 's', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "husky.xyz", true */ 'h', 'u', 's', 'k', 'y', '.', 'x', 'y', 'z', '\0',
   /* "huskyinc.us", true */ 'h', 'u', 's', 'k', 'y', 'i', 'n', 'c', '.', 'u', 's', '\0',
   /* "hussam.eu.org", true */ 'h', 'u', 's', 's', 'a', 'm', '.', 'e', 'u', '.', 'o', 'r', 'g', '\0',
   /* "huutonauru.net", true */ 'h', 'u', 'u', 't', 'o', 'n', 'a', 'u', 'r', 'u', '.', 'n', 'e', 't', '\0',
   /* "huwcbjones.co.uk", true */ 'h', 'u', 'w', 'c', 'b', 'j', 'o', 'n', 'e', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "huwjones.me", true */ 'h', 'u', 'w', 'j', 'o', 'n', 'e', 's', '.', 'm', 'e', '\0',
   /* "huxley.net", true */ 'h', 'u', 'x', 'l', 'e', 'y', '.', 'n', 'e', 't', '\0',
-  /* "hvh.no", true */ 'h', 'v', 'h', '.', 'n', 'o', '\0',
   /* "hvtuananh.com", true */ 'h', 'v', 't', 'u', 'a', 'n', 'a', 'n', 'h', '.', 'c', 'o', 'm', '\0',
   /* "hwag-pb.de", true */ 'h', 'w', 'a', 'g', '-', 'p', 'b', '.', 'd', 'e', '\0',
   /* "hwinfo.com", true */ 'h', 'w', 'i', 'n', 'f', 'o', '.', 'c', 'o', 'm', '\0',
   /* "hx53.de", true */ 'h', 'x', '5', '3', '.', 'd', 'e', '\0',
   /* "hxying.com", true */ 'h', 'x', 'y', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "hybridworx.com", true */ 'h', 'y', 'b', 'r', 'i', 'd', 'w', 'o', 'r', 'x', '.', 'c', 'o', 'm', '\0',
   /* "hybridworx.de", true */ 'h', 'y', 'b', 'r', 'i', 'd', 'w', 'o', 'r', 'x', '.', 'd', 'e', '\0',
   /* "hybridworx.eu", true */ 'h', 'y', 'b', 'r', 'i', 'd', 'w', 'o', 'r', 'x', '.', 'e', 'u', '\0',
   /* "hybridworx.net", true */ 'h', 'y', 'b', 'r', 'i', 'd', 'w', 'o', 'r', 'x', '.', 'n', 'e', 't', '\0',
   /* "hybridworx.org", true */ 'h', 'y', 'b', 'r', 'i', 'd', 'w', 'o', 'r', 'x', '.', 'o', 'r', 'g', '\0',
   /* "hycken.com", true */ 'h', 'y', 'c', 'k', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "hydra.zone", true */ 'h', 'y', 'd', 'r', 'a', '.', 'z', 'o', 'n', 'e', '\0',
   /* "hydrocloud.net", true */ 'h', 'y', 'd', 'r', 'o', 'c', 'l', 'o', 'u', 'd', '.', 'n', 'e', 't', '\0',
-  /* "hydronium.ml", true */ 'h', 'y', 'd', 'r', 'o', 'n', 'i', 'u', 'm', '.', 'm', 'l', '\0',
   /* "hydrozone.fr", true */ 'h', 'y', 'd', 'r', 'o', 'z', 'o', 'n', 'e', '.', 'f', 'r', '\0',
   /* "hyk.me", true */ 'h', 'y', 'k', '.', 'm', 'e', '\0',
   /* "hymerscollege.co.uk", true */ 'h', 'y', 'm', 'e', 'r', 's', 'c', 'o', 'l', 'l', 'e', 'g', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "hynek.me", true */ 'h', 'y', 'n', 'e', 'k', '.', 'm', 'e', '\0',
   /* "hypa.net.au", true */ 'h', 'y', 'p', 'a', '.', 'n', 'e', 't', '.', 'a', 'u', '\0',
   /* "hypemgmt.com", true */ 'h', 'y', 'p', 'e', 'm', 'g', 'm', 't', '.', 'c', 'o', 'm', '\0',
   /* "hyper-matrix.org", true */ 'h', 'y', 'p', 'e', 'r', '-', 'm', 'a', 't', 'r', 'i', 'x', '.', 'o', 'r', 'g', '\0',
   /* "hyper-text.org", true */ 'h', 'y', 'p', 'e', 'r', '-', 't', 'e', 'x', 't', '.', 'o', 'r', 'g', '\0',
@@ -6381,17 +6369,16 @@ static const char kSTSHostTable[] = {
   /* "iceloch.com", true */ 'i', 'c', 'e', 'l', 'o', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "ich-find-den-g.net", true */ 'i', 'c', 'h', '-', 'f', 'i', 'n', 'd', '-', 'd', 'e', 'n', '-', 'g', '.', 'n', 'e', 't', '\0',
   /* "ich-tanke.de", true */ 'i', 'c', 'h', '-', 't', 'a', 'n', 'k', 'e', '.', 'd', 'e', '\0',
   /* "ichronos.net", true */ 'i', 'c', 'h', 'r', 'o', 'n', 'o', 's', '.', 'n', 'e', 't', '\0',
   /* "icij.org", false */ 'i', 'c', 'i', 'j', '.', 'o', 'r', 'g', '\0',
   /* "icity.ly", true */ 'i', 'c', 'i', 't', 'y', '.', 'l', 'y', '\0',
   /* "icntorrent.download", true */ 'i', 'c', 'n', 't', 'o', 'r', 'r', 'e', 'n', 't', '.', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', '\0',
   /* "icodeconnect.com", true */ 'i', 'c', 'o', 'd', 'e', 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
-  /* "icodesign.me", true */ 'i', 'c', 'o', 'd', 'e', 's', 'i', 'g', 'n', '.', 'm', 'e', '\0',
   /* "icq-project.net", true */ 'i', 'c', 'q', '-', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'n', 'e', 't', '\0',
   /* "ict-concept.nl", false */ 'i', 'c', 't', '-', 'c', 'o', 'n', 'c', 'e', 'p', 't', '.', 'n', 'l', '\0',
   /* "ict-radar.com", true */ 'i', 'c', 't', '-', 'r', 'a', 'd', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "ict-radar.nl", true */ 'i', 'c', 't', '-', 'r', 'a', 'd', 'a', 'r', '.', 'n', 'l', '\0',
   /* "ictinforensics.org", true */ 'i', 'c', 't', 'i', 'n', 'f', 'o', 'r', 'e', 'n', 's', 'i', 'c', 's', '.', 'o', 'r', 'g', '\0',
   /* "ictradar.com", true */ 'i', 'c', 't', 'r', 'a', 'd', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "icusignature.com", true */ 'i', 'c', 'u', 's', 'i', 'g', 'n', 'a', 't', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "icymint.me", true */ 'i', 'c', 'y', 'm', 'i', 'n', 't', '.', 'm', 'e', '\0',
@@ -6439,16 +6426,17 @@ static const char kSTSHostTable[] = {
   /* "ifxor.com", true */ 'i', 'f', 'x', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "igforums.com", true */ 'i', 'g', 'f', 'o', 'r', 'u', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "igglabs.com", true */ 'i', 'g', 'g', 'l', 'a', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "iggprivate.com", true */ 'i', 'g', 'g', 'p', 'r', 'i', 'v', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "iggsoft.com", true */ 'i', 'g', 'g', 's', 'o', 'f', 't', '.', 'c', 'o', 'm', '\0',
   /* "iggsoftware.com", true */ 'i', 'g', 'g', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "igiftcards.de", true */ 'i', 'g', 'i', 'f', 't', 'c', 'a', 'r', 'd', 's', '.', 'd', 'e', '\0',
   /* "igiftcards.nl", true */ 'i', 'g', 'i', 'f', 't', 'c', 'a', 'r', 'd', 's', '.', 'n', 'l', '\0',
+  /* "igk.de", true */ 'i', 'g', 'k', '.', 'd', 'e', '\0',
   /* "ignace72.eu", true */ 'i', 'g', 'n', 'a', 'c', 'e', '7', '2', '.', 'e', 'u', '\0',
   /* "ignat.by", true */ 'i', 'g', 'n', 'a', 't', '.', 'b', 'y', '\0',
   /* "ignitedmindz.in", true */ 'i', 'g', 'n', 'i', 't', 'e', 'd', 'm', 'i', 'n', 'd', 'z', '.', 'i', 'n', '\0',
   /* "igotoffer.com", true */ 'i', 'g', 'o', 't', 'o', 'f', 'f', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "igrivi.com", true */ 'i', 'g', 'r', 'i', 'v', 'i', '.', 'c', 'o', 'm', '\0',
   /* "ihkk.net", true */ 'i', 'h', 'k', 'k', '.', 'n', 'e', 't', '\0',
   /* "ihopeit.works", true */ 'i', 'h', 'o', 'p', 'e', 'i', 't', '.', 'w', 'o', 'r', 'k', 's', '\0',
   /* "ihostup.net", true */ 'i', 'h', 'o', 's', 't', 'u', 'p', '.', 'n', 'e', 't', '\0',
@@ -6487,17 +6475,16 @@ static const char kSTSHostTable[] = {
   /* "ilrg.com", true */ 'i', 'l', 'r', 'g', '.', 'c', 'o', 'm', '\0',
   /* "iltisim.ch", true */ 'i', 'l', 't', 'i', 's', 'i', 'm', '.', 'c', 'h', '\0',
   /* "im-c-shop.com", true */ 'i', 'm', '-', 'c', '-', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "im2net.com", true */ 'i', 'm', '2', 'n', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "imagefu.com", true */ 'i', 'm', 'a', 'g', 'e', 'f', 'u', '.', 'c', 'o', 'm', '\0',
   /* "imagescostumes.com", true */ 'i', 'm', 'a', 'g', 'e', 's', 'c', 'o', 's', 't', 'u', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "imaginary.ca", true */ 'i', 'm', 'a', 'g', 'i', 'n', 'a', 'r', 'y', '.', 'c', 'a', '\0',
   /* "imagr.io", true */ 'i', 'm', 'a', 'g', 'r', '.', 'i', 'o', '\0',
-  /* "imanolbarba.net", true */ 'i', 'm', 'a', 'n', 'o', 'l', 'b', 'a', 'r', 'b', 'a', '.', 'n', 'e', 't', '\0',
   /* "imanudin.net", true */ 'i', 'm', 'a', 'n', 'u', 'd', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "imbrian.org", true */ 'i', 'm', 'b', 'r', 'i', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "imbushuo.net", true */ 'i', 'm', 'b', 'u', 's', 'h', 'u', 'o', '.', 'n', 'e', 't', '\0',
   /* "imed.pt", true */ 'i', 'm', 'e', 'd', '.', 'p', 't', '\0',
   /* "imedi.co.uk", true */ 'i', 'm', 'e', 'd', 'i', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "imedi.it", true */ 'i', 'm', 'e', 'd', 'i', '.', 'i', 't', '\0',
   /* "imedikament.de", true */ 'i', 'm', 'e', 'd', 'i', 'k', 'a', 'm', 'e', 'n', 't', '.', 'd', 'e', '\0',
   /* "imeds.pl", true */ 'i', 'm', 'e', 'd', 's', '.', 'p', 'l', '\0',
@@ -6642,16 +6629,17 @@ static const char kSTSHostTable[] = {
   /* "intarweb.ca", true */ 'i', 'n', 't', 'a', 'r', 'w', 'e', 'b', '.', 'c', 'a', '\0',
   /* "integraelchen.de", true */ 'i', 'n', 't', 'e', 'g', 'r', 'a', 'e', 'l', 'c', 'h', 'e', 'n', '.', 'd', 'e', '\0',
   /* "integralblue.com", true */ 'i', 'n', 't', 'e', 'g', 'r', 'a', 'l', 'b', 'l', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "integrationinc.com", false */ 'i', 'n', 't', 'e', 'g', 'r', 'a', 't', 'i', 'o', 'n', 'i', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "integraxor.com.tw", true */ 'i', 'n', 't', 'e', 'g', 'r', 'a', 'x', 'o', 'r', '.', 'c', 'o', 'm', '.', 't', 'w', '\0',
   /* "integrityingovernmentidaho.com", true */ 'i', 'n', 't', 'e', 'g', 'r', 'i', 't', 'y', 'i', 'n', 'g', 'o', 'v', 'e', 'r', 'n', 'm', 'e', 'n', 't', 'i', 'd', 'a', 'h', 'o', '.', 'c', 'o', 'm', '\0',
   /* "integromat.com", true */ 'i', 'n', 't', 'e', 'g', 'r', 'o', 'm', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "intelevo.com", true */ 'i', 'n', 't', 'e', 'l', 'e', 'v', 'o', '.', 'c', 'o', 'm', '\0',
+  /* "intelldynamics.com", true */ 'i', 'n', 't', 'e', 'l', 'l', 'd', 'y', 'n', 'a', 'm', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "intellectdynamics.com", true */ 'i', 'n', 't', 'e', 'l', 'l', 'e', 'c', 't', 'd', 'y', 'n', 'a', 'm', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "intencje.pl", true */ 'i', 'n', 't', 'e', 'n', 'c', 'j', 'e', '.', 'p', 'l', '\0',
   /* "interaffairs.com", true */ 'i', 'n', 't', 'e', 'r', 'a', 'f', 'f', 'a', 'i', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "interasistmen.se", true */ 'i', 'n', 't', 'e', 'r', 'a', 's', 'i', 's', 't', 'm', 'e', 'n', '.', 's', 'e', '\0',
   /* "interchangedesign.com", true */ 'i', 'n', 't', 'e', 'r', 'c', 'h', 'a', 'n', 'g', 'e', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', 'm', '\0',
   /* "interchanges.io", true */ 'i', 'n', 't', 'e', 'r', 'c', 'h', 'a', 'n', 'g', 'e', 's', '.', 'i', 'o', '\0',
   /* "intercom.com", true */ 'i', 'n', 't', 'e', 'r', 'c', 'o', 'm', '.', 'c', 'o', 'm', '\0',
   /* "intercom.io", true */ 'i', 'n', 't', 'e', 'r', 'c', 'o', 'm', '.', 'i', 'o', '\0',
@@ -6813,17 +6801,16 @@ static const char kSTSHostTable[] = {
   /* "isqrl.de", true */ 'i', 's', 'q', 'r', 'l', '.', 'd', 'e', '\0',
   /* "israelbizreg.com", true */ 'i', 's', 'r', 'a', 'e', 'l', 'b', 'i', 'z', 'r', 'e', 'g', '.', 'c', 'o', 'm', '\0',
   /* "isreedyintheuk.com", true */ 'i', 's', 'r', 'e', 'e', 'd', 'y', 'i', 'n', 't', 'h', 'e', 'u', 'k', '.', 'c', 'o', 'm', '\0',
   /* "issforum.org", true */ 'i', 's', 's', 'f', 'o', 'r', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "issuesofconcern.in", true */ 'i', 's', 's', 'u', 'e', 's', 'o', 'f', 'c', 'o', 'n', 'c', 'e', 'r', 'n', '.', 'i', 'n', '\0',
   /* "istanbul.systems", true */ 'i', 's', 't', 'a', 'n', 'b', 'u', 'l', '.', 's', 'y', 's', 't', 'e', 'm', 's', '\0',
   /* "istanbultravelguide.info", true */ 'i', 's', 't', 'a', 'n', 'b', 'u', 'l', 't', 'r', 'a', 'v', 'e', 'l', 'g', 'u', 'i', 'd', 'e', '.', 'i', 'n', 'f', 'o', '\0',
   /* "istdieweltschonuntergegangen.de", true */ 'i', 's', 't', 'd', 'i', 'e', 'w', 'e', 'l', 't', 's', 'c', 'h', 'o', 'n', 'u', 'n', 't', 'e', 'r', 'g', 'e', 'g', 'a', 'n', 'g', 'e', 'n', '.', 'd', 'e', '\0',
-  /* "isteinbaby.de", true */ 'i', 's', 't', 'e', 'i', 'n', 'b', 'a', 'b', 'y', '.', 'd', 'e', '\0',
   /* "istgame.com", true */ 'i', 's', 't', 'g', 'a', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "istheapplestoredown.com", true */ 'i', 's', 't', 'h', 'e', 'a', 'p', 'p', 'l', 'e', 's', 't', 'o', 'r', 'e', 'd', 'o', 'w', 'n', '.', 'c', 'o', 'm', '\0',
   /* "istheapplestoredown.de", true */ 'i', 's', 't', 'h', 'e', 'a', 'p', 'p', 'l', 'e', 's', 't', 'o', 'r', 'e', 'd', 'o', 'w', 'n', '.', 'd', 'e', '\0',
   /* "isthefieldcontrolsystemdown.com", true */ 'i', 's', 't', 'h', 'e', 'f', 'i', 'e', 'l', 'd', 'c', 'o', 'n', 't', 'r', 'o', 'l', 's', 'y', 's', 't', 'e', 'm', 'd', 'o', 'w', 'n', '.', 'c', 'o', 'm', '\0',
   /* "istherrienstillcoach.com", true */ 'i', 's', 't', 'h', 'e', 'r', 'r', 'i', 'e', 'n', 's', 't', 'i', 'l', 'l', 'c', 'o', 'a', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "istorrent.is", true */ 'i', 's', 't', 'o', 'r', 'r', 'e', 'n', 't', '.', 'i', 's', '\0',
   /* "istschonsolangeinrente.de", true */ 'i', 's', 't', 's', 'c', 'h', 'o', 'n', 's', 'o', 'l', 'a', 'n', 'g', 'e', 'i', 'n', 'r', 'e', 'n', 't', 'e', '.', 'd', 'e', '\0',
   /* "isvbscriptdead.com", true */ 'i', 's', 'v', 'b', 's', 'c', 'r', 'i', 'p', 't', 'd', 'e', 'a', 'd', '.', 'c', 'o', 'm', '\0',
@@ -6863,16 +6850,17 @@ static const char kSTSHostTable[] = {
   /* "itpol.dk", true */ 'i', 't', 'p', 'o', 'l', '.', 'd', 'k', '\0',
   /* "itpro.ua", true */ 'i', 't', 'p', 'r', 'o', '.', 'u', 'a', '\0',
   /* "itpros.ru", true */ 'i', 't', 'p', 'r', 'o', 's', '.', 'r', 'u', '\0',
   /* "its-gutachten.de", true */ 'i', 't', 's', '-', 'g', 'u', 't', 'a', 'c', 'h', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "its-schindler.de", true */ 'i', 't', 's', '-', 's', 'c', 'h', 'i', 'n', 'd', 'l', 'e', 'r', '.', 'd', 'e', '\0',
   /* "its-v.de", true */ 'i', 't', 's', '-', 'v', '.', 'd', 'e', '\0',
   /* "its4living.com", true */ 'i', 't', 's', '4', 'l', 'i', 'v', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "itsanicedoor.co.uk", true */ 'i', 't', 's', 'a', 'n', 'i', 'c', 'e', 'd', 'o', 'o', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
+  /* "itsatrap.nl", false */ 'i', 't', 's', 'a', 't', 'r', 'a', 'p', '.', 'n', 'l', '\0',
   /* "itsecguy.com", true */ 'i', 't', 's', 'e', 'c', 'g', 'u', 'y', '.', 'c', 'o', 'm', '\0',
   /* "itsgoingdown.org", true */ 'i', 't', 's', 'g', 'o', 'i', 'n', 'g', 'd', 'o', 'w', 'n', '.', 'o', 'r', 'g', '\0',
   /* "itskayla.com", false */ 'i', 't', 's', 'k', 'a', 'y', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "itsok.de", true */ 'i', 't', 's', 'o', 'k', '.', 'd', 'e', '\0',
   /* "itspawned.com", true */ 'i', 't', 's', 'p', 'a', 'w', 'n', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "itspersonaltraining.nl", true */ 'i', 't', 's', 'p', 'e', 'r', 's', 'o', 'n', 'a', 'l', 't', 'r', 'a', 'i', 'n', 'i', 'n', 'g', '.', 'n', 'l', '\0',
   /* "itsryan.com", false */ 'i', 't', 's', 'r', 'y', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "itu2015.de", true */ 'i', 't', 'u', '2', '0', '1', '5', '.', 'd', 'e', '\0',
@@ -7040,16 +7028,17 @@ static const char kSTSHostTable[] = {
   /* "jeannelucienne.fr", true */ 'j', 'e', 'a', 'n', 'n', 'e', 'l', 'u', 'c', 'i', 'e', 'n', 'n', 'e', '.', 'f', 'r', '\0',
   /* "jedipedia.net", true */ 'j', 'e', 'd', 'i', 'p', 'e', 'd', 'i', 'a', '.', 'n', 'e', 't', '\0',
   /* "jedwarddurrett.com", true */ 'j', 'e', 'd', 'w', 'a', 'r', 'd', 'd', 'u', 'r', 'r', 'e', 't', 't', '.', 'c', 'o', 'm', '\0',
   /* "jeepmafia.com", true */ 'j', 'e', 'e', 'p', 'm', 'a', 'f', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "jeff.forsale", true */ 'j', 'e', 'f', 'f', '.', 'f', 'o', 'r', 's', 'a', 'l', 'e', '\0',
   /* "jeffanderson.me", true */ 'j', 'e', 'f', 'f', 'a', 'n', 'd', 'e', 'r', 's', 'o', 'n', '.', 'm', 'e', '\0',
   /* "jeffcasavant.com", false */ 'j', 'e', 'f', 'f', 'c', 'a', 's', 'a', 'v', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "jeffersonregan.co.uk", true */ 'j', 'e', 'f', 'f', 'e', 'r', 's', 'o', 'n', 'r', 'e', 'g', 'a', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
+  /* "jeffersonregan.com", true */ 'j', 'e', 'f', 'f', 'e', 'r', 's', 'o', 'n', 'r', 'e', 'g', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "jeffersonregan.net", true */ 'j', 'e', 'f', 'f', 'e', 'r', 's', 'o', 'n', 'r', 'e', 'g', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "jeffersonregan.org", true */ 'j', 'e', 'f', 'f', 'e', 'r', 's', 'o', 'n', 'r', 'e', 'g', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "jeffsanders.com", true */ 'j', 'e', 'f', 'f', 's', 'a', 'n', 'd', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "jefftickle.com", true */ 'j', 'e', 'f', 'f', 't', 'i', 'c', 'k', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "jekkt.com", true */ 'j', 'e', 'k', 'k', 't', '.', 'c', 'o', 'm', '\0',
   /* "jellow.nl", true */ 'j', 'e', 'l', 'l', 'o', 'w', '.', 'n', 'l', '\0',
   /* "jelly.cz", true */ 'j', 'e', 'l', 'l', 'y', '.', 'c', 'z', '\0',
   /* "jelmer.co.uk", true */ 'j', 'e', 'l', 'm', 'e', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -7212,16 +7201,17 @@ static const char kSTSHostTable[] = {
   /* "jps-selection.com", true */ 'j', 'p', 's', '-', 's', 'e', 'l', 'e', 'c', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "jps-selection.eu", true */ 'j', 'p', 's', '-', 's', 'e', 'l', 'e', 'c', 't', 'i', 'o', 'n', '.', 'e', 'u', '\0',
   /* "jr5devdoug.xyz", true */ 'j', 'r', '5', 'd', 'e', 'v', 'd', 'o', 'u', 'g', '.', 'x', 'y', 'z', '\0',
   /* "jr5devdouglas.xyz", true */ 'j', 'r', '5', 'd', 'e', 'v', 'd', 'o', 'u', 'g', 'l', 'a', 's', '.', 'x', 'y', 'z', '\0',
   /* "jr5proxdoug.xyz", true */ 'j', 'r', '5', 'p', 'r', 'o', 'x', 'd', 'o', 'u', 'g', '.', 'x', 'y', 'z', '\0',
   /* "js-online.net", true */ 'j', 's', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'n', 'e', 't', '\0',
   /* "jschumacher.info", true */ 'j', 's', 'c', 'h', 'u', 'm', 'a', 'c', 'h', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0',
   /* "json-viewer.com", true */ 'j', 's', 'o', 'n', '-', 'v', 'i', 'e', 'w', 'e', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "jsteward.moe", true */ 'j', 's', 't', 'e', 'w', 'a', 'r', 'd', '.', 'm', 'o', 'e', '\0',
   /* "jstore.ch", true */ 'j', 's', 't', 'o', 'r', 'e', '.', 'c', 'h', '\0',
   /* "jthackery.com", false */ 'j', 't', 'h', 'a', 'c', 'k', 'e', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "jtslay.com", true */ 'j', 't', 's', 'l', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "jubileum.online", true */ 'j', 'u', 'b', 'i', 'l', 'e', 'u', 'm', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "juch.cc", true */ 'j', 'u', 'c', 'h', '.', 'c', 'c', '\0',
   /* "juchit.at", true */ 'j', 'u', 'c', 'h', 'i', 't', '.', 'a', 't', '\0',
   /* "judoprodeti.cz", true */ 'j', 'u', 'd', 'o', 'p', 'r', 'o', 'd', 'e', 't', 'i', '.', 'c', 'z', '\0',
   /* "juergenhecht.de", true */ 'j', 'u', 'e', 'r', 'g', 'e', 'n', 'h', 'e', 'c', 'h', 't', '.', 'd', 'e', '\0',
@@ -7250,16 +7240,17 @@ static const char kSTSHostTable[] = {
   /* "junkdrome.org", true */ 'j', 'u', 'n', 'k', 'd', 'r', 'o', 'm', 'e', '.', 'o', 'r', 'g', '\0',
   /* "jurassicbarkharrogate.co.uk", true */ 'j', 'u', 'r', 'a', 's', 's', 'i', 'c', 'b', 'a', 'r', 'k', 'h', 'a', 'r', 'r', 'o', 'g', 'a', 't', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "jurko.cz", true */ 'j', 'u', 'r', 'k', 'o', '.', 'c', 'z', '\0',
   /* "jurriaan.ninja", true */ 'j', 'u', 'r', 'r', 'i', 'a', 'a', 'n', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "just-a-clanpage.de", true */ 'j', 'u', 's', 't', '-', 'a', '-', 'c', 'l', 'a', 'n', 'p', 'a', 'g', 'e', '.', 'd', 'e', '\0',
   /* "justanothercompany.name", true */ 'j', 'u', 's', 't', 'a', 'n', 'o', 't', 'h', 'e', 'r', 'c', 'o', 'm', 'p', 'a', 'n', 'y', '.', 'n', 'a', 'm', 'e', '\0',
   /* "justchunks.net", true */ 'j', 'u', 's', 't', 'c', 'h', 'u', 'n', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "justice4assange.com", true */ 'j', 'u', 's', 't', 'i', 'c', 'e', '4', 'a', 's', 's', 'a', 'n', 'g', 'e', '.', 'c', 'o', 'm', '\0',
+  /* "justinharrison.ca", true */ 'j', 'u', 's', 't', 'i', 'n', 'h', 'a', 'r', 'r', 'i', 's', 'o', 'n', '.', 'c', 'a', '\0',
   /* "justinho.com", true */ 'j', 'u', 's', 't', 'i', 'n', 'h', 'o', '.', 'c', 'o', 'm', '\0',
   /* "justinlemay.com", true */ 'j', 'u', 's', 't', 'i', 'n', 'l', 'e', 'm', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "justmy.website", true */ 'j', 'u', 's', 't', 'm', 'y', '.', 'w', 'e', 'b', 's', 'i', 't', 'e', '\0',
   /* "justpaste.it", true */ 'j', 'u', 's', 't', 'p', 'a', 's', 't', 'e', '.', 'i', 't', '\0',
   /* "justupdate.me", true */ 'j', 'u', 's', 't', 'u', 'p', 'd', 'a', 't', 'e', '.', 'm', 'e', '\0',
   /* "justyy.com", true */ 'j', 'u', 's', 't', 'y', 'y', '.', 'c', 'o', 'm', '\0',
   /* "jutella.de", true */ 'j', 'u', 't', 'e', 'l', 'l', 'a', '.', 'd', 'e', '\0',
   /* "juxstempel.de", true */ 'j', 'u', 'x', 's', 't', 'e', 'm', 'p', 'e', 'l', '.', 'd', 'e', '\0',
@@ -7472,16 +7463,17 @@ static const char kSTSHostTable[] = {
   /* "kiadoapartman.hu", true */ 'k', 'i', 'a', 'd', 'o', 'a', 'p', 'a', 'r', 't', 'm', 'a', 'n', '.', 'h', 'u', '\0',
   /* "kiahoriane.com", true */ 'k', 'i', 'a', 'h', 'o', 'r', 'i', 'a', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "kialo.com", true */ 'k', 'i', 'a', 'l', 'o', '.', 'c', 'o', 'm', '\0',
   /* "kiano.net", true */ 'k', 'i', 'a', 'n', 'o', '.', 'n', 'e', 't', '\0',
   /* "kiapps.ovh", true */ 'k', 'i', 'a', 'p', 'p', 's', '.', 'o', 'v', 'h', '\0',
   /* "kick-in.nl", true */ 'k', 'i', 'c', 'k', '-', 'i', 'n', '.', 'n', 'l', '\0',
   /* "kickass-proxies.org", true */ 'k', 'i', 'c', 'k', 'a', 's', 's', '-', 'p', 'r', 'o', 'x', 'i', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "kickerplaza.nl", true */ 'k', 'i', 'c', 'k', 'e', 'r', 'p', 'l', 'a', 'z', 'a', '.', 'n', 'l', '\0',
+  /* "kickstart.com.pk", true */ 'k', 'i', 'c', 'k', 's', 't', 'a', 'r', 't', '.', 'c', 'o', 'm', '.', 'p', 'k', '\0',
   /* "kidbacker.com", true */ 'k', 'i', 'd', 'b', 'a', 'c', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "kids-at-home.ch", true */ 'k', 'i', 'd', 's', '-', 'a', 't', '-', 'h', 'o', 'm', 'e', '.', 'c', 'h', '\0',
   /* "kiebel.de", true */ 'k', 'i', 'e', 'b', 'e', 'l', '.', 'd', 'e', '\0',
   /* "kiedys.net", true */ 'k', 'i', 'e', 'd', 'y', 's', '.', 'n', 'e', 't', '\0',
   /* "kiefer-networks.de", true */ 'k', 'i', 'e', 'f', 'e', 'r', '-', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'd', 'e', '\0',
   /* "kiekin.org", true */ 'k', 'i', 'e', 'k', 'i', 'n', '.', 'o', 'r', 'g', '\0',
   /* "kielderweather.org.uk", true */ 'k', 'i', 'e', 'l', 'd', 'e', 'r', 'w', 'e', 'a', 't', 'h', 'e', 'r', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "kiffmarks.com", true */ 'k', 'i', 'f', 'f', 'm', 'a', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
@@ -7739,17 +7731,16 @@ static const char kSTSHostTable[] = {
   /* "ku.io", true */ 'k', 'u', '.', 'i', 'o', '\0',
   /* "kualo.co.uk", true */ 'k', 'u', 'a', 'l', 'o', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "kualo.com", true */ 'k', 'u', 'a', 'l', 'o', '.', 'c', 'o', 'm', '\0',
   /* "kualo.in", true */ 'k', 'u', 'a', 'l', 'o', '.', 'i', 'n', '\0',
   /* "kuaza.com", true */ 'k', 'u', 'a', 'z', 'a', '.', 'c', 'o', 'm', '\0',
   /* "kub.hr", true */ 'k', 'u', 'b', '.', 'h', 'r', '\0',
   /* "kubik-rubik.de", false */ 'k', 'u', 'b', 'i', 'k', '-', 'r', 'u', 'b', 'i', 'k', '.', 'd', 'e', '\0',
   /* "kubusadvocaten.nl", true */ 'k', 'u', 'b', 'u', 's', 'a', 'd', 'v', 'o', 'c', 'a', 't', 'e', 'n', '.', 'n', 'l', '\0',
-  /* "kuchentraum.eu", true */ 'k', 'u', 'c', 'h', 'e', 'n', 't', 'r', 'a', 'u', 'm', '.', 'e', 'u', '\0',
   /* "kuehndel.org", true */ 'k', 'u', 'e', 'h', 'n', 'd', 'e', 'l', '.', 'o', 'r', 'g', '\0',
   /* "kuehnel-bs.de", true */ 'k', 'u', 'e', 'h', 'n', 'e', 'l', '-', 'b', 's', '.', 'd', 'e', '\0',
   /* "kuehnel.org", true */ 'k', 'u', 'e', 'h', 'n', 'e', 'l', '.', 'o', 'r', 'g', '\0',
   /* "kuemmerlin.eu", true */ 'k', 'u', 'e', 'm', 'm', 'e', 'r', 'l', 'i', 'n', '.', 'e', 'u', '\0',
   /* "kuemmling.eu", true */ 'k', 'u', 'e', 'm', 'm', 'l', 'i', 'n', 'g', '.', 'e', 'u', '\0',
   /* "kujadin.de", true */ 'k', 'u', 'j', 'a', 'd', 'i', 'n', '.', 'd', 'e', '\0',
   /* "kukal.cz", true */ 'k', 'u', 'k', 'a', 'l', '.', 'c', 'z', '\0',
   /* "kuketz-blog.de", true */ 'k', 'u', 'k', 'e', 't', 'z', '-', 'b', 'l', 'o', 'g', '.', 'd', 'e', '\0',
@@ -8006,16 +7997,17 @@ static const char kSTSHostTable[] = {
   /* "lennier.info", true */ 'l', 'e', 'n', 'n', 'i', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0',
   /* "lennyobez.be", true */ 'l', 'e', 'n', 'n', 'y', 'o', 'b', 'e', 'z', '.', 'b', 'e', '\0',
   /* "lenuagebauche.org", true */ 'l', 'e', 'n', 'u', 'a', 'g', 'e', 'b', 'a', 'u', 'c', 'h', 'e', '.', 'o', 'r', 'g', '\0',
   /* "lenzw.de", true */ 'l', 'e', 'n', 'z', 'w', '.', 'd', 'e', '\0',
   /* "leola.cz", true */ 'l', 'e', 'o', 'l', 'a', '.', 'c', 'z', '\0',
   /* "leola.sk", true */ 'l', 'e', 'o', 'l', 'a', '.', 's', 'k', '\0',
   /* "leominstercu.com", false */ 'l', 'e', 'o', 'm', 'i', 'n', 's', 't', 'e', 'r', 'c', 'u', '.', 'c', 'o', 'm', '\0',
   /* "leonard.io", false */ 'l', 'e', 'o', 'n', 'a', 'r', 'd', '.', 'i', 'o', '\0',
+  /* "leonardcamacho.me", true */ 'l', 'e', 'o', 'n', 'a', 'r', 'd', 'c', 'a', 'm', 'a', 'c', 'h', 'o', '.', 'm', 'e', '\0',
   /* "leonax.net", true */ 'l', 'e', 'o', 'n', 'a', 'x', '.', 'n', 'e', 't', '\0',
   /* "leondenard.com", true */ 'l', 'e', 'o', 'n', 'd', 'e', 'n', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0',
   /* "leonhooijer.nl", true */ 'l', 'e', 'o', 'n', 'h', 'o', 'o', 'i', 'j', 'e', 'r', '.', 'n', 'l', '\0',
   /* "leonklingele.de", true */ 'l', 'e', 'o', 'n', 'k', 'l', 'i', 'n', 'g', 'e', 'l', 'e', '.', 'd', 'e', '\0',
   /* "leonmahler.consulting", true */ 'l', 'e', 'o', 'n', 'm', 'a', 'h', 'l', 'e', 'r', '.', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '\0',
   /* "leopoldina.net", true */ 'l', 'e', 'o', 'p', 'o', 'l', 'd', 'i', 'n', 'a', '.', 'n', 'e', 't', '\0',
   /* "lep.gov", true */ 'l', 'e', 'p', '.', 'g', 'o', 'v', '\0',
   /* "leppis-it.de", true */ 'l', 'e', 'p', 'p', 'i', 's', '-', 'i', 't', '.', 'd', 'e', '\0',
@@ -8199,32 +8191,32 @@ static const char kSTSHostTable[] = {
   /* "livekort.se", true */ 'l', 'i', 'v', 'e', 'k', 'o', 'r', 't', '.', 's', 'e', '\0',
   /* "liveregistratie.nl", true */ 'l', 'i', 'v', 'e', 'r', 'e', 'g', 'i', 's', 't', 'r', 'a', 't', 'i', 'e', '.', 'n', 'l', '\0',
   /* "liverewrite.com", true */ 'l', 'i', 'v', 'e', 'r', 'e', 'w', 'r', 'i', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "liverpoolmutualhomes.org", false */ 'l', 'i', 'v', 'e', 'r', 'p', 'o', 'o', 'l', 'm', 'u', 't', 'u', 'a', 'l', 'h', 'o', 'm', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "living-space.co.nz", true */ 'l', 'i', 'v', 'i', 'n', 'g', '-', 's', 'p', 'a', 'c', 'e', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "livingworduk.org", true */ 'l', 'i', 'v', 'i', 'n', 'g', 'w', 'o', 'r', 'd', 'u', 'k', '.', 'o', 'r', 'g', '\0',
   /* "livnev.me", true */ 'l', 'i', 'v', 'n', 'e', 'v', '.', 'm', 'e', '\0',
   /* "livnev.xyz", true */ 'l', 'i', 'v', 'n', 'e', 'v', '.', 'x', 'y', 'z', '\0',
-  /* "livolett.de", true */ 'l', 'i', 'v', 'o', 'l', 'e', 't', 't', '.', 'd', 'e', '\0',
   /* "lixingcong.com", false */ 'l', 'i', 'x', 'i', 'n', 'g', 'c', 'o', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "lizardsystems.com", true */ 'l', 'i', 'z', 'a', 'r', 'd', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "lizhi.io", true */ 'l', 'i', 'z', 'h', 'i', '.', 'i', 'o', '\0',
   /* "ljs.io", true */ 'l', 'j', 's', '.', 'i', 'o', '\0',
   /* "lkummer.cz", true */ 'l', 'k', 'u', 'm', 'm', 'e', 'r', '.', 'c', 'z', '\0',
   /* "llamacuba.com", true */ 'l', 'l', 'a', 'm', 'a', 'c', 'u', 'b', 'a', '.', 'c', 'o', 'm', '\0',
   /* "lloyd-day.me", true */ 'l', 'l', 'o', 'y', 'd', '-', 'd', 'a', 'y', '.', 'm', 'e', '\0',
   /* "lm-pumpen.de", true */ 'l', 'm', '-', 'p', 'u', 'm', 'p', 'e', 'n', '.', 'd', 'e', '\0',
   /* "lmddgtfy.net", true */ 'l', 'm', 'd', 'd', 'g', 't', 'f', 'y', '.', 'n', 'e', 't', '\0',
   /* "lmerza.com", true */ 'l', 'm', 'e', 'r', 'z', 'a', '.', 'c', 'o', 'm', '\0',
   /* "lmintlcx.com", true */ 'l', 'm', 'i', 'n', 't', 'l', 'c', 'x', '.', 'c', 'o', 'm', '\0',
   /* "lmkts.com", true */ 'l', 'm', 'k', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "lmmtfy.io", true */ 'l', 'm', 'm', 't', 'f', 'y', '.', 'i', 'o', '\0',
   /* "lmsptfy.com", true */ 'l', 'm', 's', 'p', 't', 'f', 'y', '.', 'c', 'o', 'm', '\0',
   /* "lmtm.eu", true */ 'l', 'm', 't', 'm', '.', 'e', 'u', '\0',
+  /* "lnoldan.com", true */ 'l', 'n', 'o', 'l', 'd', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "lntu.org", true */ 'l', 'n', 't', 'u', '.', 'o', 'r', 'g', '\0',
   /* "lnx.li", true */ 'l', 'n', 'x', '.', 'l', 'i', '\0',
   /* "loacg.com", true */ 'l', 'o', 'a', 'c', 'g', '.', 'c', 'o', 'm', '\0',
   /* "loadlow.me", true */ 'l', 'o', 'a', 'd', 'l', 'o', 'w', '.', 'm', 'e', '\0',
   /* "loancompare.co.za", true */ 'l', 'o', 'a', 'n', 'c', 'o', 'm', 'p', 'a', 'r', 'e', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "loansonline.today", true */ 'l', 'o', 'a', 'n', 's', 'o', 'n', 'l', 'i', 'n', 'e', '.', 't', 'o', 'd', 'a', 'y', '\0',
   /* "loanstreet.be", true */ 'l', 'o', 'a', 'n', 's', 't', 'r', 'e', 'e', 't', '.', 'b', 'e', '\0',
   /* "loanstreet.nl", true */ 'l', 'o', 'a', 'n', 's', 't', 'r', 'e', 'e', 't', '.', 'n', 'l', '\0',
@@ -8462,16 +8454,17 @@ static const char kSTSHostTable[] = {
   /* "madeglobal.com", true */ 'm', 'a', 'd', 'e', 'g', 'l', 'o', 'b', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "madeitwor.se", true */ 'm', 'a', 'd', 'e', 'i', 't', 'w', 'o', 'r', '.', 's', 'e', '\0',
   /* "madin.ru", true */ 'm', 'a', 'd', 'i', 'n', '.', 'r', 'u', '\0',
   /* "madnetwork.org", true */ 'm', 'a', 'd', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'o', 'r', 'g', '\0',
   /* "madokami.net", true */ 'm', 'a', 'd', 'o', 'k', 'a', 'm', 'i', '.', 'n', 'e', 't', '\0',
   /* "madrants.net", true */ 'm', 'a', 'd', 'r', 'a', 'n', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "madreacqua.org", true */ 'm', 'a', 'd', 'r', 'e', 'a', 'c', 'q', 'u', 'a', '.', 'o', 'r', 'g', '\0',
   /* "madtec.de", true */ 'm', 'a', 'd', 't', 'e', 'c', '.', 'd', 'e', '\0',
+  /* "madusecurity.com", true */ 'm', 'a', 'd', 'u', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "maelstrom.ninja", true */ 'm', 'a', 'e', 'l', 's', 't', 'r', 'o', 'm', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "maestrano.com", true */ 'm', 'a', 'e', 's', 't', 'r', 'a', 'n', 'o', '.', 'c', 'o', 'm', '\0',
   /* "maff.scot", false */ 'm', 'a', 'f', 'f', '.', 's', 'c', 'o', 't', '\0',
   /* "mafiaforum.de", true */ 'm', 'a', 'f', 'i', 'a', 'f', 'o', 'r', 'u', 'm', '.', 'd', 'e', '\0',
   /* "mafiasi.de", true */ 'm', 'a', 'f', 'i', 'a', 's', 'i', '.', 'd', 'e', '\0',
   /* "magdic.eu", true */ 'm', 'a', 'g', 'd', 'i', 'c', '.', 'e', 'u', '\0',
   /* "magenbrot.net", true */ 'm', 'a', 'g', 'e', 'n', 'b', 'r', 'o', 't', '.', 'n', 'e', 't', '\0',
   /* "magenda.sk", true */ 'm', 'a', 'g', 'e', 'n', 'd', 'a', '.', 's', 'k', '\0',
@@ -8588,24 +8581,22 @@ static const char kSTSHostTable[] = {
   /* "marbogardenlidkoping.se", true */ 'm', 'a', 'r', 'b', 'o', 'g', 'a', 'r', 'd', 'e', 'n', 'l', 'i', 'd', 'k', 'o', 'p', 'i', 'n', 'g', '.', 's', 'e', '\0',
   /* "marc-schlagenhauf.de", true */ 'm', 'a', 'r', 'c', '-', 's', 'c', 'h', 'l', 'a', 'g', 'e', 'n', 'h', 'a', 'u', 'f', '.', 'd', 'e', '\0',
   /* "marcdorka.de", true */ 'm', 'a', 'r', 'c', 'd', 'o', 'r', 'k', 'a', '.', 'd', 'e', '\0',
   /* "marcel-preuss.de", true */ 'm', 'a', 'r', 'c', 'e', 'l', '-', 'p', 'r', 'e', 'u', 's', 's', '.', 'd', 'e', '\0',
   /* "marcelpreuss.de", true */ 'm', 'a', 'r', 'c', 'e', 'l', 'p', 'r', 'e', 'u', 's', 's', '.', 'd', 'e', '\0',
   /* "marcelsiegert.com", true */ 'm', 'a', 'r', 'c', 'e', 'l', 's', 'i', 'e', 'g', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "marco-polo-reisen.com", true */ 'm', 'a', 'r', 'c', 'o', '-', 'p', 'o', 'l', 'o', '-', 'r', 'e', 'i', 's', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "marcoececilia.it", true */ 'm', 'a', 'r', 'c', 'o', 'e', 'c', 'e', 'c', 'i', 'l', 'i', 'a', '.', 'i', 't', '\0',
-  /* "marcofinke.de", true */ 'm', 'a', 'r', 'c', 'o', 'f', 'i', 'n', 'k', 'e', '.', 'd', 'e', '\0',
   /* "marcohager.de", true */ 'm', 'a', 'r', 'c', 'o', 'h', 'a', 'g', 'e', 'r', '.', 'd', 'e', '\0',
   /* "marcoslater.com", true */ 'm', 'a', 'r', 'c', 'o', 's', 'l', 'a', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "marcschlagenhauf.de", true */ 'm', 'a', 'r', 'c', 's', 'c', 'h', 'l', 'a', 'g', 'e', 'n', 'h', 'a', 'u', 'f', '.', 'd', 'e', '\0',
   /* "marcush.de", true */ 'm', 'a', 'r', 'c', 'u', 's', 'h', '.', 'd', 'e', '\0',
   /* "mareklecian.cz", true */ 'm', 'a', 'r', 'e', 'k', 'l', 'e', 'c', 'i', 'a', 'n', '.', 'c', 'z', '\0',
   /* "margagriesser.de", true */ 'm', 'a', 'r', 'g', 'a', 'g', 'r', 'i', 'e', 's', 's', 'e', 'r', '.', 'd', 'e', '\0',
-  /* "margaretrosefashions.co.uk", true */ 'm', 'a', 'r', 'g', 'a', 'r', 'e', 't', 'r', 'o', 's', 'e', 'f', 'a', 's', 'h', 'i', 'o', 'n', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "marianatherapy.com", true */ 'm', 'a', 'r', 'i', 'a', 'n', 'a', 't', 'h', 'e', 'r', 'a', 'p', 'y', '.', 'c', 'o', 'm', '\0',
   /* "mariaolesen.dk", true */ 'm', 'a', 'r', 'i', 'a', 'o', 'l', 'e', 's', 'e', 'n', '.', 'd', 'k', '\0',
   /* "marie.club", true */ 'm', 'a', 'r', 'i', 'e', '.', 'c', 'l', 'u', 'b', '\0',
   /* "mariehane.com", true */ 'm', 'a', 'r', 'i', 'e', 'h', 'a', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mariemiramont.fr", true */ 'm', 'a', 'r', 'i', 'e', 'm', 'i', 'r', 'a', 'm', 'o', 'n', 't', '.', 'f', 'r', '\0',
   /* "marikafranke.de", true */ 'm', 'a', 'r', 'i', 'k', 'a', 'f', 'r', 'a', 'n', 'k', 'e', '.', 'd', 'e', '\0',
   /* "marilsnijders.nl", true */ 'm', 'a', 'r', 'i', 'l', 's', 'n', 'i', 'j', 'd', 'e', 'r', 's', '.', 'n', 'l', '\0',
   /* "marinazarza.es", true */ 'm', 'a', 'r', 'i', 'n', 'a', 'z', 'a', 'r', 'z', 'a', '.', 'e', 's', '\0',
@@ -8693,16 +8684,17 @@ static const char kSTSHostTable[] = {
   /* "matrict.com", true */ 'm', 'a', 't', 'r', 'i', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "matt.tf", true */ 'm', 'a', 't', 't', '.', 't', 'f', '\0',
   /* "mattandreko.com", true */ 'm', 'a', 't', 't', 'a', 'n', 'd', 'r', 'e', 'k', 'o', '.', 'c', 'o', 'm', '\0',
   /* "mattandyana.com", true */ 'm', 'a', 't', 't', 'a', 'n', 'd', 'y', 'a', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "matteomarescotti.it", true */ 'm', 'a', 't', 't', 'e', 'o', 'm', 'a', 'r', 'e', 's', 'c', 'o', 't', 't', 'i', '.', 'i', 't', '\0',
   /* "matterconcern.com", true */ 'm', 'a', 't', 't', 'e', 'r', 'c', 'o', 'n', 'c', 'e', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "matthecat.com", true */ 'm', 'a', 't', 't', 'h', 'e', 'c', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "matthewgrill.com", false */ 'm', 'a', 't', 't', 'h', 'e', 'w', 'g', 'r', 'i', 'l', 'l', '.', 'c', 'o', 'm', '\0',
+  /* "matthewkenny.co.uk", true */ 'm', 'a', 't', 't', 'h', 'e', 'w', 'k', 'e', 'n', 'n', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "matthewohare.com", true */ 'm', 'a', 't', 't', 'h', 'e', 'w', 'o', 'h', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "matthi.coffee", true */ 'm', 'a', 't', 't', 'h', 'i', '.', 'c', 'o', 'f', 'f', 'e', 'e', '\0',
   /* "matthias-muenzner.de", true */ 'm', 'a', 't', 't', 'h', 'i', 'a', 's', '-', 'm', 'u', 'e', 'n', 'z', 'n', 'e', 'r', '.', 'd', 'e', '\0',
   /* "matthiasadler.info", true */ 'm', 'a', 't', 't', 'h', 'i', 'a', 's', 'a', 'd', 'l', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0',
   /* "matthiasschwab.de", true */ 'm', 'a', 't', 't', 'h', 'i', 'a', 's', 's', 'c', 'h', 'w', 'a', 'b', '.', 'd', 'e', '\0',
   /* "mattia98.org", true */ 'm', 'a', 't', 't', 'i', 'a', '9', '8', '.', 'o', 'r', 'g', '\0',
   /* "mattli.us", true */ 'm', 'a', 't', 't', 'l', 'i', '.', 'u', 's', '\0',
   /* "mattmccutchen.net", true */ 'm', 'a', 't', 't', 'm', 'c', 'c', 'u', 't', 'c', 'h', 'e', 'n', '.', 'n', 'e', 't', '\0',
@@ -8764,16 +8756,17 @@ static const char kSTSHostTable[] = {
   /* "mcea-hld.jp", true */ 'm', 'c', 'e', 'a', '-', 'h', 'l', 'd', '.', 'j', 'p', '\0',
   /* "mceconferencecentre.eu", true */ 'm', 'c', 'e', 'c', 'o', 'n', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 'c', 'e', 'n', 't', 'r', 'e', '.', 'e', 'u', '\0',
   /* "mcgarderen.nl", true */ 'm', 'c', 'g', 'a', 'r', 'd', 'e', 'r', 'e', 'n', '.', 'n', 'l', '\0',
   /* "mchopkins.net", true */ 'm', 'c', 'h', 'o', 'p', 'k', 'i', 'n', 's', '.', 'n', 'e', 't', '\0',
   /* "mchristopher.com", true */ 'm', 'c', 'h', 'r', 'i', 's', 't', 'o', 'p', 'h', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "mcjackk77.com", true */ 'm', 'c', 'j', 'a', 'c', 'k', 'k', '7', '7', '.', 'c', 'o', 'm', '\0',
   /* "mckinley.school", false */ 'm', 'c', 'k', 'i', 'n', 'l', 'e', 'y', '.', 's', 'c', 'h', 'o', 'o', 'l', '\0',
   /* "mckinley1.com", false */ 'm', 'c', 'k', 'i', 'n', 'l', 'e', 'y', '1', '.', 'c', 'o', 'm', '\0',
+  /* "mcl.gg", true */ 'm', 'c', 'l', '.', 'g', 'g', '\0',
   /* "mclist.it", true */ 'm', 'c', 'l', 'i', 's', 't', '.', 'i', 't', '\0',
   /* "mcnext.net", true */ 'm', 'c', 'n', 'e', 'x', 't', '.', 'n', 'e', 't', '\0',
   /* "mcooperlaw.com", true */ 'm', 'c', 'o', 'o', 'p', 'e', 'r', 'l', 'a', 'w', '.', 'c', 'o', 'm', '\0',
   /* "mcpart.land", true */ 'm', 'c', 'p', 'a', 'r', 't', '.', 'l', 'a', 'n', 'd', '\0',
   /* "mcrn.jp", true */ 'm', 'c', 'r', 'n', '.', 'j', 'p', '\0',
   /* "mcsniper.co", true */ 'm', 'c', 's', 'n', 'i', 'p', 'e', 'r', '.', 'c', 'o', '\0',
   /* "mctherealm.net", true */ 'm', 'c', 't', 'h', 'e', 'r', 'e', 'a', 'l', 'm', '.', 'n', 'e', 't', '\0',
   /* "mcuong.tk", false */ 'm', 'c', 'u', 'o', 'n', 'g', '.', 't', 'k', '\0',
@@ -8913,17 +8906,20 @@ static const char kSTSHostTable[] = {
   /* "metaether.net", true */ 'm', 'e', 't', 'a', 'e', 't', 'h', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "metalsculpture.co.uk", true */ 'm', 'e', 't', 'a', 'l', 's', 'c', 'u', 'l', 'p', 't', 'u', 'r', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "metapeen.nl", true */ 'm', 'e', 't', 'a', 'p', 'e', 'e', 'n', '.', 'n', 'l', '\0',
   /* "metasyntactic.xyz", true */ 'm', 'e', 't', 'a', 's', 'y', 'n', 't', 'a', 'c', 't', 'i', 'c', '.', 'x', 'y', 'z', '\0',
   /* "meteenonline.nl", true */ 'm', 'e', 't', 'e', 'e', 'n', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'n', 'l', '\0',
   /* "meteobox.co", true */ 'm', 'e', 't', 'e', 'o', 'b', 'o', 'x', '.', 'c', 'o', '\0',
   /* "meteobox.cz", true */ 'm', 'e', 't', 'e', 'o', 'b', 'o', 'x', '.', 'c', 'z', '\0',
   /* "meteobox.de", true */ 'm', 'e', 't', 'e', 'o', 'b', 'o', 'x', '.', 'd', 'e', '\0',
+  /* "meteobox.es", true */ 'm', 'e', 't', 'e', 'o', 'b', 'o', 'x', '.', 'e', 's', '\0',
   /* "meteobox.fr", true */ 'm', 'e', 't', 'e', 'o', 'b', 'o', 'x', '.', 'f', 'r', '\0',
+  /* "meteobox.pl", true */ 'm', 'e', 't', 'e', 'o', 'b', 'o', 'x', '.', 'p', 'l', '\0',
+  /* "meteobox.sk", true */ 'm', 'e', 't', 'e', 'o', 'b', 'o', 'x', '.', 's', 'k', '\0',
   /* "meteosherbrooke.com", false */ 'm', 'e', 't', 'e', 'o', 's', 'h', 'e', 'r', 'b', 'r', 'o', 'o', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "meter.md", true */ 'm', 'e', 't', 'e', 'r', '.', 'm', 'd', '\0',
   /* "metricaid.com", true */ 'm', 'e', 't', 'r', 'i', 'c', 'a', 'i', 'd', '.', 'c', 'o', 'm', '\0',
   /* "metrobriefs.com", true */ 'm', 'e', 't', 'r', 'o', 'b', 'r', 'i', 'e', 'f', 's', '.', 'c', 'o', 'm', '\0',
   /* "metronaut.de", true */ 'm', 'e', 't', 'r', 'o', 'n', 'a', 'u', 't', '.', 'd', 'e', '\0',
   /* "metsasta.com", true */ 'm', 'e', 't', 's', 'a', 's', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "metzgerei-birkenhof.de", true */ 'm', 'e', 't', 'z', 'g', 'e', 'r', 'e', 'i', '-', 'b', 'i', 'r', 'k', 'e', 'n', 'h', 'o', 'f', '.', 'd', 'e', '\0',
   /* "meusigno.com", true */ 'm', 'e', 'u', 's', 'i', 'g', 'n', 'o', '.', 'c', 'o', 'm', '\0',
@@ -9047,17 +9043,16 @@ static const char kSTSHostTable[] = {
   /* "minez-nightswatch.com", false */ 'm', 'i', 'n', 'e', 'z', '-', 'n', 'i', 'g', 'h', 't', 's', 'w', 'a', 't', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "minf3-games.de", true */ 'm', 'i', 'n', 'f', '3', '-', 'g', 'a', 'm', 'e', 's', '.', 'd', 'e', '\0',
   /* "mingram.net", true */ 'm', 'i', 'n', 'g', 'r', 'a', 'm', '.', 'n', 'e', 't', '\0',
   /* "minh.at", true */ 'm', 'i', 'n', 'h', '.', 'a', 't', '\0',
   /* "minhanossasenhora.com.br", true */ 'm', 'i', 'n', 'h', 'a', 'n', 'o', 's', 's', 'a', 's', 'e', 'n', 'h', 'o', 'r', 'a', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "mini-piraten.de", true */ 'm', 'i', 'n', 'i', '-', 'p', 'i', 'r', 'a', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "mini2.fi", true */ 'm', 'i', 'n', 'i', '2', '.', 'f', 'i', '\0',
   /* "minikneet.com", true */ 'm', 'i', 'n', 'i', 'k', 'n', 'e', 'e', 't', '.', 'c', 'o', 'm', '\0',
-  /* "minimvc.com", true */ 'm', 'i', 'n', 'i', 'm', 'v', 'c', '.', 'c', 'o', 'm', '\0',
   /* "minipainting.net", true */ 'm', 'i', 'n', 'i', 'p', 'a', 'i', 'n', 't', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0',
   /* "minis-hip.de", true */ 'm', 'i', 'n', 'i', 's', '-', 'h', 'i', 'p', '.', 'd', 'e', '\0',
   /* "miniskipper.at", true */ 'm', 'i', 'n', 'i', 's', 'k', 'i', 'p', 'p', 'e', 'r', '.', 'a', 't', '\0',
   /* "minitruckin.net", true */ 'm', 'i', 'n', 'i', 't', 'r', 'u', 'c', 'k', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "minitrucktalk.com", true */ 'm', 'i', 'n', 'i', 't', 'r', 'u', 'c', 'k', 't', 'a', 'l', 'k', '.', 'c', 'o', 'm', '\0',
   /* "minkondom.nu", true */ 'm', 'i', 'n', 'k', 'o', 'n', 'd', 'o', 'm', '.', 'n', 'u', '\0',
   /* "minobar.com", true */ 'm', 'i', 'n', 'o', 'b', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "minora.io", true */ 'm', 'i', 'n', 'o', 'r', 'a', '.', 'i', 'o', '\0',
@@ -9152,16 +9147,17 @@ static const char kSTSHostTable[] = {
   /* "mobilesector.de", true */ 'm', 'o', 'b', 'i', 'l', 'e', 's', 'e', 'c', 't', 'o', 'r', '.', 'd', 'e', '\0',
   /* "mobiletraff.co", true */ 'm', 'o', 'b', 'i', 'l', 'e', 't', 'r', 'a', 'f', 'f', '.', 'c', 'o', '\0',
   /* "mobilewikiserver.com", true */ 'm', 'o', 'b', 'i', 'l', 'e', 'w', 'i', 'k', 'i', 's', 'e', 'r', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "mobilinnov.it", true */ 'm', 'o', 'b', 'i', 'l', 'i', 'n', 'n', 'o', 'v', '.', 'i', 't', '\0',
   /* "mobility-events.ch", true */ 'm', 'o', 'b', 'i', 'l', 'i', 't', 'y', '-', 'e', 'v', 'e', 'n', 't', 's', '.', 'c', 'h', '\0',
   /* "mobilux.lv", true */ 'm', 'o', 'b', 'i', 'l', 'u', 'x', '.', 'l', 'v', '\0',
   /* "mobio.net", true */ 'm', 'o', 'b', 'i', 'o', '.', 'n', 'e', 't', '\0',
   /* "mobisaar-cloud.de", true */ 'm', 'o', 'b', 'i', 's', 'a', 'a', 'r', '-', 'c', 'l', 'o', 'u', 'd', '.', 'd', 'e', '\0',
+  /* "mobix5.com", true */ 'm', 'o', 'b', 'i', 'x', '5', '.', 'c', 'o', 'm', '\0',
   /* "mobobe.com", true */ 'm', 'o', 'b', 'o', 'b', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mockmyapp.com", true */ 'm', 'o', 'c', 'k', 'm', 'y', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "modafinil.com", true */ 'm', 'o', 'd', 'a', 'f', 'i', 'n', 'i', 'l', '.', 'c', 'o', 'm', '\0',
   /* "modded-minecraft-server-list.com", true */ 'm', 'o', 'd', 'd', 'e', 'd', '-', 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 's', 'e', 'r', 'v', 'e', 'r', '-', 'l', 'i', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "moddedark.com", true */ 'm', 'o', 'd', 'd', 'e', 'd', 'a', 'r', 'k', '.', 'c', 'o', 'm', '\0',
   /* "mode-individuell.de", true */ 'm', 'o', 'd', 'e', '-', 'i', 'n', 'd', 'i', 'v', 'i', 'd', 'u', 'e', 'l', 'l', '.', 'd', 'e', '\0',
   /* "modecaso.com", true */ 'm', 'o', 'd', 'e', 'c', 'a', 's', 'o', '.', 'c', 'o', 'm', '\0',
   /* "modelcase.co.jp", false */ 'm', 'o', 'd', 'e', 'l', 'c', 'a', 's', 'e', '.', 'c', 'o', '.', 'j', 'p', '\0',
@@ -9198,17 +9194,16 @@ static const char kSTSHostTable[] = {
   /* "mommel.com", true */ 'm', 'o', 'm', 'm', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "mommelonline.de", true */ 'm', 'o', 'm', 'm', 'e', 'l', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
   /* "momoka.moe", true */ 'm', 'o', 'm', 'o', 'k', 'a', '.', 'm', 'o', 'e', '\0',
   /* "momozeit.de", true */ 'm', 'o', 'm', 'o', 'z', 'e', 'i', 't', '.', 'd', 'e', '\0',
   /* "momut.org", true */ 'm', 'o', 'm', 'u', 't', '.', 'o', 'r', 'g', '\0',
   /* "mon-agenda.org", false */ 'm', 'o', 'n', '-', 'a', 'g', 'e', 'n', 'd', 'a', '.', 'o', 'r', 'g', '\0',
   /* "mon-partage.fr", true */ 'm', 'o', 'n', '-', 'p', 'a', 'r', 't', 'a', 'g', 'e', '.', 'f', 'r', '\0',
   /* "mona-dress.com", true */ 'm', 'o', 'n', 'a', '-', 'd', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
-  /* "mona.lu", false */ 'm', 'o', 'n', 'a', '.', 'l', 'u', '\0',
   /* "monautoneuve.fr", true */ 'm', 'o', 'n', 'a', 'u', 't', 'o', 'n', 'e', 'u', 'v', 'e', '.', 'f', 'r', '\0',
   /* "mondedie.fr", true */ 'm', 'o', 'n', 'd', 'e', 'd', 'i', 'e', '.', 'f', 'r', '\0',
   /* "mondwandler.de", true */ 'm', 'o', 'n', 'd', 'w', 'a', 'n', 'd', 'l', 'e', 'r', '.', 'd', 'e', '\0',
   /* "moneromerchant.com", true */ 'm', 'o', 'n', 'e', 'r', 'o', 'm', 'e', 'r', 'c', 'h', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "moneycrownmedia.com", true */ 'm', 'o', 'n', 'e', 'y', 'c', 'r', 'o', 'w', 'n', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "moneygo.se", true */ 'm', 'o', 'n', 'e', 'y', 'g', 'o', '.', 's', 'e', '\0',
   /* "moneyhouse.de", true */ 'm', 'o', 'n', 'e', 'y', 'h', 'o', 'u', 's', 'e', '.', 'd', 'e', '\0',
   /* "monika-sokol.de", true */ 'm', 'o', 'n', 'i', 'k', 'a', '-', 's', 'o', 'k', 'o', 'l', '.', 'd', 'e', '\0',
@@ -9283,17 +9278,16 @@ static const char kSTSHostTable[] = {
   /* "movie4kto.site", true */ 'm', 'o', 'v', 'i', 'e', '4', 'k', 't', 'o', '.', 's', 'i', 't', 'e', '\0',
   /* "moviedollars.com", true */ 'm', 'o', 'v', 'i', 'e', 'd', 'o', 'l', 'l', 'a', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "movinglogistics.nl", false */ 'm', 'o', 'v', 'i', 'n', 'g', 'l', 'o', 'g', 'i', 's', 't', 'i', 'c', 's', '.', 'n', 'l', '\0',
   /* "movlib.org", true */ 'm', 'o', 'v', 'l', 'i', 'b', '.', 'o', 'r', 'g', '\0',
   /* "moylen.eu", true */ 'm', 'o', 'y', 'l', 'e', 'n', '.', 'e', 'u', '\0',
   /* "moyoo.net", true */ 'm', 'o', 'y', 'o', 'o', '.', 'n', 'e', 't', '\0',
   /* "mozart-game.cz", true */ 'm', 'o', 'z', 'a', 'r', 't', '-', 'g', 'a', 'm', 'e', '.', 'c', 'z', '\0',
   /* "mozartgame.cz", true */ 'm', 'o', 'z', 'a', 'r', 't', 'g', 'a', 'm', 'e', '.', 'c', 'z', '\0',
-  /* "mozoa.net", true */ 'm', 'o', 'z', 'o', 'a', '.', 'n', 'e', 't', '\0',
   /* "mozzilla.cz", true */ 'm', 'o', 'z', 'z', 'i', 'l', 'l', 'a', '.', 'c', 'z', '\0',
   /* "mp3gratuiti.com", true */ 'm', 'p', '3', 'g', 'r', 'a', 't', 'u', 'i', 't', 'i', '.', 'c', 'o', 'm', '\0',
   /* "mpc-hc.org", true */ 'm', 'p', 'c', '-', 'h', 'c', '.', 'o', 'r', 'g', '\0',
   /* "mpcompliance.com", true */ 'm', 'p', 'c', 'o', 'm', 'p', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mpetroff.net", true */ 'm', 'p', 'e', 't', 'r', 'o', 'f', 'f', '.', 'n', 'e', 't', '\0',
   /* "mpintaamalabanna.it", true */ 'm', 'p', 'i', 'n', 't', 'a', 'a', 'm', 'a', 'l', 'a', 'b', 'a', 'n', 'n', 'a', '.', 'i', 't', '\0',
   /* "mplant.io", true */ 'm', 'p', 'l', 'a', 'n', 't', '.', 'i', 'o', '\0',
   /* "mplicka.cz", true */ 'm', 'p', 'l', 'i', 'c', 'k', 'a', '.', 'c', 'z', '\0',
@@ -9422,32 +9416,32 @@ static const char kSTSHostTable[] = {
   /* "mydebian.in.ua", true */ 'm', 'y', 'd', 'e', 'b', 'i', 'a', 'n', '.', 'i', 'n', '.', 'u', 'a', '\0',
   /* "mydnaresults.com", true */ 'm', 'y', 'd', 'n', 'a', 'r', 'e', 's', 'u', 'l', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "mydnatest.com", true */ 'm', 'y', 'd', 'n', 'a', 't', 'e', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "mydocserve.com", true */ 'm', 'y', 'd', 'o', 'c', 's', 'e', 'r', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mydreamlifelab.com", true */ 'm', 'y', 'd', 'r', 'e', 'a', 'm', 'l', 'i', 'f', 'e', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "myeberspaecher.com", true */ 'm', 'y', 'e', 'b', 'e', 'r', 's', 'p', 'a', 'e', 'c', 'h', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "myfedloan.org", true */ 'm', 'y', 'f', 'e', 'd', 'l', 'o', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "myfrenchtattoo.fr", true */ 'm', 'y', 'f', 'r', 'e', 'n', 'c', 'h', 't', 'a', 't', 't', 'o', 'o', '.', 'f', 'r', '\0',
+  /* "myg21.com", true */ 'm', 'y', 'g', '2', '1', '.', 'c', 'o', 'm', '\0',
   /* "mygadgetguardian.lookout.com", false */ 'm', 'y', 'g', 'a', 'd', 'g', 'e', 't', 'g', 'u', 'a', 'r', 'd', 'i', 'a', 'n', '.', 'l', 'o', 'o', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "mygalgame.com", true */ 'm', 'y', 'g', 'a', 'l', 'g', 'a', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mygallery.homelinux.net", true */ 'm', 'y', 'g', 'a', 'l', 'l', 'e', 'r', 'y', '.', 'h', 'o', 'm', 'e', 'l', 'i', 'n', 'u', 'x', '.', 'n', 'e', 't', '\0',
   /* "mygivingcircle.org", true */ 'm', 'y', 'g', 'i', 'v', 'i', 'n', 'g', 'c', 'i', 'r', 'c', 'l', 'e', '.', 'o', 'r', 'g', '\0',
   /* "mygpsite.com", true */ 'm', 'y', 'g', 'p', 's', 'i', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "mygreatjobs.de", true */ 'm', 'y', 'g', 'r', 'e', 'a', 't', 'j', 'o', 'b', 's', '.', 'd', 'e', '\0',
   /* "mygretchen.de", true */ 'm', 'y', 'g', 'r', 'e', 't', 'c', 'h', 'e', 'n', '.', 'd', 'e', '\0',
   /* "myhostname.net", true */ 'm', 'y', 'h', 'o', 's', 't', 'n', 'a', 'm', 'e', '.', 'n', 'e', 't', '\0',
   /* "myimmitracker.com", true */ 'm', 'y', 'i', 'm', 'm', 'i', 't', 'r', 'a', 'c', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "myip.tech", true */ 'm', 'y', 'i', 'p', '.', 't', 'e', 'c', 'h', '\0',
   /* "mykeepsake.xyz", false */ 'm', 'y', 'k', 'e', 'e', 'p', 's', 'a', 'k', 'e', '.', 'x', 'y', 'z', '\0',
   /* "myki.co", true */ 'm', 'y', 'k', 'i', '.', 'c', 'o', '\0',
   /* "mykontool.de", true */ 'm', 'y', 'k', 'o', 'n', 't', 'o', 'o', 'l', '.', 'd', 'e', '\0',
   /* "mylookout.com", false */ 'm', 'y', 'l', 'o', 'o', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "mymotor.nl", true */ 'm', 'y', 'm', 'o', 't', 'o', 'r', '.', 'n', 'l', '\0',
-  /* "myms.eu", true */ 'm', 'y', 'm', 's', '.', 'e', 'u', '\0',
   /* "mymx.lu", true */ 'm', 'y', 'm', 'x', '.', 'l', 'u', '\0',
   /* "mynetblog.com", true */ 'm', 'y', 'n', 'e', 't', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "mynetworkingbuddy.com", true */ 'm', 'y', 'n', 'e', 't', 'w', 'o', 'r', 'k', 'i', 'n', 'g', 'b', 'u', 'd', 'd', 'y', '.', 'c', 'o', 'm', '\0',
   /* "mynigma.org", true */ 'm', 'y', 'n', 'i', 'g', 'm', 'a', '.', 'o', 'r', 'g', '\0',
   /* "mynook.info", true */ 'm', 'y', 'n', 'o', 'o', 'k', '.', 'i', 'n', 'f', 'o', '\0',
   /* "myonline.hu", true */ 'm', 'y', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'h', 'u', '\0',
   /* "myoukochou.com", true */ 'm', 'y', 'o', 'u', 'k', 'o', 'c', 'h', 'o', 'u', '.', 'c', 'o', 'm', '\0',
   /* "myownconference.com", true */ 'm', 'y', 'o', 'w', 'n', 'c', 'o', 'n', 'f', 'e', 'r', 'e', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
@@ -9911,17 +9905,16 @@ static const char kSTSHostTable[] = {
   /* "nossasenhoradaconceicao.com.br", true */ 'n', 'o', 's', 's', 'a', 's', 'e', 'n', 'h', 'o', 'r', 'a', 'd', 'a', 'c', 'o', 'n', 'c', 'e', 'i', 'c', 'a', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "nossasenhoradodesterro.com.br", true */ 'n', 'o', 's', 's', 'a', 's', 'e', 'n', 'h', 'o', 'r', 'a', 'd', 'o', 'd', 'e', 's', 't', 'e', 'r', 'r', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "nostraforma.com", false */ 'n', 'o', 's', 't', 'r', 'a', 'f', 'o', 'r', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "not-a.link", true */ 'n', 'o', 't', '-', 'a', '.', 'l', 'i', 'n', 'k', '\0',
   /* "notabug.org", true */ 'n', 'o', 't', 'a', 'b', 'u', 'g', '.', 'o', 'r', 'g', '\0',
   /* "notalone.gov", true */ 'n', 'o', 't', 'a', 'l', 'o', 'n', 'e', '.', 'g', 'o', 'v', '\0',
   /* "notarvysocina.cz", true */ 'n', 'o', 't', 'a', 'r', 'v', 'y', 's', 'o', 'c', 'i', 'n', 'a', '.', 'c', 'z', '\0',
   /* "notbolaget.se", true */ 'n', 'o', 't', 'b', 'o', 'l', 'a', 'g', 'e', 't', '.', 's', 'e', '\0',
-  /* "notcompletelycorrect.com", true */ 'n', 'o', 't', 'c', 'o', 'm', 'p', 'l', 'e', 't', 'e', 'l', 'y', 'c', 'o', 'r', 'r', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "note7forever.com", true */ 'n', 'o', 't', 'e', '7', 'f', 'o', 'r', 'e', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "notesforpebble.com", true */ 'n', 'o', 't', 'e', 's', 'f', 'o', 'r', 'p', 'e', 'b', 'b', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "nothing.net.nz", true */ 'n', 'o', 't', 'h', 'i', 'n', 'g', '.', 'n', 'e', 't', '.', 'n', 'z', '\0',
   /* "noticiasdehumor.com", true */ 'n', 'o', 't', 'i', 'c', 'i', 'a', 's', 'd', 'e', 'h', 'u', 'm', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "notificami.com", true */ 'n', 'o', 't', 'i', 'f', 'i', 'c', 'a', 'm', 'i', '.', 'c', 'o', 'm', '\0',
   /* "notify.moe", true */ 'n', 'o', 't', 'i', 'f', 'y', '.', 'm', 'o', 'e', '\0',
   /* "notinglife.com", true */ 'n', 'o', 't', 'i', 'n', 'g', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "notjustbitchy.com", true */ 'n', 'o', 't', 'j', 'u', 's', 't', 'b', 'i', 't', 'c', 'h', 'y', '.', 'c', 'o', 'm', '\0',
@@ -10101,16 +10094,17 @@ static const char kSTSHostTable[] = {
   /* "oliver-pietsch.de", false */ 'o', 'l', 'i', 'v', 'e', 'r', '-', 'p', 'i', 'e', 't', 's', 'c', 'h', '.', 'd', 'e', '\0',
   /* "oliveraiedelabastideblanche.fr", true */ 'o', 'l', 'i', 'v', 'e', 'r', 'a', 'i', 'e', 'd', 'e', 'l', 'a', 'b', 'a', 's', 't', 'i', 'd', 'e', 'b', 'l', 'a', 'n', 'c', 'h', 'e', '.', 'f', 'r', '\0',
   /* "oliverfaircliff.com", true */ 'o', 'l', 'i', 'v', 'e', 'r', 'f', 'a', 'i', 'r', 'c', 'l', 'i', 'f', 'f', '.', 'c', 'o', 'm', '\0',
   /* "olivierlemoal.fr", true */ 'o', 'l', 'i', 'v', 'i', 'e', 'r', 'l', 'e', 'm', 'o', 'a', 'l', '.', 'f', 'r', '\0',
   /* "olivierpieters.be", true */ 'o', 'l', 'i', 'v', 'i', 'e', 'r', 'p', 'i', 'e', 't', 'e', 'r', 's', '.', 'b', 'e', '\0',
   /* "ollies.cloud", true */ 'o', 'l', 'l', 'i', 'e', 's', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "olliespage.net", true */ 'o', 'l', 'l', 'i', 'e', 's', 'p', 'a', 'g', 'e', '.', 'n', 'e', 't', '\0',
   /* "ollning.com", true */ 'o', 'l', 'l', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
+  /* "olmari.fi", true */ 'o', 'l', 'm', 'a', 'r', 'i', '.', 'f', 'i', '\0',
   /* "ols.io", true */ 'o', 'l', 's', '.', 'i', 'o', '\0',
   /* "olswangtrainees.com", true */ 'o', 'l', 's', 'w', 'a', 'n', 'g', 't', 'r', 'a', 'i', 'n', 'e', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "olygazoo.com", true */ 'o', 'l', 'y', 'g', 'a', 'z', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "olymp-arts.world", true */ 'o', 'l', 'y', 'm', 'p', '-', 'a', 'r', 't', 's', '.', 'w', 'o', 'r', 'l', 'd', '\0',
   /* "omacostudio.com", true */ 'o', 'm', 'a', 'c', 'o', 's', 't', 'u', 'd', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "omifind.com", true */ 'o', 'm', 'i', 'f', 'i', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "omitech.co.uk", true */ 'o', 'm', 'i', 't', 'e', 'c', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "omniasl.com", true */ 'o', 'm', 'n', 'i', 'a', 's', 'l', '.', 'c', 'o', 'm', '\0',
@@ -10164,17 +10158,16 @@ static const char kSTSHostTable[] = {
   /* "onmaps.de", true */ 'o', 'n', 'm', 'a', 'p', 's', '.', 'd', 'e', '\0',
   /* "onmarketbookbuilds.com", true */ 'o', 'n', 'm', 'a', 'r', 'k', 'e', 't', 'b', 'o', 'o', 'k', 'b', 'u', 'i', 'l', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "onmuvo.com", true */ 'o', 'n', 'm', 'u', 'v', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ono.es", true */ 'o', 'n', 'o', '.', 'e', 's', '\0',
   /* "onovlena.dn.ua", true */ 'o', 'n', 'o', 'v', 'l', 'e', 'n', 'a', '.', 'd', 'n', '.', 'u', 'a', '\0',
   /* "onqproductions.com", true */ 'o', 'n', 'q', 'p', 'r', 'o', 'd', 'u', 'c', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "onrr.gov", true */ 'o', 'n', 'r', 'r', '.', 'g', 'o', 'v', '\0',
   /* "ons.ca", true */ 'o', 'n', 's', '.', 'c', 'a', '\0',
-  /* "onsitemassageco.com", true */ 'o', 'n', 's', 'i', 't', 'e', 'm', 'a', 's', 's', 'a', 'g', 'e', 'c', 'o', '.', 'c', 'o', 'm', '\0',
   /* "onstud.com", true */ 'o', 'n', 's', 't', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "onthebriteside.com", true */ 'o', 'n', 't', 'h', 'e', 'b', 'r', 'i', 't', 'e', 's', 'i', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "ontimestamp.com", true */ 'o', 'n', 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', '.', 'c', 'o', 'm', '\0',
   /* "onviga.de", true */ 'o', 'n', 'v', 'i', 'g', 'a', '.', 'd', 'e', '\0',
   /* "onvori.com", true */ 'o', 'n', 'v', 'o', 'r', 'i', '.', 'c', 'o', 'm', '\0',
   /* "onvori.de", true */ 'o', 'n', 'v', 'o', 'r', 'i', '.', 'd', 'e', '\0',
   /* "onysix.net", true */ 'o', 'n', 'y', 's', 'i', 'x', '.', 'n', 'e', 't', '\0',
   /* "oogami.name", true */ 'o', 'o', 'g', 'a', 'm', 'i', '.', 'n', 'a', 'm', 'e', '\0',
@@ -10441,16 +10434,17 @@ static const char kSTSHostTable[] = {
   /* "patfs.com", true */ 'p', 'a', 't', 'f', 's', '.', 'c', 'o', 'm', '\0',
   /* "patikabiztositas.hu", true */ 'p', 'a', 't', 'i', 'k', 'a', 'b', 'i', 'z', 't', 'o', 's', 'i', 't', 'a', 's', '.', 'h', 'u', '\0',
   /* "patralos.at", false */ 'p', 'a', 't', 'r', 'a', 'l', 'o', 's', '.', 'a', 't', '\0',
   /* "patriaco.net", true */ 'p', 'a', 't', 'r', 'i', 'a', 'c', 'o', '.', 'n', 'e', 't', '\0',
   /* "patrickaudley.ca", true */ 'p', 'a', 't', 'r', 'i', 'c', 'k', 'a', 'u', 'd', 'l', 'e', 'y', '.', 'c', 'a', '\0',
   /* "patrickaudley.com", true */ 'p', 'a', 't', 'r', 'i', 'c', 'k', 'a', 'u', 'd', 'l', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "patrickschneider.me", true */ 'p', 'a', 't', 'r', 'i', 'c', 'k', 's', 'c', 'h', 'n', 'e', 'i', 'd', 'e', 'r', '.', 'm', 'e', '\0',
   /* "patriksimek.cz", true */ 'p', 'a', 't', 'r', 'i', 'k', 's', 'i', 'm', 'e', 'k', '.', 'c', 'z', '\0',
+  /* "patrz.eu", true */ 'p', 'a', 't', 'r', 'z', '.', 'e', 'u', '\0',
   /* "pattuka.com", true */ 'p', 'a', 't', 't', 'u', 'k', 'a', '.', 'c', 'o', 'm', '\0',
   /* "paudley.ca", true */ 'p', 'a', 'u', 'd', 'l', 'e', 'y', '.', 'c', 'a', '\0',
   /* "paudley.com", true */ 'p', 'a', 'u', 'd', 'l', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "paudley.org", true */ 'p', 'a', 'u', 'd', 'l', 'e', 'y', '.', 'o', 'r', 'g', '\0',
   /* "paul-kerebel.pro", false */ 'p', 'a', 'u', 'l', '-', 'k', 'e', 'r', 'e', 'b', 'e', 'l', '.', 'p', 'r', 'o', '\0',
   /* "paul.reviews", true */ 'p', 'a', 'u', 'l', '.', 'r', 'e', 'v', 'i', 'e', 'w', 's', '\0',
   /* "pauladamsmith.com", true */ 'p', 'a', 'u', 'l', 'a', 'd', 'a', 'm', 's', 'm', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "paulbakaus.com", true */ 'p', 'a', 'u', 'l', 'b', 'a', 'k', 'a', 'u', 's', '.', 'c', 'o', 'm', '\0',
@@ -10534,17 +10528,16 @@ static const char kSTSHostTable[] = {
   /* "peirong.me", true */ 'p', 'e', 'i', 'r', 'o', 'n', 'g', '.', 'm', 'e', '\0',
   /* "pekoe.se", true */ 'p', 'e', 'k', 'o', 'e', '.', 's', 'e', '\0',
   /* "pelanucto.cz", true */ 'p', 'e', 'l', 'a', 'n', 'u', 'c', 't', 'o', '.', 'c', 'z', '\0',
   /* "peliculasaudiolatinoonline.com", true */ 'p', 'e', 'l', 'i', 'c', 'u', 'l', 'a', 's', 'a', 'u', 'd', 'i', 'o', 'l', 'a', 't', 'i', 'n', 'o', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "pemagrid.org", true */ 'p', 'e', 'm', 'a', 'g', 'r', 'i', 'd', '.', 'o', 'r', 'g', '\0',
   /* "penablog.com", true */ 'p', 'e', 'n', 'a', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "pencepay.com", true */ 'p', 'e', 'n', 'c', 'e', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "penfold.fr", true */ 'p', 'e', 'n', 'f', 'o', 'l', 'd', '.', 'f', 'r', '\0',
-  /* "pengi.me", true */ 'p', 'e', 'n', 'g', 'i', '.', 'm', 'e', '\0',
   /* "pennergold.net", true */ 'p', 'e', 'n', 'n', 'e', 'r', 'g', 'o', 'l', 'd', '.', 'n', 'e', 't', '\0',
   /* "pennyapp.io", true */ 'p', 'e', 'n', 'n', 'y', 'a', 'p', 'p', '.', 'i', 'o', '\0',
   /* "pennylane.me.uk", true */ 'p', 'e', 'n', 'n', 'y', 'l', 'a', 'n', 'e', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "pension-waldesruh.de", true */ 'p', 'e', 'n', 's', 'i', 'o', 'n', '-', 'w', 'a', 'l', 'd', 'e', 's', 'r', 'u', 'h', '.', 'd', 'e', '\0',
   /* "pensiunealido.ro", true */ 'p', 'e', 'n', 's', 'i', 'u', 'n', 'e', 'a', 'l', 'i', 'd', 'o', '.', 'r', 'o', '\0',
   /* "pentagram.me", false */ 'p', 'e', 'n', 't', 'a', 'g', 'r', 'a', 'm', '.', 'm', 'e', '\0',
   /* "pentandra.com", true */ 'p', 'e', 'n', 't', 'a', 'n', 'd', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "pentest.blog", true */ 'p', 'e', 'n', 't', 'e', 's', 't', '.', 'b', 'l', 'o', 'g', '\0',
@@ -10596,17 +10589,16 @@ static const char kSTSHostTable[] = {
   /* "petit.site", true */ 'p', 'e', 't', 'i', 't', '.', 's', 'i', 't', 'e', '\0',
   /* "petitsfrenchies.com", true */ 'p', 'e', 't', 'i', 't', 's', 'f', 'r', 'e', 'n', 'c', 'h', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "petja.me", false */ 'p', 'e', 't', 'j', 'a', '.', 'm', 'e', '\0',
   /* "petko.me", true */ 'p', 'e', 't', 'k', 'o', '.', 'm', 'e', '\0',
   /* "petmall.bg", true */ 'p', 'e', 't', 'm', 'a', 'l', 'l', '.', 'b', 'g', '\0',
   /* "petplus.com", true */ 'p', 'e', 't', 'p', 'l', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "petpost.co.nz", true */ 'p', 'e', 't', 'p', 'o', 's', 't', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "petrasestakova.cz", true */ 'p', 'e', 't', 'r', 'a', 's', 'e', 's', 't', 'a', 'k', 'o', 'v', 'a', '.', 'c', 'z', '\0',
-  /* "petrovsky.pro", true */ 'p', 'e', 't', 'r', 'o', 'v', 's', 'k', 'y', '.', 'p', 'r', 'o', '\0',
   /* "petruzz.net", true */ 'p', 'e', 't', 'r', 'u', 'z', 'z', '.', 'n', 'e', 't', '\0',
   /* "pettitcoat.com", true */ 'p', 'e', 't', 't', 'i', 't', 'c', 'o', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "pexieapp.com", true */ 'p', 'e', 'x', 'i', 'e', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "peyote.com", true */ 'p', 'e', 'y', 'o', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "peytonfarrar.com", false */ 'p', 'e', 'y', 't', 'o', 'n', 'f', 'a', 'r', 'r', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "pfa.or.jp", true */ 'p', 'f', 'a', '.', 'o', 'r', '.', 'j', 'p', '\0',
   /* "pfadfinder-aurich.de", true */ 'p', 'f', 'a', 'd', 'f', 'i', 'n', 'd', 'e', 'r', '-', 'a', 'u', 'r', 'i', 'c', 'h', '.', 'd', 'e', '\0',
   /* "pfarchimedes-pensioen123.nl", true */ 'p', 'f', 'a', 'r', 'c', 'h', 'i', 'm', 'e', 'd', 'e', 's', '-', 'p', 'e', 'n', 's', 'i', 'o', 'e', 'n', '1', '2', '3', '.', 'n', 'l', '\0',
@@ -10803,17 +10795,16 @@ static const char kSTSHostTable[] = {
   /* "plueschmikroben.de", true */ 'p', 'l', 'u', 'e', 's', 'c', 'h', 'm', 'i', 'k', 'r', 'o', 'b', 'e', 'n', '.', 'd', 'e', '\0',
   /* "plueschviren.de", true */ 'p', 'l', 'u', 'e', 's', 'c', 'h', 'v', 'i', 'r', 'e', 'n', '.', 'd', 'e', '\0',
   /* "plueschvirus.de", true */ 'p', 'l', 'u', 'e', 's', 'c', 'h', 'v', 'i', 'r', 'u', 's', '.', 'd', 'e', '\0',
   /* "pluga.co", true */ 'p', 'l', 'u', 'g', 'a', '.', 'c', 'o', '\0',
   /* "plugcubed.net", false */ 'p', 'l', 'u', 'g', 'c', 'u', 'b', 'e', 'd', '.', 'n', 'e', 't', '\0',
   /* "plugin-planet.com", true */ 'p', 'l', 'u', 'g', 'i', 'n', '-', 'p', 'l', 'a', 'n', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "pluginsloaded.com", true */ 'p', 'l', 'u', 'g', 'i', 'n', 's', 'l', 'o', 'a', 'd', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "plumlocosoft.com", true */ 'p', 'l', 'u', 'm', 'l', 'o', 'c', 'o', 's', 'o', 'f', 't', '.', 'c', 'o', 'm', '\0',
-  /* "plur.com.au", true */ 'p', 'l', 'u', 'r', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "plus-5.com", true */ 'p', 'l', 'u', 's', '-', '5', '.', 'c', 'o', 'm', '\0',
   /* "plus.google.com", false */ 'p', 'l', 'u', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "plus.sandbox.google.com", false */ 'p', 'l', 'u', 's', '.', 's', 'a', 'n', 'd', 'b', 'o', 'x', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "plushmania.de", true */ 'p', 'l', 'u', 's', 'h', 'm', 'a', 'n', 'i', 'a', '.', 'd', 'e', '\0',
   /* "plusstreamfeed.appspot.com", true */ 'p', 'l', 'u', 's', 's', 't', 'r', 'e', 'a', 'm', 'f', 'e', 'e', 'd', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "plzenskybarcamp.cz", true */ 'p', 'l', 'z', 'e', 'n', 's', 'k', 'y', 'b', 'a', 'r', 'c', 'a', 'm', 'p', '.', 'c', 'z', '\0',
   /* "pm-onboarding-external-dev.azurewebsites.net", true */ 'p', 'm', '-', 'o', 'n', 'b', 'o', 'a', 'r', 'd', 'i', 'n', 'g', '-', 'e', 'x', 't', 'e', 'r', 'n', 'a', 'l', '-', 'd', 'e', 'v', '.', 'a', 'z', 'u', 'r', 'e', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "pm-partners-management-dev.azurewebsites.net", true */ 'p', 'm', '-', 'p', 'a', 'r', 't', 'n', 'e', 'r', 's', '-', 'm', 'a', 'n', 'a', 'g', 'e', 'm', 'e', 'n', 't', '-', 'd', 'e', 'v', '.', 'a', 'z', 'u', 'r', 'e', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'n', 'e', 't', '\0',
@@ -10854,16 +10845,17 @@ static const char kSTSHostTable[] = {
   /* "policedriver.com", true */ 'p', 'o', 'l', 'i', 'c', 'e', 'd', 'r', 'i', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "polis.or.at", true */ 'p', 'o', 'l', 'i', 's', '.', 'o', 'r', '.', 'a', 't', '\0',
   /* "polis.to", false */ 'p', 'o', 'l', 'i', 's', '.', 't', 'o', '\0',
   /* "politic.org.ua", true */ 'p', 'o', 'l', 'i', 't', 'i', 'c', '.', 'o', 'r', 'g', '.', 'u', 'a', '\0',
   /* "politiewervingshop.nl", true */ 'p', 'o', 'l', 'i', 't', 'i', 'e', 'w', 'e', 'r', 'v', 'i', 'n', 'g', 's', 'h', 'o', 'p', '.', 'n', 'l', '\0',
   /* "politik-bei-uns.de", true */ 'p', 'o', 'l', 'i', 't', 'i', 'k', '-', 'b', 'e', 'i', '-', 'u', 'n', 's', '.', 'd', 'e', '\0',
   /* "pollpodium.nl", true */ 'p', 'o', 'l', 'l', 'p', 'o', 'd', 'i', 'u', 'm', '.', 'n', 'l', '\0',
   /* "polycrypt.us", true */ 'p', 'o', 'l', 'y', 'c', 'r', 'y', 'p', 't', '.', 'u', 's', '\0',
+  /* "polymathematician.com", true */ 'p', 'o', 'l', 'y', 'm', 'a', 't', 'h', 'e', 'm', 'a', 't', 'i', 'c', 'i', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "polynomapp.com", true */ 'p', 'o', 'l', 'y', 'n', 'o', 'm', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "polypet.com.sg", true */ 'p', 'o', 'l', 'y', 'p', 'e', 't', '.', 'c', 'o', 'm', '.', 's', 'g', '\0',
   /* "pomar.club", true */ 'p', 'o', 'm', 'a', 'r', '.', 'c', 'l', 'u', 'b', '\0',
   /* "pompefunebrilariviera.it", true */ 'p', 'o', 'm', 'p', 'e', 'f', 'u', 'n', 'e', 'b', 'r', 'i', 'l', 'a', 'r', 'i', 'v', 'i', 'e', 'r', 'a', '.', 'i', 't', '\0',
   /* "poneytelecom.org", true */ 'p', 'o', 'n', 'e', 'y', 't', 'e', 'l', 'e', 'c', 'o', 'm', '.', 'o', 'r', 'g', '\0',
   /* "ponolau.com", true */ 'p', 'o', 'n', 'o', 'l', 'a', 'u', '.', 'c', 'o', 'm', '\0',
   /* "ponteencima.com", true */ 'p', 'o', 'n', 't', 'e', 'e', 'n', 'c', 'i', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "pontokay.com.br", false */ 'p', 'o', 'n', 't', 'o', 'k', 'a', 'y', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
@@ -11016,24 +11008,24 @@ static const char kSTSHostTable[] = {
   /* "producto8.com", true */ 'p', 'r', 'o', 'd', 'u', 'c', 't', 'o', '8', '.', 'c', 'o', 'm', '\0',
   /* "proefteksten.nl", true */ 'p', 'r', 'o', 'e', 'f', 't', 'e', 'k', 's', 't', 'e', 'n', '.', 'n', 'l', '\0',
   /* "profection.biz", true */ 'p', 'r', 'o', 'f', 'e', 'c', 't', 'i', 'o', 'n', '.', 'b', 'i', 'z', '\0',
   /* "professors.ee", true */ 'p', 'r', 'o', 'f', 'e', 's', 's', 'o', 'r', 's', '.', 'e', 'e', '\0',
   /* "profidea.cz", true */ 'p', 'r', 'o', 'f', 'i', 'd', 'e', 'a', '.', 'c', 'z', '\0',
   /* "profiles.google.com", true */ 'p', 'r', 'o', 'f', 'i', 'l', 'e', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "profitopia.de", true */ 'p', 'r', 'o', 'f', 'i', 't', 'o', 'p', 'i', 'a', '.', 'd', 'e', '\0',
   /* "profivps.com", true */ 'p', 'r', 'o', 'f', 'i', 'v', 'p', 's', '.', 'c', 'o', 'm', '\0',
+  /* "profpay.com", true */ 'p', 'r', 'o', 'f', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "profusion.io", true */ 'p', 'r', 'o', 'f', 'u', 's', 'i', 'o', 'n', '.', 'i', 'o', '\0',
   /* "progarm.org", true */ 'p', 'r', 'o', 'g', 'a', 'r', 'm', '.', 'o', 'r', 'g', '\0',
   /* "proggersession.de", true */ 'p', 'r', 'o', 'g', 'g', 'e', 'r', 's', 'e', 's', 's', 'i', 'o', 'n', '.', 'd', 'e', '\0',
   /* "progreso.pl", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 'o', '.', 'p', 'l', '\0',
   /* "progress-linux.org", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 's', '-', 'l', 'i', 'n', 'u', 'x', '.', 'o', 'r', 'g', '\0',
   /* "progressiveplanning.com", true */ 'p', 'r', 'o', 'g', 'r', 'e', 's', 's', 'i', 'v', 'e', 'p', 'l', 'a', 'n', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "proitconsulting.com.au", true */ 'p', 'r', 'o', 'i', 't', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
-  /* "proj.org.cn", true */ 'p', 'r', 'o', 'j', '.', 'o', 'r', 'g', '.', 'c', 'n', '\0',
   /* "project-sparks.eu", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', '-', 's', 'p', 'a', 'r', 'k', 's', '.', 'e', 'u', '\0',
   /* "projectarmy.net", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'a', 'r', 'm', 'y', '.', 'n', 'e', 't', '\0',
   /* "projectascension.io", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'a', 's', 'c', 'e', 'n', 's', 'i', 'o', 'n', '.', 'i', 'o', '\0',
   /* "projectbenson.com", false */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'b', 'e', 'n', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "projectblackbook.us", true */ 'p', 'r', 'o', 'j', 'e', 'c', 't', 'b', 'l', 'a', 'c', 'k', 'b', 'o', 'o', 'k', '.', 'u', 's', '\0',
   /* "projektik.cz", true */ 'p', 'r', 'o', 'j', 'e', 'k', 't', 'i', 'k', '.', 'c', 'z', '\0',
   /* "projektzentrisch.de", true */ 'p', 'r', 'o', 'j', 'e', 'k', 't', 'z', 'e', 'n', 't', 'r', 'i', 's', 'c', 'h', '.', 'd', 'e', '\0',
   /* "prok.pw", true */ 'p', 'r', 'o', 'k', '.', 'p', 'w', '\0',
@@ -11326,17 +11318,16 @@ static const char kSTSHostTable[] = {
   /* "rantanda.com", true */ 'r', 'a', 'n', 't', 'a', 'n', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "ranzbak.nl", true */ 'r', 'a', 'n', 'z', 'b', 'a', 'k', '.', 'n', 'l', '\0',
   /* "rapenroer.com", true */ 'r', 'a', 'p', 'e', 'n', 'r', 'o', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "rapenroer.nl", true */ 'r', 'a', 'p', 'e', 'n', 'r', 'o', 'e', 'r', '.', 'n', 'l', '\0',
   /* "raphael.li", true */ 'r', 'a', 'p', 'h', 'a', 'e', 'l', '.', 'l', 'i', '\0',
   /* "rapidshit.net", true */ 'r', 'a', 'p', 'i', 'd', 's', 'h', 'i', 't', '.', 'n', 'e', 't', '\0',
   /* "rasagiline.com", true */ 'r', 'a', 's', 'a', 'g', 'i', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "rasebo.ro", true */ 'r', 'a', 's', 'e', 'b', 'o', '.', 'r', 'o', '\0',
-  /* "raspass.me", true */ 'r', 'a', 's', 'p', 'a', 's', 's', '.', 'm', 'e', '\0',
   /* "raspberry.us", true */ 'r', 'a', 's', 'p', 'b', 'e', 'r', 'r', 'y', '.', 'u', 's', '\0',
   /* "ratd.net", true */ 'r', 'a', 't', 'd', '.', 'n', 'e', 't', '\0',
   /* "rathorian.fr", true */ 'r', 'a', 't', 'h', 'o', 'r', 'i', 'a', 'n', '.', 'f', 'r', '\0',
   /* "rationalops.com", true */ 'r', 'a', 't', 'i', 'o', 'n', 'a', 'l', 'o', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "ratuseks.com", false */ 'r', 'a', 't', 'u', 's', 'e', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "ratuseks.net", false */ 'r', 'a', 't', 'u', 's', 'e', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "ratuseks.us", false */ 'r', 'a', 't', 'u', 's', 'e', 'k', 's', '.', 'u', 's', '\0',
   /* "raumzeitlabor.de", true */ 'r', 'a', 'u', 'm', 'z', 'e', 'i', 't', 'l', 'a', 'b', 'o', 'r', '.', 'd', 'e', '\0',
@@ -11644,17 +11635,16 @@ static const char kSTSHostTable[] = {
   /* "riyono.com", true */ 'r', 'i', 'y', 'o', 'n', 'o', '.', 'c', 'o', 'm', '\0',
   /* "rjnutrition.consulting", true */ 'r', 'j', 'n', 'u', 't', 'r', 'i', 't', 'i', 'o', 'n', '.', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '\0',
   /* "rlalique.com", true */ 'r', 'l', 'a', 'l', 'i', 'q', 'u', 'e', '.', 'c', 'o', 'm', '\0',
   /* "rleh.de", true */ 'r', 'l', 'e', 'h', '.', 'd', 'e', '\0',
   /* "rmb.li", true */ 'r', 'm', 'b', '.', 'l', 'i', '\0',
   /* "rmdlingerie.com.br", true */ 'r', 'm', 'd', 'l', 'i', 'n', 'g', 'e', 'r', 'i', 'e', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "rmf.io", true */ 'r', 'm', 'f', '.', 'i', 'o', '\0',
   /* "rmmanfredi.com", true */ 'r', 'm', 'm', 'a', 'n', 'f', 'r', 'e', 'd', 'i', '.', 'c', 'o', 'm', '\0',
-  /* "rms.sexy", true */ 'r', 'm', 's', '.', 's', 'e', 'x', 'y', '\0',
   /* "rmstudio.tw", true */ 'r', 'm', 's', 't', 'u', 'd', 'i', 'o', '.', 't', 'w', '\0',
   /* "ro.search.yahoo.com", false */ 'r', 'o', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "roave.com", true */ 'r', 'o', 'a', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "robandjanine.com", true */ 'r', 'o', 'b', 'a', 'n', 'd', 'j', 'a', 'n', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "roberthurlbut.com", true */ 'r', 'o', 'b', 'e', 'r', 't', 'h', 'u', 'r', 'l', 'b', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "robertkrueger.de", true */ 'r', 'o', 'b', 'e', 'r', 't', 'k', 'r', 'u', 'e', 'g', 'e', 'r', '.', 'd', 'e', '\0',
   /* "roberto-webhosting.nl", true */ 'r', 'o', 'b', 'e', 'r', 't', 'o', '-', 'w', 'e', 'b', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'n', 'l', '\0',
   /* "robertof.ovh", false */ 'r', 'o', 'b', 'e', 'r', 't', 'o', 'f', '.', 'o', 'v', 'h', '\0',
@@ -11763,16 +11753,17 @@ static const char kSTSHostTable[] = {
   /* "rpgmaker.es", true */ 'r', 'p', 'g', 'm', 'a', 'k', 'e', 'r', '.', 'e', 's', '\0',
   /* "rpherbig.com", true */ 'r', 'p', 'h', 'e', 'r', 'b', 'i', 'g', '.', 'c', 'o', 'm', '\0',
   /* "rprimas.duckdns.org", true */ 'r', 'p', 'r', 'i', 'm', 'a', 's', '.', 'd', 'u', 'c', 'k', 'd', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "rpy.xyz", true */ 'r', 'p', 'y', '.', 'x', 'y', 'z', '\0',
   /* "rq-labo.jp", true */ 'r', 'q', '-', 'l', 'a', 'b', 'o', '.', 'j', 'p', '\0',
   /* "rr105.de", true */ 'r', 'r', '1', '0', '5', '.', 'd', 'e', '\0',
   /* "rring.me", true */ 'r', 'r', 'i', 'n', 'g', '.', 'm', 'e', '\0',
   /* "rro.rs", true */ 'r', 'r', 'o', '.', 'r', 's', '\0',
+  /* "rrom.me", true */ 'r', 'r', 'o', 'm', '.', 'm', 'e', '\0',
   /* "rsampaio.info", true */ 'r', 's', 'a', 'm', 'p', 'a', 'i', 'o', '.', 'i', 'n', 'f', 'o', '\0',
   /* "rsblake.net", true */ 'r', 's', 'b', 'l', 'a', 'k', 'e', '.', 'n', 'e', 't', '\0',
   /* "rsi.im", false */ 'r', 's', 'i', '.', 'i', 'm', '\0',
   /* "rssr.se", true */ 'r', 's', 's', 'r', '.', 's', 'e', '\0',
   /* "rsync.eu", false */ 'r', 's', 'y', 'n', 'c', '.', 'e', 'u', '\0',
   /* "rtcx.net", true */ 'r', 't', 'c', 'x', '.', 'n', 'e', 't', '\0',
   /* "rtd.uk.com", true */ 'r', 't', 'd', '.', 'u', 'k', '.', 'c', 'o', 'm', '\0',
   /* "rte.eu", true */ 'r', 't', 'e', '.', 'e', 'u', '\0',
@@ -11856,17 +11847,16 @@ static const char kSTSHostTable[] = {
   /* "sadbox.es", true */ 's', 'a', 'd', 'b', 'o', 'x', '.', 'e', 's', '\0',
   /* "sadbox.org", true */ 's', 'a', 'd', 'b', 'o', 'x', '.', 'o', 'r', 'g', '\0',
   /* "sadhawkict.org", true */ 's', 'a', 'd', 'h', 'a', 'w', 'k', 'i', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "safar.sk", true */ 's', 'a', 'f', 'a', 'r', '.', 's', 'k', '\0',
   /* "safcstore.com", true */ 's', 'a', 'f', 'c', 's', 't', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "safeex.com", true */ 's', 'a', 'f', 'e', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "safegroup.pl", true */ 's', 'a', 'f', 'e', 'g', 'r', 'o', 'u', 'p', '.', 'p', 'l', '\0',
   /* "safejourney.education", true */ 's', 'a', 'f', 'e', 'j', 'o', 'u', 'r', 'n', 'e', 'y', '.', 'e', 'd', 'u', 'c', 'a', 't', 'i', 'o', 'n', '\0',
-  /* "safelist.eu", true */ 's', 'a', 'f', 'e', 'l', 'i', 's', 't', '.', 'e', 'u', '\0',
   /* "safeme.ga", true */ 's', 'a', 'f', 'e', 'm', 'e', '.', 'g', 'a', '\0',
   /* "safemovescheme.co.uk", true */ 's', 'a', 'f', 'e', 'm', 'o', 'v', 'e', 's', 'c', 'h', 'e', 'm', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "safer-networking.org", true */ 's', 'a', 'f', 'e', 'r', '-', 'n', 'e', 't', 'w', 'o', 'r', 'k', 'i', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "saferchildren.eu", true */ 's', 'a', 'f', 'e', 'r', 'c', 'h', 'i', 'l', 'd', 'r', 'e', 'n', '.', 'e', 'u', '\0',
   /* "saferedirectlink.com", true */ 's', 'a', 'f', 'e', 'r', 'e', 'd', 'i', 'r', 'e', 'c', 't', 'l', 'i', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "saferpost.com", true */ 's', 'a', 'f', 'e', 'r', 'p', 'o', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "safersurfing.eu", true */ 's', 'a', 'f', 'e', 'r', 's', 'u', 'r', 'f', 'i', 'n', 'g', '.', 'e', 'u', '\0',
   /* "safescan.com", true */ 's', 'a', 'f', 'e', 's', 'c', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -12010,17 +12000,16 @@ static const char kSTSHostTable[] = {
   /* "scandicom.fi", true */ 's', 'c', 'a', 'n', 'd', 'i', 'c', 'o', 'm', '.', 'f', 'i', '\0',
   /* "scandinavia.dating", true */ 's', 'c', 'a', 'n', 'd', 'i', 'n', 'a', 'v', 'i', 'a', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "scanleasing.net", true */ 's', 'c', 'a', 'n', 'l', 'e', 'a', 's', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0',
   /* "scannabi.com", true */ 's', 'c', 'a', 'n', 'n', 'a', 'b', 'i', '.', 'c', 'o', 'm', '\0',
   /* "scanpay.dk", true */ 's', 'c', 'a', 'n', 'p', 'a', 'y', '.', 'd', 'k', '\0',
   /* "scenester.tv", true */ 's', 'c', 'e', 'n', 'e', 's', 't', 'e', 'r', '.', 't', 'v', '\0',
   /* "schachburg.de", true */ 's', 'c', 'h', 'a', 'c', 'h', 'b', 'u', 'r', 'g', '.', 'd', 'e', '\0',
   /* "schallert.com", false */ 's', 'c', 'h', 'a', 'l', 'l', 'e', 'r', 't', '.', 'c', 'o', 'm', '\0',
-  /* "schamlosharmlos.de", true */ 's', 'c', 'h', 'a', 'm', 'l', 'o', 's', 'h', 'a', 'r', 'm', 'l', 'o', 's', '.', 'd', 'e', '\0',
   /* "schauer.so", true */ 's', 'c', 'h', 'a', 'u', 'e', 'r', '.', 's', 'o', '\0',
   /* "schawe.me", true */ 's', 'c', 'h', 'a', 'w', 'e', '.', 'm', 'e', '\0',
   /* "schd.io", true */ 's', 'c', 'h', 'd', '.', 'i', 'o', '\0',
   /* "scheidtweiler.de", true */ 's', 'c', 'h', 'e', 'i', 'd', 't', 'w', 'e', 'i', 'l', 'e', 'r', '.', 'd', 'e', '\0',
   /* "schelberts.de", true */ 's', 'c', 'h', 'e', 'l', 'b', 'e', 'r', 't', 's', '.', 'd', 'e', '\0',
   /* "schenkes.de", true */ 's', 'c', 'h', 'e', 'n', 'k', 'e', 's', '.', 'd', 'e', '\0',
   /* "scherzstempel.de", true */ 's', 'c', 'h', 'e', 'r', 'z', 's', 't', 'e', 'm', 'p', 'e', 'l', '.', 'd', 'e', '\0',
   /* "schildbach.de", true */ 's', 'c', 'h', 'i', 'l', 'd', 'b', 'a', 'c', 'h', '.', 'd', 'e', '\0',
@@ -12080,17 +12069,16 @@ static const char kSTSHostTable[] = {
   /* "scivillage.com", true */ 's', 'c', 'i', 'v', 'i', 'l', 'l', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "sclgroup.cc", true */ 's', 'c', 'l', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'c', '\0',
   /* "scoolcode.com", true */ 's', 'c', 'o', 'o', 'l', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "scooterservis.com", true */ 's', 'c', 'o', 'o', 't', 'e', 'r', 's', 'e', 'r', 'v', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "scootfleet.com", true */ 's', 'c', 'o', 'o', 't', 'f', 'l', 'e', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "scores4schools.com", true */ 's', 'c', 'o', 'r', 'e', 's', '4', 's', 'c', 'h', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "scottainslie.me.uk", true */ 's', 'c', 'o', 't', 't', 'a', 'i', 'n', 's', 'l', 'i', 'e', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "scottdial.com", true */ 's', 'c', 'o', 't', 't', 'd', 'i', 'a', 'l', '.', 'c', 'o', 'm', '\0',
-  /* "scottferguson.com.au", true */ 's', 'c', 'o', 't', 't', 'f', 'e', 'r', 'g', 'u', 's', 'o', 'n', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "scottgruber.me", true */ 's', 'c', 'o', 't', 't', 'g', 'r', 'u', 'b', 'e', 'r', '.', 'm', 'e', '\0',
   /* "scotthel.me", true */ 's', 'c', 'o', 't', 't', 'h', 'e', 'l', '.', 'm', 'e', '\0',
   /* "scotthelme.co.uk", true */ 's', 'c', 'o', 't', 't', 'h', 'e', 'l', 'm', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "scotthelme.com", true */ 's', 'c', 'o', 't', 't', 'h', 'e', 'l', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "scottstorey.co.uk", true */ 's', 'c', 'o', 't', 't', 's', 't', 'o', 'r', 'e', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "scourt.info", true */ 's', 'c', 'o', 'u', 'r', 't', '.', 'i', 'n', 'f', 'o', '\0',
   /* "scourt.org.ua", true */ 's', 'c', 'o', 'u', 'r', 't', '.', 'o', 'r', 'g', '.', 'u', 'a', '\0',
   /* "scoutdb.ch", true */ 's', 'c', 'o', 'u', 't', 'd', 'b', '.', 'c', 'h', '\0',
@@ -12223,18 +12211,16 @@ static const char kSTSHostTable[] = {
   /* "semmlers.com", true */ 's', 'e', 'm', 'm', 'l', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "semox.de", true */ 's', 'e', 'm', 'o', 'x', '.', 'd', 'e', '\0',
   /* "semps-2fa.de", true */ 's', 'e', 'm', 'p', 's', '-', '2', 'f', 'a', '.', 'd', 'e', '\0',
   /* "semps-threema.de", true */ 's', 'e', 'm', 'p', 's', '-', 't', 'h', 'r', 'e', 'e', 'm', 'a', '.', 'd', 'e', '\0',
   /* "semyonov.su", true */ 's', 'e', 'm', 'y', 'o', 'n', 'o', 'v', '.', 's', 'u', '\0',
   /* "semyonov.us", true */ 's', 'e', 'm', 'y', 'o', 'n', 'o', 'v', '.', 'u', 's', '\0',
   /* "senarius.de", true */ 's', 'e', 'n', 'a', 'r', 'i', 'u', 's', '.', 'd', 'e', '\0',
   /* "sendash.com", true */ 's', 'e', 'n', 'd', 'a', 's', 'h', '.', 'c', 'o', 'm', '\0',
-  /* "sendc.at", true */ 's', 'e', 'n', 'd', 'c', '.', 'a', 't', '\0',
-  /* "sendcat.com", true */ 's', 'e', 'n', 'd', 'c', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "sendinvoice.nl", true */ 's', 'e', 'n', 'd', 'i', 'n', 'v', 'o', 'i', 'c', 'e', '.', 'n', 'l', '\0',
   /* "sendmeback.de", true */ 's', 'e', 'n', 'd', 'm', 'e', 'b', 'a', 'c', 'k', '.', 'd', 'e', '\0',
   /* "sendonce.io", true */ 's', 'e', 'n', 'd', 'o', 'n', 'c', 'e', '.', 'i', 'o', '\0',
   /* "sendthisfile.com", true */ 's', 'e', 'n', 'd', 't', 'h', 'i', 's', 'f', 'i', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "sendway.com", true */ 's', 'e', 'n', 'd', 'w', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "sendya.me", true */ 's', 'e', 'n', 'd', 'y', 'a', '.', 'm', 'e', '\0',
   /* "seniors.singles", true */ 's', 'e', 'n', 'i', 'o', 'r', 's', '.', 's', 'i', 'n', 'g', 'l', 'e', 's', '\0',
   /* "senmendai-reform.com", true */ 's', 'e', 'n', 'm', 'e', 'n', 'd', 'a', 'i', '-', 'r', 'e', 'f', 'o', 'r', 'm', '.', 'c', 'o', 'm', '\0',
@@ -12261,16 +12247,17 @@ static const char kSTSHostTable[] = {
   /* "sephr.com", true */ 's', 'e', 'p', 'h', 'r', '.', 'c', 'o', 'm', '\0',
   /* "seppelec.com", true */ 's', 'e', 'p', 'p', 'e', 'l', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "septakkordeon.de", true */ 's', 'e', 'p', 't', 'a', 'k', 'k', 'o', 'r', 'd', 'e', 'o', 'n', '.', 'd', 'e', '\0',
   /* "septillion.cn", true */ 's', 'e', 'p', 't', 'i', 'l', 'l', 'i', 'o', 'n', '.', 'c', 'n', '\0',
   /* "septs.pw", true */ 's', 'e', 'p', 't', 's', '.', 'p', 'w', '\0',
   /* "sequencing.com", true */ 's', 'e', 'q', 'u', 'e', 'n', 'c', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "sequiturs.com", true */ 's', 'e', 'q', 'u', 'i', 't', 'u', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "serafin.tech", true */ 's', 'e', 'r', 'a', 'f', 'i', 'n', '.', 't', 'e', 'c', 'h', '\0',
+  /* "serathius.ovh", true */ 's', 'e', 'r', 'a', 't', 'h', 'i', 'u', 's', '.', 'o', 'v', 'h', '\0',
   /* "serbanpaun.ro", true */ 's', 'e', 'r', 'b', 'a', 'n', 'p', 'a', 'u', 'n', '.', 'r', 'o', '\0',
   /* "serf.io", true */ 's', 'e', 'r', 'f', '.', 'i', 'o', '\0',
   /* "servdiscount.com", true */ 's', 'e', 'r', 'v', 'd', 'i', 's', 'c', 'o', 'u', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "servecrypt.com", true */ 's', 'e', 'r', 'v', 'e', 'c', 'r', 'y', 'p', 't', '.', 'c', 'o', 'm', '\0',
   /* "servecrypt.net", true */ 's', 'e', 'r', 'v', 'e', 'c', 'r', 'y', 'p', 't', '.', 'n', 'e', 't', '\0',
   /* "servecrypt.ru", true */ 's', 'e', 'r', 'v', 'e', 'c', 'r', 'y', 'p', 't', '.', 'r', 'u', '\0',
   /* "servepublic.com", true */ 's', 'e', 'r', 'v', 'e', 'p', 'u', 'b', 'l', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "servepublic.org", true */ 's', 'e', 'r', 'v', 'e', 'p', 'u', 'b', 'l', 'i', 'c', '.', 'o', 'r', 'g', '\0',
@@ -12409,17 +12396,16 @@ static const char kSTSHostTable[] = {
   /* "shota.party", true */ 's', 'h', 'o', 't', 'a', '.', 'p', 'a', 'r', 't', 'y', '\0',
   /* "shotbow.net", true */ 's', 'h', 'o', 't', 'b', 'o', 'w', '.', 'n', 'e', 't', '\0',
   /* "show-saratov.ru", true */ 's', 'h', 'o', 'w', '-', 's', 'a', 'r', 'a', 't', 'o', 'v', '.', 'r', 'u', '\0',
   /* "showsonar.com", true */ 's', 'h', 'o', 'w', 's', 'o', 'n', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "shrike.me", true */ 's', 'h', 'r', 'i', 'k', 'e', '.', 'm', 'e', '\0',
   /* "shrinkhub.com", true */ 's', 'h', 'r', 'i', 'n', 'k', 'h', 'u', 'b', '.', 'c', 'o', 'm', '\0',
   /* "shrub.ca", true */ 's', 'h', 'r', 'u', 'b', '.', 'c', 'a', '\0',
   /* "shtorku.com", true */ 's', 'h', 't', 'o', 'r', 'k', 'u', '.', 'c', 'o', 'm', '\0',
-  /* "shu-kin.net", true */ 's', 'h', 'u', '-', 'k', 'i', 'n', '.', 'n', 'e', 't', '\0',
   /* "shulan.moe", true */ 's', 'h', 'u', 'l', 'a', 'n', '.', 'm', 'o', 'e', '\0',
   /* "shuro.de", true */ 's', 'h', 'u', 'r', 'o', '.', 'd', 'e', '\0',
   /* "shux.pro", true */ 's', 'h', 'u', 'x', '.', 'p', 'r', 'o', '\0',
   /* "shymeck.pw", true */ 's', 'h', 'y', 'm', 'e', 'c', 'k', '.', 'p', 'w', '\0',
   /* "si-benelux.nl", true */ 's', 'i', '-', 'b', 'e', 'n', 'e', 'l', 'u', 'x', '.', 'n', 'l', '\0',
   /* "si.to", true */ 's', 'i', '.', 't', 'o', '\0',
   /* "siamojo.com", true */ 's', 'i', 'a', 'm', 'o', 'j', 'o', '.', 'c', 'o', 'm', '\0',
   /* "siamsnus.com", true */ 's', 'i', 'a', 'm', 's', 'n', 'u', 's', '.', 'c', 'o', 'm', '\0',
@@ -12813,16 +12799,17 @@ static const char kSTSHostTable[] = {
   /* "sophiakligys.com", true */ 's', 'o', 'p', 'h', 'i', 'a', 'k', 'l', 'i', 'g', 'y', 's', '.', 'c', 'o', 'm', '\0',
   /* "soply.com", true */ 's', 'o', 'p', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "soporte.cc", true */ 's', 'o', 'p', 'o', 'r', 't', 'e', '.', 'c', 'c', '\0',
   /* "sor.so", true */ 's', 'o', 'r', '.', 's', 'o', '\0',
   /* "sorcix.com", true */ 's', 'o', 'r', 'c', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "sorenstudios.com", true */ 's', 'o', 'r', 'e', 'n', 's', 't', 'u', 'd', 'i', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "sorincocorada.ro", true */ 's', 'o', 'r', 'i', 'n', 'c', 'o', 'c', 'o', 'r', 'a', 'd', 'a', '.', 'r', 'o', '\0',
   /* "sorn.service.gov.uk", true */ 's', 'o', 'r', 'n', '.', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'g', 'o', 'v', '.', 'u', 'k', '\0',
+  /* "sortaweird.net", false */ 's', 'o', 'r', 't', 'a', 'w', 'e', 'i', 'r', 'd', '.', 'n', 'e', 't', '\0',
   /* "soruly.com", true */ 's', 'o', 'r', 'u', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "sorz.org", true */ 's', 'o', 'r', 'z', '.', 'o', 'r', 'g', '\0',
   /* "sos.sk", false */ 's', 'o', 's', '.', 's', 'k', '\0',
   /* "sosaka.ml", true */ 's', 'o', 's', 'a', 'k', 'a', '.', 'm', 'l', '\0',
   /* "sosecu.red", true */ 's', 'o', 's', 'e', 'c', 'u', '.', 'r', 'e', 'd', '\0',
   /* "sostacancun.com", true */ 's', 'o', 's', 't', 'a', 'c', 'a', 'n', 'c', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "sotar.us", true */ 's', 'o', 't', 'a', 'r', '.', 'u', 's', '\0',
   /* "sotavasara.net", true */ 's', 'o', 't', 'a', 'v', 'a', 's', 'a', 'r', 'a', '.', 'n', 'e', 't', '\0',
@@ -12930,17 +12917,16 @@ static const char kSTSHostTable[] = {
   /* "sporthit.ru", true */ 's', 'p', 'o', 'r', 't', 'h', 'i', 't', '.', 'r', 'u', '\0',
   /* "sportifik.com", true */ 's', 'p', 'o', 'r', 't', 'i', 'f', 'i', 'k', '.', 'c', 'o', 'm', '\0',
   /* "sports.dating", true */ 's', 'p', 'o', 'r', 't', 's', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "sportsmanadvisor.com", true */ 's', 'p', 'o', 'r', 't', 's', 'm', 'a', 'n', 'a', 'd', 'v', 'i', 's', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "sportstraineradvisor.com", true */ 's', 'p', 'o', 'r', 't', 's', 't', 'r', 'a', 'i', 'n', 'e', 'r', 'a', 'd', 'v', 'i', 's', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "sporttrampen.de", false */ 's', 'p', 'o', 'r', 't', 't', 'r', 'a', 'm', 'p', 'e', 'n', '.', 'd', 'e', '\0',
   /* "spotlightsrule.com", true */ 's', 'p', 'o', 't', 'l', 'i', 'g', 'h', 't', 's', 'r', 'u', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "spotupload.com", true */ 's', 'p', 'o', 't', 'u', 'p', 'l', 'o', 'a', 'd', '.', 'c', 'o', 'm', '\0',
-  /* "spr.id.au", true */ 's', 'p', 'r', '.', 'i', 'd', '.', 'a', 'u', '\0',
   /* "spreadsheets.google.com", true */ 's', 'p', 'r', 'e', 'a', 'd', 's', 'h', 'e', 'e', 't', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "spree.co.za", true */ 's', 'p', 'r', 'e', 'e', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "spreed.me", true */ 's', 'p', 'r', 'e', 'e', 'd', '.', 'm', 'e', '\0',
   /* "spresso.me", true */ 's', 'p', 'r', 'e', 's', 's', 'o', '.', 'm', 'e', '\0',
   /* "spricknet.de", true */ 's', 'p', 'r', 'i', 'c', 'k', 'n', 'e', 't', '.', 'd', 'e', '\0',
   /* "sprigings.com", true */ 's', 'p', 'r', 'i', 'g', 'i', 'n', 'g', 's', '.', 'c', 'o', 'm', '\0',
   /* "spron.in", true */ 's', 'p', 'r', 'o', 'n', '.', 'i', 'n', '\0',
   /* "sprueche-zum-valentinstag.de", true */ 's', 'p', 'r', 'u', 'e', 'c', 'h', 'e', '-', 'z', 'u', 'm', '-', 'v', 'a', 'l', 'e', 'n', 't', 'i', 'n', 's', 't', 'a', 'g', '.', 'd', 'e', '\0',
@@ -13234,17 +13220,16 @@ static const char kSTSHostTable[] = {
   /* "suki.moe", true */ 's', 'u', 'k', 'i', '.', 'm', 'o', 'e', '\0',
   /* "sulek.eu", true */ 's', 'u', 'l', 'e', 'k', '.', 'e', 'u', '\0',
   /* "summa.eu", true */ 's', 'u', 'm', 'm', 'a', '.', 'e', 'u', '\0',
   /* "summitbankofkc.com", true */ 's', 'u', 'm', 'm', 'i', 't', 'b', 'a', 'n', 'k', 'o', 'f', 'k', 'c', '.', 'c', 'o', 'm', '\0',
   /* "sumthing.com", true */ 's', 'u', 'm', 't', 'h', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "sunbritetv.com", true */ 's', 'u', 'n', 'b', 'r', 'i', 't', 'e', 't', 'v', '.', 'c', 'o', 'm', '\0',
   /* "sundayfundayjapan.com", true */ 's', 'u', 'n', 'd', 'a', 'y', 'f', 'u', 'n', 'd', 'a', 'y', 'j', 'a', 'p', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "suneilpatel.com", true */ 's', 'u', 'n', 'e', 'i', 'l', 'p', 'a', 't', 'e', 'l', '.', 'c', 'o', 'm', '\0',
-  /* "sunflyer.cn", false */ 's', 'u', 'n', 'f', 'l', 'y', 'e', 'r', '.', 'c', 'n', '\0',
   /* "sunjaydhama.com", true */ 's', 'u', 'n', 'j', 'a', 'y', 'd', 'h', 'a', 'm', 'a', '.', 'c', 'o', 'm', '\0',
   /* "sunsetwx.com", true */ 's', 'u', 'n', 's', 'e', 't', 'w', 'x', '.', 'c', 'o', 'm', '\0',
   /* "sunstar.bg", true */ 's', 'u', 'n', 's', 't', 'a', 'r', '.', 'b', 'g', '\0',
   /* "sunyanzi.tk", true */ 's', 'u', 'n', 'y', 'a', 'n', 'z', 'i', '.', 't', 'k', '\0',
   /* "suos.io", true */ 's', 'u', 'o', 's', '.', 'i', 'o', '\0',
   /* "supastuds.com", true */ 's', 'u', 'p', 'a', 's', 't', 'u', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "super-o-blog.com", true */ 's', 'u', 'p', 'e', 'r', '-', 'o', '-', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "superbart.nl", true */ 's', 'u', 'p', 'e', 'r', 'b', 'a', 'r', 't', '.', 'n', 'l', '\0',
@@ -13469,17 +13454,16 @@ static const char kSTSHostTable[] = {
   /* "tbarter.com", false */ 't', 'b', 'a', 'r', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "tbitc.ch", true */ 't', 'b', 'i', 't', 'c', '.', 'c', 'h', '\0',
   /* "tbrss.com", true */ 't', 'b', 'r', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "tbspace.de", true */ 't', 'b', 's', 'p', 'a', 'c', 'e', '.', 'd', 'e', '\0',
   /* "tbuchloh.de", true */ 't', 'b', 'u', 'c', 'h', 'l', 'o', 'h', '.', 'd', 'e', '\0',
   /* "tcacademy.co.uk", true */ 't', 'c', 'a', 'c', 'a', 'd', 'e', 'm', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "tcgrepublic.com", true */ 't', 'c', 'g', 'r', 'e', 'p', 'u', 'b', 'l', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "tchebb.me", true */ 't', 'c', 'h', 'e', 'b', 'b', '.', 'm', 'e', '\0',
-  /* "tcptun.com", true */ 't', 'c', 'p', 't', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "tdelmas.eu", true */ 't', 'd', 'e', 'l', 'm', 'a', 's', '.', 'e', 'u', '\0',
   /* "tdelmas.ovh", true */ 't', 'd', 'e', 'l', 'm', 'a', 's', '.', 'o', 'v', 'h', '\0',
   /* "tdrs.info", true */ 't', 'd', 'r', 's', '.', 'i', 'n', 'f', 'o', '\0',
   /* "tdude.co", true */ 't', 'd', 'u', 'd', 'e', '.', 'c', 'o', '\0',
   /* "teabagdesign.co.uk", true */ 't', 'e', 'a', 'b', 'a', 'g', 'd', 'e', 's', 'i', 'g', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "teachercreatedmaterials.com", true */ 't', 'e', 'a', 'c', 'h', 'e', 'r', 'c', 'r', 'e', 'a', 't', 'e', 'd', 'm', 'a', 't', 'e', 'r', 'i', 'a', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "teacherph.com", true */ 't', 'e', 'a', 'c', 'h', 'e', 'r', 'p', 'h', '.', 'c', 'o', 'm', '\0',
   /* "teacherph.net", true */ 't', 'e', 'a', 'c', 'h', 'e', 'r', 'p', 'h', '.', 'n', 'e', 't', '\0',
@@ -13878,17 +13862,17 @@ static const char kSTSHostTable[] = {
   /* "tiredofeating.com", true */ 't', 'i', 'r', 'e', 'd', 'o', 'f', 'e', 'a', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "tism.in", true */ 't', 'i', 's', 'm', '.', 'i', 'n', '\0',
   /* "tit.systems", true */ 't', 'i', 't', '.', 's', 'y', 's', 't', 'e', 'm', 's', '\0',
   /* "titanous.com", true */ 't', 'i', 't', 'a', 'n', 'o', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "titiansgirlphotography.com", true */ 't', 'i', 't', 'i', 'a', 'n', 's', 'g', 'i', 'r', 'l', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'o', 'm', '\0',
   /* "tjc.host", true */ 't', 'j', 'c', '.', 'h', 'o', 's', 't', '\0',
   /* "tjenestetorvet.dk", true */ 't', 'j', 'e', 'n', 'e', 's', 't', 'e', 't', 'o', 'r', 'v', 'e', 't', '.', 'd', 'k', '\0',
   /* "tjs.me", true */ 't', 'j', 's', '.', 'm', 'e', '\0',
-  /* "tkappertjedemetamorfose.nl", true */ 't', 'k', 'a', 'p', 'p', 'e', 'r', 't', 'j', 'e', 'd', 'e', 'm', 'e', 't', 'a', 'm', 'o', 'r', 'f', 'o', 's', 'e', '.', 'n', 'l', '\0',
+  /* "tlach.cz", true */ 't', 'l', 'a', 'c', 'h', '.', 'c', 'z', '\0',
   /* "tlo.xyz", true */ 't', 'l', 'o', '.', 'x', 'y', 'z', '\0',
   /* "tls.builders", true */ 't', 'l', 's', '.', 'b', 'u', 'i', 'l', 'd', 'e', 'r', 's', '\0',
   /* "tls.care", true */ 't', 'l', 's', '.', 'c', 'a', 'r', 'e', '\0',
   /* "tls1914.org", true */ 't', 'l', 's', '1', '9', '1', '4', '.', 'o', 'r', 'g', '\0',
   /* "tlthings.net", true */ 't', 'l', 't', 'h', 'i', 'n', 'g', 's', '.', 'n', 'e', 't', '\0',
   /* "tm.id.au", true */ 't', 'm', '.', 'i', 'd', '.', 'a', 'u', '\0',
   /* "tmberg.cf", true */ 't', 'm', 'b', 'e', 'r', 'g', '.', 'c', 'f', '\0',
   /* "tmberg.ga", true */ 't', 'm', 'b', 'e', 'r', 'g', '.', 'g', 'a', '\0',
@@ -13904,17 +13888,16 @@ static const char kSTSHostTable[] = {
   /* "tmpsantos.com.br", true */ 't', 'm', 'p', 's', 'a', 'n', 't', 'o', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "tmtopup.com", true */ 't', 'm', 't', 'o', 'p', 'u', 'p', '.', 'c', 'o', 'm', '\0',
   /* "tnb-plattform.de", true */ 't', 'n', 'b', '-', 'p', 'l', 'a', 't', 't', 'f', 'o', 'r', 'm', '.', 'd', 'e', '\0',
   /* "tnes.dk", true */ 't', 'n', 'e', 's', '.', 'd', 'k', '\0',
   /* "tno.io", true */ 't', 'n', 'o', '.', 'i', 'o', '\0',
   /* "tny.link", true */ 't', 'n', 'y', '.', 'l', 'i', 'n', 'k', '\0',
   /* "toast.al", true */ 't', 'o', 'a', 's', 't', '.', 'a', 'l', '\0',
   /* "tobacco.gov", true */ 't', 'o', 'b', 'a', 'c', 'c', 'o', '.', 'g', 'o', 'v', '\0',
-  /* "tobi-mayer.de", true */ 't', 'o', 'b', 'i', '-', 'm', 'a', 'y', 'e', 'r', '.', 'd', 'e', '\0',
   /* "tobias-haenel.de", true */ 't', 'o', 'b', 'i', 'a', 's', '-', 'h', 'a', 'e', 'n', 'e', 'l', '.', 'd', 'e', '\0',
   /* "tobias-kluge.de", true */ 't', 'o', 'b', 'i', 'a', 's', '-', 'k', 'l', 'u', 'g', 'e', '.', 'd', 'e', '\0',
   /* "tobias-picha.de", true */ 't', 'o', 'b', 'i', 'a', 's', '-', 'p', 'i', 'c', 'h', 'a', '.', 'd', 'e', '\0',
   /* "tobias-weidhase.de", true */ 't', 'o', 'b', 'i', 'a', 's', '-', 'w', 'e', 'i', 'd', 'h', 'a', 's', 'e', '.', 'd', 'e', '\0',
   /* "tobiasconradi.com", true */ 't', 'o', 'b', 'i', 'a', 's', 'c', 'o', 'n', 'r', 'a', 'd', 'i', '.', 'c', 'o', 'm', '\0',
   /* "tobiassachs.de", true */ 't', 'o', 'b', 'i', 'a', 's', 's', 'a', 'c', 'h', 's', '.', 'd', 'e', '\0',
   /* "tobiassattler.com", true */ 't', 'o', 'b', 'i', 'a', 's', 's', 'a', 't', 't', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "tobyschrapel.com", true */ 't', 'o', 'b', 'y', 's', 'c', 'h', 'r', 'a', 'p', 'e', 'l', '.', 'c', 'o', 'm', '\0',
@@ -14167,28 +14150,28 @@ static const char kSTSHostTable[] = {
   /* "tresorit.com", true */ 't', 'r', 'e', 's', 'o', 'r', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "tresorsecurity.com", true */ 't', 'r', 'e', 's', 'o', 'r', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "tretkowski.de", true */ 't', 'r', 'e', 't', 'k', 'o', 'w', 's', 'k', 'i', '.', 'd', 'e', '\0',
   /* "triadwars.com", true */ 't', 'r', 'i', 'a', 'd', 'w', 'a', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "tribaldos.com", true */ 't', 'r', 'i', 'b', 'a', 'l', 'd', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "tribut.de", true */ 't', 'r', 'i', 'b', 'u', 't', '.', 'd', 'e', '\0',
   /* "tributh.net", true */ 't', 'r', 'i', 'b', 'u', 't', 'h', '.', 'n', 'e', 't', '\0',
   /* "trident-online.de", true */ 't', 'r', 'i', 'd', 'e', 'n', 't', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
-  /* "trik.es", false */ 't', 'r', 'i', 'k', '.', 'e', 's', '\0',
   /* "trim-a-slab.com", true */ 't', 'r', 'i', 'm', '-', 'a', '-', 's', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "trimage.org", true */ 't', 'r', 'i', 'm', 'a', 'g', 'e', '.', 'o', 'r', 'g', '\0',
   /* "trineco.com", true */ 't', 'r', 'i', 'n', 'e', 'c', 'o', '.', 'c', 'o', 'm', '\0',
   /* "trineco.fi", true */ 't', 'r', 'i', 'n', 'e', 'c', 'o', '.', 'f', 'i', '\0',
   /* "trinnes.net", true */ 't', 'r', 'i', 'n', 'n', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "triop.se", true */ 't', 'r', 'i', 'o', 'p', '.', 's', 'e', '\0',
   /* "trior.net", true */ 't', 'r', 'i', 'o', 'r', '.', 'n', 'e', 't', '\0',
   /* "tripcombi.com", true */ 't', 'r', 'i', 'p', 'c', 'o', 'm', 'b', 'i', '.', 'c', 'o', 'm', '\0',
   /* "triple-mmm.de", true */ 't', 'r', 'i', 'p', 'l', 'e', '-', 'm', 'm', 'm', '.', 'd', 'e', '\0',
   /* "tripseats.com", true */ 't', 'r', 'i', 'p', 's', 'e', 'a', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "trixexpressweb.nl", true */ 't', 'r', 'i', 'x', 'e', 'x', 'p', 'r', 'e', 's', 's', 'w', 'e', 'b', '.', 'n', 'l', '\0',
+  /* "trkpuls.tk", true */ 't', 'r', 'k', 'p', 'u', 'l', 's', '.', 't', 'k', '\0',
   /* "troi.de", true */ 't', 'r', 'o', 'i', '.', 'd', 'e', '\0',
   /* "troianet.com.br", true */ 't', 'r', 'o', 'i', 'a', 'n', 'e', 't', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "trollscave.xyz", true */ 't', 'r', 'o', 'l', 'l', 's', 'c', 'a', 'v', 'e', '.', 'x', 'y', 'z', '\0',
   /* "trommelwirbel.com", true */ 't', 'r', 'o', 'm', 'm', 'e', 'l', 'w', 'i', 'r', 'b', 'e', 'l', '.', 'c', 'o', 'm', '\0',
   /* "tronatic-studio.com", true */ 't', 'r', 'o', 'n', 'a', 't', 'i', 'c', '-', 's', 't', 'u', 'd', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "trondelan.no", true */ 't', 'r', 'o', 'n', 'd', 'e', 'l', 'a', 'n', '.', 'n', 'o', '\0',
   /* "troo.ly", true */ 't', 'r', 'o', 'o', '.', 'l', 'y', '\0',
   /* "trophee-discount.com", true */ 't', 'r', 'o', 'p', 'h', 'e', 'e', '-', 'd', 'i', 's', 'c', 'o', 'u', 'n', 't', '.', 'c', 'o', 'm', '\0',
@@ -14714,16 +14697,17 @@ static const char kSTSHostTable[] = {
   /* "vigo-tarife.de", true */ 'v', 'i', 'g', 'o', '-', 't', 'a', 'r', 'i', 'f', 'e', '.', 'd', 'e', '\0',
   /* "vigrey.com", true */ 'v', 'i', 'g', 'r', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "vijverbenodigdheden.nl", true */ 'v', 'i', 'j', 'v', 'e', 'r', 'b', 'e', 'n', 'o', 'd', 'i', 'g', 'd', 'h', 'e', 'd', 'e', 'n', '.', 'n', 'l', '\0',
   /* "vikasbabyworld.de", false */ 'v', 'i', 'k', 'a', 's', 'b', 'a', 'b', 'y', 'w', 'o', 'r', 'l', 'd', '.', 'd', 'e', '\0',
   /* "vikashkumar.me", true */ 'v', 'i', 'k', 'a', 's', 'h', 'k', 'u', 'm', 'a', 'r', '.', 'm', 'e', '\0',
   /* "vikings.net", true */ 'v', 'i', 'k', 'i', 'n', 'g', 's', '.', 'n', 'e', 't', '\0',
   /* "vilaydin.com", true */ 'v', 'i', 'l', 'a', 'y', 'd', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "villa-romantica-zillertal.at", true */ 'v', 'i', 'l', 'l', 'a', '-', 'r', 'o', 'm', 'a', 'n', 't', 'i', 'c', 'a', '-', 'z', 'i', 'l', 'l', 'e', 'r', 't', 'a', 'l', '.', 'a', 't', '\0',
+  /* "villasenor.online", true */ 'v', 'i', 'l', 'l', 'a', 's', 'e', 'n', 'o', 'r', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "villenavedornon.fr", true */ 'v', 'i', 'l', 'l', 'e', 'n', 'a', 'v', 'e', 'd', 'o', 'r', 'n', 'o', 'n', '.', 'f', 'r', '\0',
   /* "villenvinkit.com", true */ 'v', 'i', 'l', 'l', 'e', 'n', 'v', 'i', 'n', 'k', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "vimeo.com", true */ 'v', 'i', 'm', 'e', 'o', '.', 'c', 'o', 'm', '\0',
   /* "vinagro.sk", true */ 'v', 'i', 'n', 'a', 'g', 'r', 'o', '.', 's', 'k', '\0',
   /* "vinasec.se", true */ 'v', 'i', 'n', 'a', 's', 'e', 'c', '.', 's', 'e', '\0',
   /* "vincentcox.com", false */ 'v', 'i', 'n', 'c', 'e', 'n', 't', 'c', 'o', 'x', '.', 'c', 'o', 'm', '\0',
   /* "vinciconps4.it", true */ 'v', 'i', 'n', 'c', 'i', 'c', 'o', 'n', 'p', 's', '4', '.', 'i', 't', '\0',
   /* "vincitraining.com", true */ 'v', 'i', 'n', 'c', 'i', 't', 'r', 'a', 'i', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
@@ -14788,17 +14772,16 @@ static const char kSTSHostTable[] = {
   /* "vmug.pl", true */ 'v', 'm', 'u', 'g', '.', 'p', 'l', '\0',
   /* "vn.search.yahoo.com", false */ 'v', 'n', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "vnd.cloud", true */ 'v', 'n', 'd', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "vnfs-team.com", true */ 'v', 'n', 'f', 's', '-', 't', 'e', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "vnvisa.center", true */ 'v', 'n', 'v', 'i', 's', 'a', '.', 'c', 'e', 'n', 't', 'e', 'r', '\0',
   /* "vnvisa.ru", true */ 'v', 'n', 'v', 'i', 's', 'a', '.', 'r', 'u', '\0',
   /* "vocab.guru", true */ 'v', 'o', 'c', 'a', 'b', '.', 'g', 'u', 'r', 'u', '\0',
   /* "vocaloid.my", true */ 'v', 'o', 'c', 'a', 'l', 'o', 'i', 'd', '.', 'm', 'y', '\0',
-  /* "vodpay.com", true */ 'v', 'o', 'd', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "vogler.name", true */ 'v', 'o', 'g', 'l', 'e', 'r', '.', 'n', 'a', 'm', 'e', '\0',
   /* "vogt.tech", true */ 'v', 'o', 'g', 't', '.', 't', 'e', 'c', 'h', '\0',
   /* "voidserv.net", true */ 'v', 'o', 'i', 'd', 's', 'e', 'r', 'v', '.', 'n', 'e', 't', '\0',
   /* "vokativy.cz", true */ 'v', 'o', 'k', 'a', 't', 'i', 'v', 'y', '.', 'c', 'z', '\0',
   /* "vokeapp.com", true */ 'v', 'o', 'k', 'e', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "volcain.io", true */ 'v', 'o', 'l', 'c', 'a', 'i', 'n', '.', 'i', 'o', '\0',
   /* "volgavibes.ru", true */ 'v', 'o', 'l', 'g', 'a', 'v', 'i', 'b', 'e', 's', '.', 'r', 'u', '\0',
   /* "voliere-info.nl", false */ 'v', 'o', 'l', 'i', 'e', 'r', 'e', '-', 'i', 'n', 'f', 'o', '.', 'n', 'l', '\0',
@@ -15050,17 +15033,16 @@ static const char kSTSHostTable[] = {
   /* "welches-kinderfahrrad.de", true */ 'w', 'e', 'l', 'c', 'h', 'e', 's', '-', 'k', 'i', 'n', 'd', 'e', 'r', 'f', 'a', 'h', 'r', 'r', 'a', 'd', '.', 'd', 'e', '\0',
   /* "welcomehelp.de", true */ 'w', 'e', 'l', 'c', 'o', 'm', 'e', 'h', 'e', 'l', 'p', '.', 'd', 'e', '\0',
   /* "wellacapability.com", true */ 'w', 'e', 'l', 'l', 'a', 'c', 'a', 'p', 'a', 'b', 'i', 'l', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "welldrake.com", true */ 'w', 'e', 'l', 'l', 'd', 'r', 'a', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "wellensteyn.ru", true */ 'w', 'e', 'l', 'l', 'e', 'n', 's', 't', 'e', 'y', 'n', '.', 'r', 'u', '\0',
   /* "wellproducedwines.com", true */ 'w', 'e', 'l', 'l', 'p', 'r', 'o', 'd', 'u', 'c', 'e', 'd', 'w', 'i', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "wellspringcamps.com", true */ 'w', 'e', 'l', 'l', 's', 'p', 'r', 'i', 'n', 'g', 'c', 'a', 'm', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "welovemail.com", true */ 'w', 'e', 'l', 'o', 'v', 'e', 'm', 'a', 'i', 'l', '.', 'c', 'o', 'm', '\0',
-  /* "welpy.com", true */ 'w', 'e', 'l', 'p', 'y', '.', 'c', 'o', 'm', '\0',
   /* "welsh.com.br", true */ 'w', 'e', 'l', 's', 'h', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "welteneroberer.de", true */ 'w', 'e', 'l', 't', 'e', 'n', 'e', 'r', 'o', 'b', 'e', 'r', 'e', 'r', '.', 'd', 'e', '\0',
   /* "weltengilde.de", true */ 'w', 'e', 'l', 't', 'e', 'n', 'g', 'i', 'l', 'd', 'e', '.', 'd', 'e', '\0',
   /* "weltenhueter.de", true */ 'w', 'e', 'l', 't', 'e', 'n', 'h', 'u', 'e', 't', 'e', 'r', '.', 'd', 'e', '\0',
   /* "weltentreff.com", true */ 'w', 'e', 'l', 't', 'e', 'n', 't', 'r', 'e', 'f', 'f', '.', 'c', 'o', 'm', '\0',
   /* "wemakemenus.com", true */ 'w', 'e', 'm', 'a', 'k', 'e', 'm', 'e', 'n', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "wendigo.pl", true */ 'w', 'e', 'n', 'd', 'i', 'g', 'o', '.', 'p', 'l', '\0',
   /* "wenjs.me", true */ 'w', 'e', 'n', 'j', 's', '.', 'm', 'e', '\0',
@@ -15434,18 +15416,16 @@ static const char kSTSHostTable[] = {
   /* "wypemagazine.se", true */ 'w', 'y', 'p', 'e', 'm', 'a', 'g', 'a', 'z', 'i', 'n', 'e', '.', 's', 'e', '\0',
   /* "wzrd.in", true */ 'w', 'z', 'r', 'd', '.', 'i', 'n', '\0',
   /* "wzyboy.org", true */ 'w', 'z', 'y', 'b', 'o', 'y', '.', 'o', 'r', 'g', '\0',
   /* "x-iweb.ru", true */ 'x', '-', 'i', 'w', 'e', 'b', '.', 'r', 'u', '\0',
   /* "x-ripped-hd.com", true */ 'x', '-', 'r', 'i', 'p', 'p', 'e', 'd', '-', 'h', 'd', '.', 'c', 'o', 'm', '\0',
   /* "x.io", true */ 'x', '.', 'i', 'o', '\0',
   /* "x.st", true */ 'x', '.', 's', 't', '\0',
   /* "x509.io", true */ 'x', '5', '0', '9', '.', 'i', 'o', '\0',
-  /* "x509.pub", true */ 'x', '5', '0', '9', '.', 'p', 'u', 'b', '\0',
-  /* "x509.pw", true */ 'x', '5', '0', '9', '.', 'p', 'w', '\0',
   /* "x64architecture.com", true */ 'x', '6', '4', 'a', 'r', 'c', 'h', 'i', 't', 'e', 'c', 't', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "xa1.uk", true */ 'x', 'a', '1', '.', 'u', 'k', '\0',
   /* "xalqbank-online.az", true */ 'x', 'a', 'l', 'q', 'b', 'a', 'n', 'k', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'a', 'z', '\0',
   /* "xat.re", true */ 'x', 'a', 't', '.', 'r', 'e', '\0',
   /* "xbb.hk", true */ 'x', 'b', 'b', '.', 'h', 'k', '\0',
   /* "xbb.li", true */ 'x', 'b', 'b', '.', 'l', 'i', '\0',
   /* "xbind.io", true */ 'x', 'b', 'i', 'n', 'd', '.', 'i', 'o', '\0',
   /* "xboxdownloadthat.com", true */ 'x', 'b', 'o', 'x', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', 't', 'h', 'a', 't', '.', 'c', 'o', 'm', '\0',
@@ -15521,17 +15501,16 @@ static const char kSTSHostTable[] = {
   /* "xn--jp-6l5cs1yf3ivjsglphyv.net", true */ 'x', 'n', '-', '-', 'j', 'p', '-', '6', 'l', '5', 'c', 's', '1', 'y', 'f', '3', 'i', 'v', 'j', 's', 'g', 'l', 'p', 'h', 'y', 'v', '.', 'n', 'e', 't', '\0',
   /* "xn--kda.tk", true */ 'x', 'n', '-', '-', 'k', 'd', 'a', '.', 't', 'k', '\0',
   /* "xn--knstler-n2a.tips", false */ 'x', 'n', '-', '-', 'k', 'n', 's', 't', 'l', 'e', 'r', '-', 'n', '2', 'a', '.', 't', 'i', 'p', 's', '\0',
   /* "xn--lsaupp-iua.se", true */ 'x', 'n', '-', '-', 'l', 's', 'a', 'u', 'p', 'p', '-', 'i', 'u', 'a', '.', 's', 'e', '\0',
   /* "xn--lsupp-mra.net", true */ 'x', 'n', '-', '-', 'l', 's', 'u', 'p', 'p', '-', 'm', 'r', 'a', '.', 'n', 'e', 't', '\0',
   /* "xn--maraa-rta.org", true */ 'x', 'n', '-', '-', 'm', 'a', 'r', 'a', 'a', '-', 'r', 't', 'a', '.', 'o', 'r', 'g', '\0',
   /* "xn--mentaltraining-fr-musiker-uwc.ch", true */ 'x', 'n', '-', '-', 'm', 'e', 'n', 't', 'a', 'l', 't', 'r', 'a', 'i', 'n', 'i', 'n', 'g', '-', 'f', 'r', '-', 'm', 'u', 's', 'i', 'k', 'e', 'r', '-', 'u', 'w', 'c', '.', 'c', 'h', '\0',
   /* "xn--pbt947am3ab71g.com", true */ 'x', 'n', '-', '-', 'p', 'b', 't', '9', '4', '7', 'a', 'm', '3', 'a', 'b', '7', '1', 'g', '.', 'c', 'o', 'm', '\0',
-  /* "xn--pq1a637b.xn--6qq986b3xl", true */ 'x', 'n', '-', '-', 'p', 'q', '1', 'a', '6', '3', '7', 'b', '.', 'x', 'n', '-', '-', '6', 'q', 'q', '9', '8', '6', 'b', '3', 'x', 'l', '\0',
   /* "xn--qckss0j.tk", true */ 'x', 'n', '-', '-', 'q', 'c', 'k', 's', 's', '0', 'j', '.', 't', 'k', '\0',
   /* "xn--rdiger-kuhlmann-zvb.de", true */ 'x', 'n', '-', '-', 'r', 'd', 'i', 'g', 'e', 'r', '-', 'k', 'u', 'h', 'l', 'm', 'a', 'n', 'n', '-', 'z', 'v', 'b', '.', 'd', 'e', '\0',
   /* "xn--rt-cja.eu", true */ 'x', 'n', '-', '-', 'r', 't', '-', 'c', 'j', 'a', '.', 'e', 'u', '\0',
   /* "xn--ruanmller-u9a.com", true */ 'x', 'n', '-', '-', 'r', 'u', 'a', 'n', 'm', 'l', 'l', 'e', 'r', '-', 'u', '9', 'a', '.', 'c', 'o', 'm', '\0',
   /* "xn--spenijmazania-yhc.pl", true */ 'x', 'n', '-', '-', 's', 'p', 'e', 'n', 'i', 'j', 'm', 'a', 'z', 'a', 'n', 'i', 'a', '-', 'y', 'h', 'c', '.', 'p', 'l', '\0',
   /* "xn--t8j4aa4nyhxa7duezbl49aqg5546e264d.net", true */ 'x', 'n', '-', '-', 't', '8', 'j', '4', 'a', 'a', '4', 'n', 'y', 'h', 'x', 'a', '7', 'd', 'u', 'e', 'z', 'b', 'l', '4', '9', 'a', 'q', 'g', '5', '5', '4', '6', 'e', '2', '6', '4', 'd', '.', 'n', 'e', 't', '\0',
   /* "xn--thorme-6uaf.ca", true */ 'x', 'n', '-', '-', 't', 'h', 'o', 'r', 'm', 'e', '-', '6', 'u', 'a', 'f', '.', 'c', 'a', '\0',
   /* "xn--u9jv84l7ea468b.com", true */ 'x', 'n', '-', '-', 'u', '9', 'j', 'v', '8', '4', 'l', '7', 'e', 'a', '4', '6', '8', 'b', '.', 'c', 'o', 'm', '\0',
@@ -15668,17 +15647,16 @@ static const char kSTSHostTable[] = {
   /* "yourself.today", true */ 'y', 'o', 'u', 'r', 's', 'e', 'l', 'f', '.', 't', 'o', 'd', 'a', 'y', '\0',
   /* "yourznc.com", true */ 'y', 'o', 'u', 'r', 'z', 'n', 'c', '.', 'c', 'o', 'm', '\0',
   /* "yout.com", true */ 'y', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "youtous.me", true */ 'y', 'o', 'u', 't', 'o', 'u', 's', '.', 'm', 'e', '\0',
   /* "youtubedownloader.com", true */ 'y', 'o', 'u', 't', 'u', 'b', 'e', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "youyoulemon.com", true */ 'y', 'o', 'u', 'y', 'o', 'u', 'l', 'e', 'm', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "yoyoost.duckdns.org", true */ 'y', 'o', 'y', 'o', 'o', 's', 't', '.', 'd', 'u', 'c', 'k', 'd', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "ypart.eu", false */ 'y', 'p', 'a', 'r', 't', '.', 'e', 'u', '\0',
-  /* "ypcs.fi", true */ 'y', 'p', 'c', 's', '.', 'f', 'i', '\0',
   /* "ypid.de", true */ 'y', 'p', 'i', 'd', '.', 'd', 'e', '\0',
   /* "yplanapp.com", true */ 'y', 'p', 'l', 'a', 'n', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "ys-shop.biz", true */ 'y', 's', '-', 's', 'h', 'o', 'p', '.', 'b', 'i', 'z', '\0',
   /* "ytec.ca", true */ 'y', 't', 'e', 'c', '.', 'c', 'a', '\0',
   /* "ytuquelees.net", true */ 'y', 't', 'u', 'q', 'u', 'e', 'l', 'e', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "ytvwld.de", true */ 'y', 't', 'v', 'w', 'l', 'd', '.', 'd', 'e', '\0',
   /* "yuanben.io", true */ 'y', 'u', 'a', 'n', 'b', 'e', 'n', '.', 'i', 'o', '\0',
   /* "yuanbenlian.com", true */ 'y', 'u', 'a', 'n', 'b', 'e', 'n', 'l', 'i', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -15780,19 +15758,17 @@ static const char kSTSHostTable[] = {
   /* "zerossl.com", true */ 'z', 'e', 'r', 'o', 's', 's', 'l', '.', 'c', 'o', 'm', '\0',
   /* "zespia.tw", false */ 'z', 'e', 's', 'p', 'i', 'a', '.', 't', 'w', '\0',
   /* "zeto365.pl", true */ 'z', 'e', 't', 'o', '3', '6', '5', '.', 'p', 'l', '\0',
   /* "zetorzeszow.pl", true */ 'z', 'e', 't', 'o', 'r', 'z', 'e', 's', 'z', 'o', 'w', '.', 'p', 'l', '\0',
   /* "zettaplan.ru", true */ 'z', 'e', 't', 't', 'a', 'p', 'l', 'a', 'n', '.', 'r', 'u', '\0',
   /* "zewtie.com", true */ 'z', 'e', 'w', 't', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "zgrep.org", true */ 'z', 'g', 'r', 'e', 'p', '.', 'o', 'r', 'g', '\0',
   /* "zh1.li", true */ 'z', 'h', '1', '.', 'l', 'i', '\0',
-  /* "zhang-hao.com", true */ 'z', 'h', 'a', 'n', 'g', '-', 'h', 'a', 'o', '.', 'c', 'o', 'm', '\0',
   /* "zhangge.net", true */ 'z', 'h', 'a', 'n', 'g', 'g', 'e', '.', 'n', 'e', 't', '\0',
-  /* "zhanghao.me", true */ 'z', 'h', 'a', 'n', 'g', 'h', 'a', 'o', '.', 'm', 'e', '\0',
   /* "zhangruilin.com", true */ 'z', 'h', 'a', 'n', 'g', 'r', 'u', 'i', 'l', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "zhangyuhao.com", true */ 'z', 'h', 'a', 'n', 'g', 'y', 'u', 'h', 'a', 'o', '.', 'c', 'o', 'm', '\0',
   /* "zhaochen.xyz", true */ 'z', 'h', 'a', 'o', 'c', 'h', 'e', 'n', '.', 'x', 'y', 'z', '\0',
   /* "zhaofeng.li", true */ 'z', 'h', 'a', 'o', 'f', 'e', 'n', 'g', '.', 'l', 'i', '\0',
   /* "zhengjie.com", true */ 'z', 'h', 'e', 'n', 'g', 'j', 'i', 'e', '.', 'c', 'o', 'm', '\0',
   /* "zhengzexin.com", true */ 'z', 'h', 'e', 'n', 'g', 'z', 'e', 'x', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "zhh.in", true */ 'z', 'h', 'h', '.', 'i', 'n', '\0',
   /* "zhihua-lai.com", true */ 'z', 'h', 'i', 'h', 'u', 'a', '-', 'l', 'a', 'i', '.', 'c', 'o', 'm', '\0',
@@ -15874,16 +15850,17 @@ static const char kSTSHostTable[] = {
   /* "zuram.net", true */ 'z', 'u', 'r', 'a', 'm', '.', 'n', 'e', 't', '\0',
   /* "zuviel.space", true */ 'z', 'u', 'v', 'i', 'e', 'l', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "zvps.uk", true */ 'z', 'v', 'p', 's', '.', 'u', 'k', '\0',
   /* "zvxr.net", true */ 'z', 'v', 'x', 'r', '.', 'n', 'e', 't', '\0',
   /* "zwerimex.com", true */ 'z', 'w', 'e', 'r', 'i', 'm', 'e', 'x', '.', 'c', 'o', 'm', '\0',
   /* "zwollemag.nl", true */ 'z', 'w', 'o', 'l', 'l', 'e', 'm', 'a', 'g', '.', 'n', 'l', '\0',
   /* "zx6rninja.de", true */ 'z', 'x', '6', 'r', 'n', 'i', 'n', 'j', 'a', '.', 'd', 'e', '\0',
   /* "zybbo.com", true */ 'z', 'y', 'b', 'b', 'o', '.', 'c', 'o', 'm', '\0',
+  /* "zymbit.com", true */ 'z', 'y', 'm', 'b', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "zypgr.com", true */ 'z', 'y', 'p', 'g', 'r', '.', 'c', 'o', 'm', '\0',
   /* "zyria.de", true */ 'z', 'y', 'r', 'i', 'a', '.', 'd', 'e', '\0',
   /* "zzsec.org", true */ 'z', 'z', 's', 'e', 'c', '.', 'o', 'r', 'g', '\0',
   /* "zzw.ca", true */ 'z', 'z', 'w', '.', 'c', 'a', '\0',
 };
 
 struct nsSTSPreload
 {
@@ -15906,1503 +15883,1504 @@ static const nsSTSPreload kSTSPreloadLis
   { 132, true },
   { 140, true },
   { 147, true },
   { 154, true },
   { 168, true },
   { 176, true },
   { 187, true },
   { 193, true },
-  { 201, true },
-  { 210, true },
-  { 219, true },
-  { 228, true },
-  { 237, true },
-  { 245, true },
-  { 253, true },
-  { 263, true },
-  { 273, true },
-  { 281, true },
-  { 294, true },
-  { 302, true },
-  { 310, true },
-  { 317, true },
-  { 327, true },
-  { 341, true },
-  { 356, true },
-  { 366, false },
-  { 389, true },
-  { 409, true },
-  { 421, true },
-  { 437, true },
-  { 445, true },
-  { 453, true },
-  { 463, true },
-  { 474, true },
-  { 481, true },
-  { 496, true },
-  { 510, true },
-  { 522, true },
-  { 533, true },
-  { 544, true },
-  { 555, true },
-  { 565, true },
-  { 575, true },
-  { 600, true },
-  { 608, true },
-  { 618, true },
-  { 626, true },
-  { 644, true },
-  { 655, false },
-  { 671, true },
-  { 682, true },
-  { 703, true },
-  { 719, true },
-  { 727, false },
-  { 739, true },
-  { 764, true },
-  { 786, true },
-  { 803, true },
-  { 826, true },
-  { 836, true },
-  { 847, true },
-  { 858, true },
-  { 872, true },
-  { 894, true },
-  { 906, true },
-  { 913, true },
-  { 922, true },
-  { 933, true },
-  { 940, true },
-  { 951, true },
-  { 962, true },
-  { 969, true },
-  { 976, true },
-  { 987, true },
-  { 994, true },
-  { 1006, true },
-  { 1023, true },
-  { 1041, true },
-  { 1055, true },
-  { 1067, true },
-  { 1078, true },
-  { 1087, true },
+  { 199, true },
+  { 207, true },
+  { 216, true },
+  { 225, true },
+  { 234, true },
+  { 243, true },
+  { 251, true },
+  { 259, true },
+  { 269, true },
+  { 279, true },
+  { 287, true },
+  { 300, true },
+  { 308, true },
+  { 316, true },
+  { 323, true },
+  { 333, true },
+  { 347, true },
+  { 362, true },
+  { 372, false },
+  { 395, true },
+  { 415, true },
+  { 427, true },
+  { 443, true },
+  { 451, true },
+  { 459, true },
+  { 469, true },
+  { 480, true },
+  { 487, true },
+  { 502, true },
+  { 516, true },
+  { 528, true },
+  { 539, true },
+  { 550, true },
+  { 561, true },
+  { 571, true },
+  { 581, true },
+  { 606, true },
+  { 614, true },
+  { 624, true },
+  { 632, true },
+  { 650, true },
+  { 661, false },
+  { 677, true },
+  { 688, true },
+  { 709, true },
+  { 725, true },
+  { 733, false },
+  { 745, true },
+  { 770, true },
+  { 792, true },
+  { 809, true },
+  { 832, true },
+  { 842, true },
+  { 853, true },
+  { 864, true },
+  { 878, true },
+  { 900, true },
+  { 912, true },
+  { 919, true },
+  { 928, true },
+  { 939, true },
+  { 946, true },
+  { 957, true },
+  { 968, true },
+  { 975, true },
+  { 982, true },
+  { 993, true },
+  { 1000, true },
+  { 1012, true },
+  { 1029, true },
+  { 1047, true },
+  { 1061, true },
+  { 1073, true },
+  { 1084, true },
   { 1093, true },
-  { 1108, true },
-  { 1116, true },
-  { 1125, true },
-  { 1133, true },
-  { 1144, true },
-  { 1154, true },
-  { 1172, true },
-  { 1188, true },
-  { 1197, true },
-  { 1205, true },
-  { 1213, true },
-  { 1224, true },
-  { 1242, true },
-  { 1253, true },
-  { 1262, true },
-  { 1274, true },
-  { 1288, true },
-  { 1296, true },
-  { 1306, false },
-  { 1319, true },
-  { 1328, true },
-  { 1342, true },
-  { 1351, true },
-  { 1372, true },
-  { 1392, true },
-  { 1401, true },
-  { 1411, true },
-  { 1426, true },
-  { 1434, true },
-  { 1451, true },
-  { 1464, true },
-  { 1473, false },
-  { 1485, true },
-  { 1493, true },
-  { 1504, true },
-  { 1511, true },
-  { 1520, true },
-  { 1529, true },
-  { 1542, true },
-  { 1551, true },
-  { 1570, true },
-  { 1589, true },
-  { 1601, true },
-  { 1615, true },
-  { 1627, true },
-  { 1638, true },
-  { 1647, true },
-  { 1658, true },
-  { 1671, true },
-  { 1679, true },
-  { 1694, true },
-  { 1706, true },
-  { 1719, true },
-  { 1729, true },