Merge mozilla-central to mozilla-inbound
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Mon, 28 Nov 2016 16:47:40 +0100
changeset 324453 a7a8cd0dd19250aaabd7aea88f6a19e8af7e6ad6
parent 324452 3da8afdc2497c051797d2b38da784a8cd043eee6 (current diff)
parent 324430 8387a4ada9a5c4cab059d8fafe0f8c933e83c149 (diff)
child 324454 ea74e14fae4134d3f3c1a0098f9bda5695a7ada6
push id24
push usermaklebus@msu.edu
push dateTue, 20 Dec 2016 03:11:33 +0000
milestone53.0a1
Merge mozilla-central to mozilla-inbound
python/compare-locales/compare_locales/tests/test_defines.py
python/compare-locales/compare_locales/tests/test_parser.py
--- a/browser/app/blocklist.xml
+++ b/browser/app/blocklist.xml
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='UTF-8'?>
-<blocklist lastupdate="1480165607548" xmlns="http://www.mozilla.org/2006/addons-blocklist">
+<blocklist lastupdate="1480338419582" xmlns="http://www.mozilla.org/2006/addons-blocklist">
   <emItems>
     <emItem blockID="i545" id="superlrcs@svenyor.net">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i167" id="{b64982b1-d112-42b5-b1e4-d3867c4533f8}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
--- a/browser/components/sessionstore/SessionStore.jsm
+++ b/browser/components/sessionstore/SessionStore.jsm
@@ -21,16 +21,17 @@ const TAB_STATE_WILL_RESTORE = 3;
 // A new window has just been restored. At this stage, tabs are generally
 // not restored.
 const NOTIFY_SINGLE_WINDOW_RESTORED = "sessionstore-single-window-restored";
 const NOTIFY_WINDOWS_RESTORED = "sessionstore-windows-restored";
 const NOTIFY_BROWSER_STATE_RESTORED = "sessionstore-browser-state-restored";
 const NOTIFY_LAST_SESSION_CLEARED = "sessionstore-last-session-cleared";
 const NOTIFY_RESTORING_ON_STARTUP = "sessionstore-restoring-on-startup";
 const NOTIFY_INITIATING_MANUAL_RESTORE = "sessionstore-initiating-manual-restore";
+const NOTIFY_CLOSED_OBJECTS_CHANGED = "sessionstore-closed-objects-changed";
 
 const NOTIFY_TAB_RESTORED = "sessionstore-debug-tab-restored"; // WARNING: debug-only
 
 // Maximum number of tabs to restore simultaneously. Previously controlled by
 // the browser.sessionstore.max_concurrent_tabs pref.
 const MAX_CONCURRENT_TAB_RESTORES = 3;
 
 // Amount (in CSS px) by which we allow window edges to be off-screen
@@ -164,16 +165,18 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyModuleGetter(this, "ScratchpadManager",
   "resource://devtools/client/scratchpad/scratchpad-manager.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "SessionSaver",
   "resource:///modules/sessionstore/SessionSaver.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "SessionCookies",
   "resource:///modules/sessionstore/SessionCookies.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "SessionFile",
   "resource:///modules/sessionstore/SessionFile.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "setTimeout",
+  "resource://gre/modules/Timer.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "TabAttributes",
   "resource:///modules/sessionstore/TabAttributes.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "TabCrashHandler",
   "resource:///modules/ContentCrashHandlers.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "TabState",
   "resource:///modules/sessionstore/TabState.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "TabStateCache",
   "resource:///modules/sessionstore/TabStateCache.jsm");
@@ -462,16 +465,19 @@ var SessionStoreInternal = {
   // number of tabs currently restoring
   _tabsRestoringCount: 0,
 
   // When starting Firefox with a single private window, this is the place
   // where we keep the session we actually wanted to restore in case the user
   // decides to later open a non-private window as well.
   _deferredInitialState: null,
 
+  // Keeps track of whether a notification needs to be sent that closed objects have changed.
+  _closedObjectsChanged: false,
+
   // A promise resolved once initialization is complete
   _deferredInitialized: (function () {
     let deferred = {};
 
     deferred.promise = new Promise((resolve, reject) => {
       deferred.resolve = resolve;
       deferred.reject = reject;
     });
@@ -677,39 +683,45 @@ var SessionStoreInternal = {
    * Handle notifications
    */
   observe: function ssi_observe(aSubject, aTopic, aData) {
     switch (aTopic) {
       case "browser-window-before-show": // catch new windows
         this.onBeforeBrowserWindowShown(aSubject);
         break;
       case "domwindowclosed": // catch closed windows
-        this.onClose(aSubject);
+        this.onClose(aSubject).then(() => {
+          this._notifyOfClosedObjectsChange();
+        });
         break;
       case "quit-application-granted":
         let syncShutdown = aData == "syncShutdown";
         this.onQuitApplicationGranted(syncShutdown);
         break;
       case "browser-lastwindow-close-granted":
         this.onLastWindowCloseGranted();
         break;
       case "quit-application":
         this.onQuitApplication(aData);
         break;
       case "browser:purge-session-history": // catch sanitization
         this.onPurgeSessionHistory();
+        this._notifyOfClosedObjectsChange();
         break;
       case "browser:purge-domain-data":
         this.onPurgeDomainData(aData);
+        this._notifyOfClosedObjectsChange();
         break;
       case "nsPref:changed": // catch pref changes
         this.onPrefChange(aData);
+        this._notifyOfClosedObjectsChange();
         break;
       case "idle-daily":
         this.onIdleDaily();
+        this._notifyOfClosedObjectsChange();
         break;
     }
   },
 
   /**
    * This method handles incoming messages sent by the session store content
    * script via the Frame Message Manager or Parent Process Message Manager,
    * and thus enables communication with OOP tabs.
@@ -939,16 +951,17 @@ var SessionStoreInternal = {
         this.onTabBrowserInserted(win, target);
         break;
       case "TabClose":
         // `adoptedBy` will be set if the tab was closed because it is being
         // moved to a new window.
         if (!aEvent.detail.adoptedBy)
           this.onTabClose(win, target);
         this.onTabRemove(win, target);
+        this._notifyOfClosedObjectsChange();
         break;
       case "TabSelect":
         this.onTabSelect(win);
         break;
       case "TabShow":
         this.onTabShow(win, target);
         break;
       case "TabHide":
@@ -1155,28 +1168,28 @@ var SessionStoreInternal = {
           // These are our pinned tabs, which we should restore
           if (appTabsState.windows.length) {
             newWindowState = appTabsState.windows[0];
             delete newWindowState.__lastSessionWindowID;
           }
 
           // In case there were no unpinned tabs, remove the window from _closedWindows
           if (!normalTabsState.windows.length) {
-            this._closedWindows.splice(closedWindowIndex, 1);
+            this._removeClosedWindow(closedWindowIndex);
           }
           // Or update _closedWindows with the modified state
           else {
             delete normalTabsState.windows[0].__lastSessionWindowID;
             this._closedWindows[closedWindowIndex] = normalTabsState.windows[0];
           }
         }
         else {
           // If we're just restoring the window, make sure it gets removed from
           // _closedWindows.
-          this._closedWindows.splice(closedWindowIndex, 1);
+          this._removeClosedWindow(closedWindowIndex);
           newWindowState = closedWindowState;
           delete newWindowState.hidden;
         }
 
         if (newWindowState) {
           // Ensure that the window state isn't hidden
           this._restoreCount = 1;
           let state = { windows: [newWindowState] };
@@ -1261,33 +1274,36 @@ var SessionStoreInternal = {
   },
 
   /**
    * On window close...
    * - remove event listeners from tabs
    * - save all window data
    * @param aWindow
    *        Window reference
+   *
+   * @returns a Promise
    */
   onClose: function ssi_onClose(aWindow) {
+    let completionPromise = Promise.resolve();
     // this window was about to be restored - conserve its original data, if any
     let isFullyLoaded = this._isWindowLoaded(aWindow);
     if (!isFullyLoaded) {
       if (!aWindow.__SSi) {
         aWindow.__SSi = this._generateWindowID();
       }
 
       this._windows[aWindow.__SSi] = this._statesToRestore[aWindow.__SS_restoreID];
       delete this._statesToRestore[aWindow.__SS_restoreID];
       delete aWindow.__SS_restoreID;
     }
 
     // ignore windows not tracked by SessionStore
     if (!aWindow.__SSi || !this._windows[aWindow.__SSi]) {
-      return;
+      return completionPromise;
     }
 
     // notify that the session store will stop tracking this window so that
     // extensions can store any data about this window in session store before
     // that's not possible anymore
     let event = aWindow.document.createEvent("Events");
     event.initEvent("SSWindowClosing", true, false);
     aWindow.dispatchEvent(event);
@@ -1372,17 +1388,17 @@ var SessionStoreInternal = {
       // 3) When the flush is complete, revisit our decision to store the window
       //    in _closedWindows, and add/remove as necessary.
       if (!winData.isPrivate) {
         // Remove any open private tabs the window may contain.
         PrivacyFilter.filterPrivateTabs(winData);
         this.maybeSaveClosedWindow(winData, isLastWindow);
       }
 
-      TabStateFlusher.flushWindow(aWindow).then(() => {
+      completionPromise = TabStateFlusher.flushWindow(aWindow).then(() => {
         // At this point, aWindow is closed! You should probably not try to
         // access any DOM elements from aWindow within this callback unless
         // you're holding on to them in the closure.
 
         for (let browser of browsers) {
           if (this._closedWindowTabs.has(browser.permanentKey)) {
             let tabData = this._closedWindowTabs.get(browser.permanentKey);
             TabState.copyFromCache(browser, tabData);
@@ -1408,16 +1424,18 @@ var SessionStoreInternal = {
       });
     } else {
       this.cleanUpWindow(aWindow, winData, browsers);
     }
 
     for (let i = 0; i < tabbrowser.tabs.length; i++) {
       this.onTabRemove(aWindow, tabbrowser.tabs[i], true);
     }
+
+    return completionPromise;
   },
 
   /**
    * Clean up the message listeners on a window that has finally
    * gone away. Call this once you're sure you don't want to hear
    * from any of this windows tabs from here forward.
    *
    * @param aWindow
@@ -1486,18 +1504,19 @@ var SessionStoreInternal = {
         }
 
         // About to save the closed window, add a unique ID.
         winData.closedId = this._nextClosedId++;
 
         // Insert tabData at the right position.
         this._closedWindows.splice(index, 0, winData);
         this._capClosedWindows();
+        this._closedObjectsChanged = true;
       } else if (!shouldStore && alreadyStored) {
-        this._closedWindows.splice(winIndex, 1);
+        this._removeClosedWindow(winIndex);
       }
     }
   },
 
   /**
    * On quit application granted
    */
   onQuitApplicationGranted: function ssi_onQuitApplicationGranted(syncShutdown=false) {
@@ -1664,23 +1683,29 @@ var SessionStoreInternal = {
 
     let openWindows = {};
     // Collect open windows.
     this._forEachBrowserWindow(({__SSi: id}) => openWindows[id] = true);
 
     // also clear all data about closed tabs and windows
     for (let ix in this._windows) {
       if (ix in openWindows) {
-        this._windows[ix]._closedTabs = [];
+        if (this._windows[ix]._closedTabs.length) {
+          this._windows[ix]._closedTabs = [];
+          this._closedObjectsChanged = true;
+        }
       } else {
         delete this._windows[ix];
       }
     }
     // also clear all data about closed windows
-    this._closedWindows = [];
+    if (this._closedWindows.length) {
+      this._closedWindows = [];
+      this._closedObjectsChanged = true;
+    }
     // give the tabbrowsers a chance to clear their histories first
     var win = this._getMostRecentBrowserWindow();
     if (win) {
       win.setTimeout(() => SessionSaver.run(), 0);
     } else if (RunState.isRunning) {
       SessionSaver.run();
     }
 
@@ -1700,18 +1725,20 @@ var SessionStoreInternal = {
         return true;
       }
       return aEntry.children && aEntry.children.some(containsDomain, this);
     }
     // remove all closed tabs containing a reference to the given domain
     for (let ix in this._windows) {
       let closedTabs = this._windows[ix]._closedTabs;
       for (let i = closedTabs.length - 1; i >= 0; i--) {
-        if (closedTabs[i].state.entries.some(containsDomain, this))
+        if (closedTabs[i].state.entries.some(containsDomain, this)) {
           closedTabs.splice(i, 1);
+          this._closedObjectsChanged = true;
+        }
       }
     }
     // remove all open & closed tabs containing a reference to the given
     // domain in closed windows
     for (let ix = this._closedWindows.length - 1; ix >= 0; ix--) {
       let closedTabs = this._closedWindows[ix]._closedTabs;
       let openTabs = this._closedWindows[ix].tabs;
       let openTabCount = openTabs.length;
@@ -1753,17 +1780,20 @@ var SessionStoreInternal = {
    */
   onPrefChange: function ssi_onPrefChange(aData) {
     switch (aData) {
       // if the user decreases the max number of closed tabs they want
       // preserved update our internal states to match that max
       case "sessionstore.max_tabs_undo":
         this._max_tabs_undo = this._prefBranch.getIntPref("sessionstore.max_tabs_undo");
         for (let ix in this._windows) {
-          this._windows[ix]._closedTabs.splice(this._max_tabs_undo, this._windows[ix]._closedTabs.length);
+          if (this._windows[ix]._closedTabs.length > this._max_tabs_undo) {
+            this._windows[ix]._closedTabs.splice(this._max_tabs_undo, this._windows[ix]._closedTabs.length);
+            this._closedObjectsChanged = true;
+          }
         }
         break;
       case "sessionstore.max_windows_undo":
         this._max_windows_undo = this._prefBranch.getIntPref("sessionstore.max_windows_undo");
         this._capClosedWindows();
         break;
     }
   },
@@ -1909,16 +1939,17 @@ var SessionStoreInternal = {
       index = closedTabs.length;
     }
 
     // About to save the closed tab, add a unique ID.
     tabData.closedId = this._nextClosedId++;
 
     // Insert tabData at the right position.
     closedTabs.splice(index, 0, tabData);
+    this._closedObjectsChanged = true;
 
     // Truncate the list of closed tabs, if needed.
     if (closedTabs.length > this._max_tabs_undo) {
       closedTabs.splice(this._max_tabs_undo, closedTabs.length);
     }
   },
 
   /**
@@ -1929,16 +1960,17 @@ var SessionStoreInternal = {
    * @param closedTabs (array)
    *        The list of closed tabs for a window.
    * @param index (uint)
    *        The index of the tab to remove.
    */
   removeClosedTabData(closedTabs, index) {
     // Remove the given index from the list.
     let [closedTab] = closedTabs.splice(index, 1);
+    this._closedObjectsChanged = true;
 
     // If the closed tab's state still has a .permanentKey property then we
     // haven't seen its final update message yet. Remove it from the map of
     // closed tabs so that we will simply discard its last messages and will
     // not add it back to the list of closed tabs again.
     if (closedTab.permanentKey) {
       this._closedTabs.delete(closedTab.permanentKey);
       this._closedWindowTabs.delete(closedTab.permanentKey);
@@ -2058,32 +2090,35 @@ var SessionStoreInternal = {
     // Remove old closed windows
     this._cleanupOldData([this._closedWindows]);
 
     // Remove closed tabs of closed windows
     this._cleanupOldData(this._closedWindows.map((winData) => winData._closedTabs));
 
     // Remove closed tabs of open windows
     this._cleanupOldData(Object.keys(this._windows).map((key) => this._windows[key]._closedTabs));
+
+    this._notifyOfClosedObjectsChange();
   },
 
   // Remove "old" data from an array
   _cleanupOldData: function(targets) {
     const TIME_TO_LIVE = this._prefBranch.getIntPref("sessionstore.cleanup.forget_closed_after");
     const now = Date.now();
 
     for (let array of targets) {
       for (let i = array.length - 1; i >= 0; --i)  {
         let data = array[i];
         // Make sure that we have a timestamp to tell us when the target
         // has been closed. If we don't have a timestamp, default to a
         // safe timestamp: just now.
         data.closedAt = data.closedAt || now;
         if (now - data.closedAt > TIME_TO_LIVE) {
           array.splice(i, 1);
+          this._closedObjectsChanged = true;
         }
       }
     }
   },
 
   /* ........ nsISessionStore API .............. */
 
   getBrowserState: function ssi_getBrowserState() {
@@ -2128,27 +2163,33 @@ var SessionStoreInternal = {
     this._forEachBrowserWindow(function(aWindow) {
       if (aWindow != window) {
         aWindow.close();
         this.onClose(aWindow);
       }
     });
 
     // make sure closed window data isn't kept
-    this._closedWindows = [];
+    if (this._closedWindows.length) {
+      this._closedWindows = [];
+      this._closedObjectsChanged = true;
+    }
 
     // determine how many windows are meant to be restored
     this._restoreCount = state.windows ? state.windows.length : 0;
 
     // global data must be restored before restoreWindow is called so that
     // it happens before observers are notified
     this._globalState.setFromState(state);
 
     // restore to the given state
     this.restoreWindows(window, state, {overwriteTabs: true});
+
+    // Notify of changes to closed objects.
+    this._notifyOfClosedObjectsChange();
   },
 
   getWindowState: function ssi_getWindowState(aWindow) {
     if ("__SSi" in aWindow) {
       return JSON.stringify(this._getWindowState(aWindow));
     }
 
     if (DyingWindowCache.has(aWindow)) {
@@ -2160,16 +2201,19 @@ var SessionStoreInternal = {
   },
 
   setWindowState: function ssi_setWindowState(aWindow, aState, aOverwrite) {
     if (!aWindow.__SSi) {
       throw Components.Exception("Window is not tracked", Cr.NS_ERROR_INVALID_ARG);
     }
 
     this.restoreWindows(aWindow, aState, {overwriteTabs: aOverwrite});
+
+    // Notify of changes to closed objects.
+    this._notifyOfClosedObjectsChange();
   },
 
   getTabState: function ssi_getTabState(aTab) {
     if (!aTab.ownerGlobal.__SSi) {
       throw Components.Exception("Default view is not tracked", Cr.NS_ERROR_INVALID_ARG);
     }
 
     let tabState = TabState.collect(aTab);
@@ -2198,16 +2242,19 @@ var SessionStoreInternal = {
       throw Components.Exception("Window is not tracked", Cr.NS_ERROR_INVALID_ARG);
     }
 
     if (aTab.linkedBrowser.__SS_restoreState) {
       this._resetTabRestoringState(aTab);
     }
 
     this.restoreTab(aTab, tabState);
+
+    // Notify of changes to closed objects.
+    this._notifyOfClosedObjectsChange();
   },
 
   duplicateTab: function ssi_duplicateTab(aWindow, aTab, aDelta = 0, aRestoreImmediately = true) {
     if (!aTab.ownerGlobal.__SSi) {
       throw Components.Exception("Default view is not tracked", Cr.NS_ERROR_INVALID_ARG);
     }
     if (!aWindow.gBrowser) {
       throw Components.Exception("Invalid window object: no gBrowser", Cr.NS_ERROR_INVALID_ARG);
@@ -2312,16 +2359,19 @@ var SessionStoreInternal = {
     this.restoreTab(tab, state);
 
     // restore the tab's position
     tabbrowser.moveTabTo(tab, pos);
 
     // focus the tab's content area (bug 342432)
     tab.linkedBrowser.focus();
 
+    // Notify of changes to closed objects.
+    this._notifyOfClosedObjectsChange();
+
     return tab;
   },
 
   forgetClosedTab: function ssi_forgetClosedTab(aWindow, aIndex) {
     if (!aWindow.__SSi) {
       throw Components.Exception("Window is not tracked", Cr.NS_ERROR_INVALID_ARG);
     }
 
@@ -2330,51 +2380,61 @@ var SessionStoreInternal = {
     // default to the most-recently closed tab
     aIndex = aIndex || 0;
     if (!(aIndex in closedTabs)) {
       throw Components.Exception("Invalid index: not in the closed tabs", Cr.NS_ERROR_INVALID_ARG);
     }
 
     // remove closed tab from the array
     this.removeClosedTabData(closedTabs, aIndex);
+
+    // Notify of changes to closed objects.
+    this._notifyOfClosedObjectsChange();
   },
 
   getClosedWindowCount: function ssi_getClosedWindowCount() {
     return this._closedWindows.length;
   },
 
   getClosedWindowData: function ssi_getClosedWindowData(aAsString = true) {
     return aAsString ? JSON.stringify(this._closedWindows) : Cu.cloneInto(this._closedWindows, {});
   },
 
   undoCloseWindow: function ssi_undoCloseWindow(aIndex) {
     if (!(aIndex in this._closedWindows)) {
       throw Components.Exception("Invalid index: not in the closed windows", Cr.NS_ERROR_INVALID_ARG);
     }
 
     // reopen the window
-    let state = { windows: this._closedWindows.splice(aIndex, 1) };
+    let state = { windows: this._removeClosedWindow(aIndex) };
     delete state.windows[0].closedAt; // Window is now open.
 
     let window = this._openWindowWithState(state);
     this.windowToFocus = window;
+
+    // Notify of changes to closed objects.
+    this._notifyOfClosedObjectsChange();
+
     return window;
   },
 
   forgetClosedWindow: function ssi_forgetClosedWindow(aIndex) {
     // default to the most-recently closed window
     aIndex = aIndex || 0;
     if (!(aIndex in this._closedWindows)) {
       throw Components.Exception("Invalid index: not in the closed windows", Cr.NS_ERROR_INVALID_ARG);
     }
 
     // remove closed window from the array
     let winData = this._closedWindows[aIndex];
-    this._closedWindows.splice(aIndex, 1);
+    this._removeClosedWindow(aIndex);
     this._saveableClosedWindowData.delete(winData);
+
+    // Notify of changes to closed objects.
+    this._notifyOfClosedObjectsChange();
   },
 
   getWindowValue: function ssi_getWindowValue(aWindow, aKey) {
     if ("__SSi" in aWindow) {
       var data = this._windows[aWindow.__SSi].extData || {};
       return data[aKey] || "";
     }
 
@@ -2579,30 +2639,34 @@ var SessionStoreInternal = {
         this._openWindowWithState({ windows: [winState] });
       }
     }
 
     // Merge closed windows from this session with ones from last session
     if (lastSessionState._closedWindows) {
       this._closedWindows = this._closedWindows.concat(lastSessionState._closedWindows);
       this._capClosedWindows();
+      this._closedObjectsChanged = true;
     }
 
     if (lastSessionState.scratchpads) {
       ScratchpadManager.restoreSession(lastSessionState.scratchpads);
     }
 
     // Set data that persists between sessions
     this._recentCrashes = lastSessionState.session &&
                           lastSessionState.session.recentCrashes || 0;
 
     // Update the session start time using the restored session state.
     this._updateSessionStartTime(lastSessionState);
 
     LastSession.clear();
+
+    // Notify of changes to closed objects.
+    this._notifyOfClosedObjectsChange();
   },
 
   /**
    * Revive a crashed tab and restore its state from before it crashed.
    *
    * @param aTab
    *        A <xul:tab> linked to a crashed browser. This is a no-op if the
    *        browser hasn't actually crashed, or is not associated with a tab.
@@ -2730,16 +2794,19 @@ var SessionStoreInternal = {
         this._resetLocalTabRestoringState(tab);
       }
 
       // Restore the state into the tab.
       this.restoreTab(tab, tabState, options);
     });
 
     tab.linkedBrowser.__SS_restoreState = TAB_STATE_WILL_RESTORE;
+
+    // Notify of changes to closed objects.
+    this._notifyOfClosedObjectsChange();
   },
 
   /**
    * Retrieves the latest session history information for a tab. The cached data
    * is returned immediately, but a callback may be provided that supplies
    * up-to-date data when or if it is available. The callback is passed a single
    * argument with data in the same format as the return value.
    *
@@ -3274,16 +3341,17 @@ var SessionStoreInternal = {
       debug(ex);
       this._sendRestoreCompletedNotifications();
       return;
     }
 
     // Restore closed windows if any.
     if (root._closedWindows) {
       this._closedWindows = root._closedWindows;
+      this._closedObjectsChanged = true;
     }
 
     // We're done here if there are no windows.
     if (!root.windows || !root.windows.length) {
       this._sendRestoreCompletedNotifications();
       return;
     }
 
@@ -3777,16 +3845,45 @@ var SessionStoreInternal = {
     }
 
     SessionSaver.runDelayed();
   },
 
   /* ........ Auxiliary Functions .............. */
 
   /**
+   * Remove a closed window from the list of closed windows and indicate that
+   * the change should be notified.
+   *
+   * @param index
+   *        The index of the window in this._closedWindows.
+   *
+   * @returns Array of closed windows.
+   */
+  _removeClosedWindow(index) {
+    let windows = this._closedWindows.splice(index, 1);
+    this._closedObjectsChanged = true;
+    return windows;
+  },
+
+  /**
+   * Notifies observers that the list of closed tabs and/or windows has changed.
+   * Waits a tick to allow SessionStorage a chance to register the change.
+   */
+  _notifyOfClosedObjectsChange() {
+    if (!this._closedObjectsChanged) {
+      return;
+    }
+    this._closedObjectsChanged = false;
+    setTimeout(() => {
+      Services.obs.notifyObservers(null, NOTIFY_CLOSED_OBJECTS_CHANGED, null);
+    }, 0);
+  },
+
+  /**
    * Determines whether or not a tab that is being restored needs
    * to have its remoteness flipped first.
    *
    * @param (object) with the following properties:
    *
    *        tabbrowser (<xul:tabbrowser>):
    *          The tabbrowser that the browser belongs to.
    *
@@ -4338,17 +4435,20 @@ var SessionStoreInternal = {
       let normalWindowIndex = 0;
       // try to find a non-popup window in this._closedWindows
       while (normalWindowIndex < this._closedWindows.length &&
              !!this._closedWindows[normalWindowIndex].isPopup)
         normalWindowIndex++;
       if (normalWindowIndex >= this._max_windows_undo)
         spliceTo = normalWindowIndex + 1;
     }
-    this._closedWindows.splice(spliceTo, this._closedWindows.length);
+    if (spliceTo < this._closedWindows.length) {
+      this._closedWindows.splice(spliceTo, this._closedWindows.length);
+      this._closedObjectsChanged = true;
+    }
   },
 
   /**
    * Clears the set of windows that are "resurrected" before writing to disk to
    * make closing windows one after the other until shutdown work as expected.
    *
    * This function should only be called when we are sure that there has been
    * a user action that indicates the browser is actively being used and all
--- a/browser/components/sessionstore/test/browser.ini
+++ b/browser/components/sessionstore/test/browser.ini
@@ -235,8 +235,11 @@ run-if = e10s
 run-if = e10s && crashreporter
 
 # Disabled on debug for frequent intermittent failures:
 [browser_undoCloseById.js]
 skip-if = debug
 [browser_docshell_uuid_consistency.js]
 [browser_grouped_session_store.js]
 skip-if = !e10s # GroupedSHistory is e10s-only
+
+[browser_closed_objects_changed_notifications_tabs.js]
+[browser_closed_objects_changed_notifications_windows.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_closed_objects_changed_notifications_tabs.js
@@ -0,0 +1,116 @@
+"use strict";
+
+/**
+ * This test is for the sessionstore-closed-objects-changed notifications.
+ */
+
+const MAX_TABS_UNDO_PREF = "browser.sessionstore.max_tabs_undo";
+const TOPIC = "sessionstore-closed-objects-changed";
+
+let notificationsCount = 0;
+
+function* openWindow(url) {
+  let win = yield promiseNewWindowLoaded();
+  let flags = Ci.nsIWebNavigation.LOAD_FLAGS_REPLACE_HISTORY;
+  win.gBrowser.selectedBrowser.loadURIWithFlags(url, flags);
+  yield promiseBrowserLoaded(win.gBrowser.selectedBrowser, true, url);
+  return win;
+}
+
+function* closeWindow(win) {
+  yield awaitNotification(() => BrowserTestUtils.closeWindow(win));
+}
+
+function* openAndCloseWindow(url) {
+  let win = yield openWindow(url);
+  yield closeWindow(win);
+}
+
+function* openTab(window, url) {
+  let tab = yield BrowserTestUtils.openNewForegroundTab(window.gBrowser, url);
+  yield TabStateFlusher.flush(tab.linkedBrowser);
+  return tab;
+}
+
+function* openAndCloseTab(window, url) {
+  let tab = yield openTab(window, url);
+  yield promiseRemoveTab(tab);
+}
+
+function countingObserver() {
+  notificationsCount++;
+}
+
+function assertNotificationCount(count) {
+  is(notificationsCount, count, "The expected number of notifications was received.");
+}
+
+function* awaitNotification(callback) {
+  let awaitNotification = TestUtils.topicObserved(TOPIC);
+  executeSoon(callback);
+  yield awaitNotification;
+}
+
+add_task(function* test_closedObjectsChangedNotifications() {
+  // Create a closed window so that when we do the purge we can expect a notification.
+  yield openAndCloseWindow("about:robots");
+
+  // Forget any previous closed windows or tabs from other tests that may have
+  // run in the same session.
+  yield awaitNotification(() => Services.obs.notifyObservers(null, "browser:purge-session-history", 0));
+
+  // Add an observer to count the number of notifications.
+  Services.obs.addObserver(countingObserver, TOPIC, false);
+
+  // Open a new window.
+  let win = yield openWindow("about:robots");
+
+  info("Opening and closing a tab.");
+  yield openAndCloseTab(win, "about:mozilla");
+  assertNotificationCount(1);
+
+  info("Opening and closing a second tab.");
+  yield openAndCloseTab(win, "about:mozilla");
+  assertNotificationCount(2);
+
+  info(`Changing the ${MAX_TABS_UNDO_PREF} pref.`);
+  registerCleanupFunction(function () {
+    Services.prefs.clearUserPref(MAX_TABS_UNDO_PREF);
+  });
+  yield awaitNotification(() => Services.prefs.setIntPref(MAX_TABS_UNDO_PREF, 1));
+  assertNotificationCount(3);
+
+  info("Undoing close of remaining closed tab.");
+  let tab = SessionStore.undoCloseTab(win, 0);
+  yield promiseTabRestored(tab);
+  assertNotificationCount(4);
+
+  info("Closing tab again.");
+  yield promiseRemoveTab(tab);
+  assertNotificationCount(5);
+
+  info("Purging session history.");
+  yield awaitNotification(() => Services.obs.notifyObservers(null, "browser:purge-session-history", 0));
+  assertNotificationCount(6);
+
+  info("Opening and closing another tab.");
+  yield openAndCloseTab(win, "http://example.com/");
+  assertNotificationCount(7);
+
+  info("Purging domain data with no matches.")
+  Services.obs.notifyObservers(null, "browser:purge-domain-data", "mozilla.com");
+  assertNotificationCount(7);
+
+  info("Purging domain data with matches.")
+  yield awaitNotification(() => Services.obs.notifyObservers(null, "browser:purge-domain-data", "example.com"));
+  assertNotificationCount(8);
+
+  info("Opening and closing another tab.");
+  yield openAndCloseTab(win, "http://example.com/");
+  assertNotificationCount(9);
+
+  yield closeWindow(win);
+  assertNotificationCount(10);
+
+  Services.obs.removeObserver(countingObserver, TOPIC);
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_closed_objects_changed_notifications_windows.js
@@ -0,0 +1,117 @@
+"use strict";
+
+/**
+ * This test is for the sessionstore-closed-objects-changed notifications.
+ */
+
+requestLongerTimeout(2);
+
+const MAX_WINDOWS_UNDO_PREF = "browser.sessionstore.max_windows_undo";
+const TOPIC = "sessionstore-closed-objects-changed";
+
+let notificationsCount = 0;
+
+function* openWindow(url) {
+  let win = yield promiseNewWindowLoaded();
+  let flags = Ci.nsIWebNavigation.LOAD_FLAGS_REPLACE_HISTORY;
+  win.gBrowser.selectedBrowser.loadURIWithFlags(url, flags);
+  yield promiseBrowserLoaded(win.gBrowser.selectedBrowser, true, url);
+  return win;
+}
+
+function* closeWindow(win) {
+  yield awaitNotification(() => BrowserTestUtils.closeWindow(win));
+}
+
+function* openAndCloseWindow(url) {
+  let win = yield openWindow(url);
+  yield closeWindow(win);
+}
+
+function countingObserver() {
+  notificationsCount++;
+}
+
+function assertNotificationCount(count) {
+  is(notificationsCount, count, "The expected number of notifications was received.");
+}
+
+function* awaitNotification(callback) {
+  let awaitNotification = TestUtils.topicObserved(TOPIC);
+  executeSoon(callback);
+  yield awaitNotification;
+}
+
+add_task(function* test_closedObjectsChangedNotifications() {
+  // Create a closed window so that when we do the purge we know to expect a notification
+  yield openAndCloseWindow("about:robots");
+
+  // Forget any previous closed windows or tabs from other tests that may have
+  // run in the same session.
+  yield awaitNotification(() => Services.obs.notifyObservers(null, "browser:purge-session-history", 0));
+
+  // Add an observer to count the number of notifications.
+  Services.obs.addObserver(countingObserver, TOPIC, false);
+
+  info("Opening and closing initial window.");
+  yield openAndCloseWindow("about:robots");
+  assertNotificationCount(1);
+
+  // Store state with a single closed window for use in later tests.
+  let closedState = Cu.cloneInto(JSON.parse(ss.getBrowserState()), {});
+
+  info("Undoing close of initial window.");
+  let win = SessionStore.undoCloseWindow(0);
+  yield promiseDelayedStartupFinished(win);
+  assertNotificationCount(2);
+
+  // Open a second window.
+  let win2 = yield openWindow("about:mozilla");
+
+  info("Closing both windows.");
+  yield closeWindow(win);
+  assertNotificationCount(3);
+  yield closeWindow(win2);
+  assertNotificationCount(4);
+
+  info(`Changing the ${MAX_WINDOWS_UNDO_PREF} pref.`);
+  registerCleanupFunction(function () {
+    Services.prefs.clearUserPref(MAX_WINDOWS_UNDO_PREF);
+  });
+  yield awaitNotification(() => Services.prefs.setIntPref(MAX_WINDOWS_UNDO_PREF, 1));
+  assertNotificationCount(5);
+
+  info("Forgetting a closed window.");
+  yield awaitNotification(() => SessionStore.forgetClosedWindow());
+  assertNotificationCount(6);
+
+  info("Opening and closing another window.");
+  yield openAndCloseWindow("about:robots");
+  assertNotificationCount(7);
+
+  info("Setting browser state to trigger change onIdleDaily.")
+  let state = Cu.cloneInto(JSON.parse(ss.getBrowserState()), {});
+  state._closedWindows[0].closedAt = 1;
+  yield promiseBrowserState(state);
+  assertNotificationCount(8);
+
+  info("Sending idle-daily");
+  yield awaitNotification(() => Services.obs.notifyObservers(null, "idle-daily", ""));
+  assertNotificationCount(9);
+
+  info("Opening and closing another window.");
+  yield openAndCloseWindow("about:robots");
+  assertNotificationCount(10);
+
+  info("Purging session history.");
+  yield awaitNotification(() => Services.obs.notifyObservers(null, "browser:purge-session-history", 0));
+  assertNotificationCount(11);
+
+  info("Setting window state.")
+  win = yield openWindow("about:mozilla");
+  yield awaitNotification(() => SessionStore.setWindowState(win, closedState));
+  assertNotificationCount(12);
+
+  Services.obs.removeObserver(countingObserver, TOPIC);
+  yield BrowserTestUtils.closeWindow(win);
+});
--- a/browser/extensions/formautofill/test/unit/head.js
+++ b/browser/extensions/formautofill/test/unit/head.js
@@ -1,42 +1,34 @@
 /**
- * Provides infrastructure for automated login components tests.
+ * Provides infrastructure for automated formautofill components tests.
  */
 
- /* exported importAutofillModule, getTempFile */
+/* exported importAutofillModule, getTempFile */
 
 "use strict";
 
 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/NetUtil.jsm");
 Cu.import("resource://testing-common/MockDocument.jsm");
 
-// Redirect the path of the resouce in addon to the exact file path.
-let defineLazyModuleGetter = XPCOMUtils.defineLazyModuleGetter;
-XPCOMUtils.defineLazyModuleGetter = function() {
-  let result = /^resource\:\/\/formautofill\/(.+)$/.exec(arguments[2]);
-  if (result) {
-    arguments[2] = Services.io.newFileURI(do_get_file(result[1])).spec;
-  }
-  return defineLazyModuleGetter.apply(this, arguments);
-};
-
-// Load the module by Service newFileURI API for running extension's XPCShell test
-function importAutofillModule(module) {
-  return Cu.import(Services.io.newFileURI(do_get_file(module)).spec);
-}
-
 XPCOMUtils.defineLazyModuleGetter(this, "DownloadPaths",
                                   "resource://gre/modules/DownloadPaths.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "FileUtils",
                                   "resource://gre/modules/FileUtils.jsm");
 
+// Register the resource path of formautofill
+let resHandler = Services.io.getProtocolHandler("resource")
+                            .QueryInterface(Ci.nsISubstitutingProtocolHandler);
+let dataURI = NetUtil.newURI(do_get_file(".", true));
+resHandler.setSubstitution("formautofill", dataURI);
+
 // While the previous test file should have deleted all the temporary files it
 // used, on Windows these might still be pending deletion on the physical file
 // system.  Thus, start from a new base number every time, to make a collision
 // with a file that is still pending deletion highly unlikely.
 let gFileCounter = Math.floor(Math.random() * 1000000);
 
 /**
  * Returns a reference to a temporary file, that is guaranteed not to exist, and
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/tail.js
@@ -0,0 +1,10 @@
+/**
+ * Cleans up the testing environment.
+ */
+
+/* global resHandler */
+
+"use strict";
+
+// Unregister the resource path of formautofill.
+resHandler.setSubstitution("formautofill", null);
--- a/browser/extensions/formautofill/test/unit/test_autofillFormFields.js
+++ b/browser/extensions/formautofill/test/unit/test_autofillFormFields.js
@@ -1,15 +1,15 @@
 /*
  * Test for form auto fill content helper fill all inputs function.
  */
 
 "use strict";
 
-let {FormAutofillHandler} = importAutofillModule("FormAutofillContent.jsm");
+let {FormAutofillHandler} = Cu.import("resource://formautofill/FormAutofillContent.jsm");
 
 const TESTCASES = [
   {
     description: "Form without autocomplete property",
     document: `<form><input id="given-name"><input id="family-name">
                <input id="street-addr"><input id="city"><input id="country">
                <input id='email'><input id="tel"></form>`,
     fieldDetails: [],
--- a/browser/extensions/formautofill/test/unit/test_collectFormFields.js
+++ b/browser/extensions/formautofill/test/unit/test_collectFormFields.js
@@ -1,15 +1,15 @@
 /*
  * Test for form auto fill content helper collectFormFields functions.
  */
 
 "use strict";
 
-let {FormAutofillHandler} = importAutofillModule("FormAutofillContent.jsm");
+let {FormAutofillHandler} = Cu.import("resource://formautofill/FormAutofillContent.jsm");
 
 const TESTCASES = [
   {
     description: "Form without autocomplete property",
     document: `<form><input id="given-name"><input id="family-name">
                <input id="street-addr"><input id="city"><input id="country">
                <input id='email'><input id="tel"></form>`,
     returnedFormat: [],
--- a/browser/extensions/formautofill/test/unit/test_populateFieldValues.js
+++ b/browser/extensions/formautofill/test/unit/test_populateFieldValues.js
@@ -1,17 +1,17 @@
 /*
  * Test for populating field values in Form Autofill Parent.
  */
 
 /* global FormAutofillParent */
 
 "use strict";
 
-importAutofillModule("FormAutofillParent.jsm");
+Cu.import("resource://formautofill/FormAutofillParent.jsm");
 
 do_get_profile();
 
 const TEST_FIELDS = [
   {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "organization"},
   {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "street-address"},
   {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "address-level2"},
   {"section": "", "addressType": "shipping", "contactType": "", "fieldName": "address-level1"},
--- a/browser/extensions/formautofill/test/unit/test_profileStorage.js
+++ b/browser/extensions/formautofill/test/unit/test_profileStorage.js
@@ -2,17 +2,17 @@
  * Tests ProfileStorage object.
  */
 
 /* global ProfileStorage */
 
 "use strict";
 
 Cu.import("resource://gre/modules/Task.jsm");
-Cu.import(Services.io.newFileURI(do_get_file("ProfileStorage.jsm")).spec);
+Cu.import("resource://formautofill/ProfileStorage.jsm");
 
 const TEST_STORE_FILE_NAME = "test-profile.json";
 
 const TEST_PROFILE_1 = {
   organization: "World Wide Web Consortium",
   streetAddress: "32 Vassar Street\nMIT Room 32-G524",
   addressLevel2: "Cambridge",
   addressLevel1: "MA",
--- a/browser/extensions/formautofill/test/unit/xpcshell.ini
+++ b/browser/extensions/formautofill/test/unit/xpcshell.ini
@@ -1,11 +1,11 @@
 [DEFAULT]
 head = head.js
-tail =
+tail = tail.js
 support-files =
   ../../content/FormAutofillContent.jsm
   ../../content/FormAutofillParent.jsm
   ../../content/ProfileStorage.jsm
 
 [test_autofillFormFields.js]
 [test_collectFormFields.js]
 [test_populateFieldValues.js]
--- a/devtools/client/framework/test/shared-head.js
+++ b/devtools/client/framework/test/shared-head.js
@@ -589,8 +589,39 @@ function waitForTitleChange(toolbox) {
   toolbox.win.parent.addEventListener("message", function onmessage(event) {
     if (event.data.name == "set-host-title") {
       toolbox.win.parent.removeEventListener("message", onmessage);
       deferred.resolve();
     }
   });
   return deferred.promise;
 }
+
+/**
+ * Create an HTTP server that can be used to simulate custom requests within
+ * a test.  It is automatically cleaned up when the test ends, so no need to
+ * call `destroy`.
+ *
+ * See https://developer.mozilla.org/en-US/docs/Httpd.js/HTTP_server_for_unit_tests
+ * for more information about how to register handlers.
+ *
+ * The server can be accessed like:
+ *
+ *   const server = createTestHTTPServer();
+ *   let url = "http://localhost: " + server.identity.primaryPort + "/path";
+ *
+ * @returns {HttpServer}
+ */
+function createTestHTTPServer() {
+  const {HttpServer} = Cu.import("resource://testing-common/httpd.js", {});
+  let server = new HttpServer();
+
+  registerCleanupFunction(function* cleanup() {
+    let destroyed = defer();
+    server.stop(() => {
+      destroyed.resolve();
+    });
+    yield destroyed.promise;
+  });
+
+  server.start(-1);
+  return server;
+}
--- a/devtools/client/inspector/markup/test/browser_markup_load_01.js
+++ b/devtools/client/inspector/markup/test/browser_markup_load_01.js
@@ -23,45 +23,56 @@ server.registerPathHandler("/slow.gif", 
 });
 
 // Test page load events.
 const TEST_URL = "data:text/html," +
   "<!DOCTYPE html>" +
   "<head><meta charset='utf-8' /></head>" +
   "<body>" +
   "<p>Slow script</p>" +
-  "<img src='http://localhost:" + server.identity.primaryPort + "/slow.gif' /></script>" +
+  "<img src='http://localhost:" + server.identity.primaryPort + "/slow.gif' />" +
   "</body>" +
   "</html>";
 
 add_task(function* () {
   let {inspector, testActor, tab} = yield openInspectorForURL(TEST_URL);
+
   let domContentLoaded = waitForLinkedBrowserEvent(tab, "DOMContentLoaded");
   let pageLoaded = waitForLinkedBrowserEvent(tab, "load");
 
   ok(inspector.markup, "There is a markup view");
 
   // Select an element while the tab is in the middle of a slow reload.
   testActor.eval("location.reload()");
+
+  info("Wait for DOMContentLoaded");
   yield domContentLoaded;
-  yield chooseWithInspectElementContextMenu("img", testActor);
+
+  info("Inspect element via context menu");
+  let markupLoaded = inspector.once("markuploaded");
+  let multipleChildrenUpdates = waitForMultipleChildrenUpdates(inspector);
+  yield chooseWithInspectElementContextMenu("img", tab);
+
+  info("Wait for load");
   yield pageLoaded;
 
-  yield inspector.once("markuploaded");
-  yield waitForMultipleChildrenUpdates(inspector);
+  info("Wait for markup-loaded after element inspection");
+  yield markupLoaded;
+  info("Wait for multiple children updates after element inspection");
+  yield multipleChildrenUpdates;
 
   ok(inspector.markup, "There is a markup view");
   is(inspector.markup._elt.children.length, 1, "The markup view is rendering");
 });
 
-function* chooseWithInspectElementContextMenu(selector, testActor) {
+function* chooseWithInspectElementContextMenu(selector, tab) {
   yield BrowserTestUtils.synthesizeMouseAtCenter(selector, {
     type: "contextmenu",
     button: 2
-  }, gBrowser.selectedBrowser);
+  }, tab.linkedBrowser);
 
   yield EventUtils.synthesizeKey("Q", {});
 }
 
 function waitForLinkedBrowserEvent(tab, event) {
   let def = defer();
   tab.linkedBrowser.addEventListener(event, function cb() {
     tab.linkedBrowser.removeEventListener(event, cb, true);
--- a/devtools/client/inspector/markup/test/head.js
+++ b/devtools/client/inspector/markup/test/head.js
@@ -415,47 +415,16 @@ function* waitForMultipleChildrenUpdates
       inspector.markup._queuedChildUpdates.size) {
     yield waitForChildrenUpdated(inspector);
     return yield waitForMultipleChildrenUpdates(inspector);
   }
   return undefined;
 }
 
 /**
- * Create an HTTP server that can be used to simulate custom requests within
- * a test.  It is automatically cleaned up when the test ends, so no need to
- * call `destroy`.
- *
- * See https://developer.mozilla.org/en-US/docs/Httpd.js/HTTP_server_for_unit_tests
- * for more information about how to register handlers.
- *
- * The server can be accessed like:
- *
- *   const server = createTestHTTPServer();
- *   let url = "http://localhost: " + server.identity.primaryPort + "/path";
- *
- * @returns {HttpServer}
- */
-function createTestHTTPServer() {
-  const {HttpServer} = Cu.import("resource://testing-common/httpd.js", {});
-  let server = new HttpServer();
-
-  registerCleanupFunction(function* cleanup() {
-    let destroyed = defer();
-    server.stop(() => {
-      destroyed.resolve();
-    });
-    yield destroyed.promise;
-  });
-
-  server.start(-1);
-  return server;
-}
-
-/**
  * Registers new backend tab actor.
  *
  * @param {DebuggerClient} client RDP client object (toolbox.target.client)
  * @param {Object} options Configuration object with the following options:
  *
  * - moduleUrl {String}: URL of the module that contains actor implementation.
  * - prefix {String}: prefix of the actor.
  * - actorClass {ActorClassWithSpec}: Constructor object for the actor.
--- a/devtools/client/inspector/test/browser.ini
+++ b/devtools/client/inspector/test/browser.ini
@@ -163,10 +163,11 @@ subsuite = clipboard
 [browser_inspector_search-label.js]
 [browser_inspector_search-reserved.js]
 [browser_inspector_search-selection.js]
 [browser_inspector_search-sidebar.js]
 [browser_inspector_select-docshell.js]
 [browser_inspector_select-last-selected.js]
 [browser_inspector_search-navigation.js]
 [browser_inspector_sidebarstate.js]
+[browser_inspector_startup.js]
 [browser_inspector_switch-to-inspector-on-pick.js]
 [browser_inspector_textbox-menu.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/test/browser_inspector_startup.js
@@ -0,0 +1,84 @@
+/* vim: set ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Tests that the inspector loads early without waiting for load events.
+
+const server = createTestHTTPServer();
+
+// Register a slow image handler so we can simulate a long time between
+// a reload and the load event firing.
+server.registerContentType("gif", "image/gif");
+function onPageResourceRequest() {
+  return new Promise(done => {
+    server.registerPathHandler("/slow.gif", function (metadata, response) {
+      info("Image has been requested");
+      response.processAsync();
+      done(response);
+    });
+  });
+}
+
+// Test page load events.
+const TEST_URL = "data:text/html," +
+  "<!DOCTYPE html>" +
+  "<head><meta charset='utf-8' /></head>" +
+  "<body>" +
+  "<p>Page loading slowly</p>" +
+  "<img src='http://localhost:" + server.identity.primaryPort + "/slow.gif' />" +
+  "</body>" +
+  "</html>";
+
+add_task(function* () {
+  let {inspector, tab} = yield openInspectorForURL("about:blank");
+
+  let domContentLoaded = waitForLinkedBrowserEvent(tab, "DOMContentLoaded");
+  let pageLoaded = waitForLinkedBrowserEvent(tab, "load");
+
+  let markupLoaded = inspector.once("markuploaded");
+  let onRequest = onPageResourceRequest();
+
+  info("Navigate to the slow loading page");
+  let activeTab = inspector.toolbox.target.activeTab;
+  yield activeTab.navigateTo(TEST_URL);
+
+  info("Wait for request made to the image");
+  let response = yield onRequest;
+
+  // The request made to the image shouldn't block the DOMContentLoaded event
+  info("Wait for DOMContentLoaded");
+  yield domContentLoaded;
+
+  // Nor does it prevent the inspector from loading
+  info("Wait for markup-loaded");
+  yield markupLoaded;
+
+  ok(inspector.markup, "There is a markup view");
+  is(inspector.markup._elt.children.length, 1, "The markup view is rendering");
+  is(yield contentReadyState(tab), "interactive",
+     "Page is still loading but the inspector is ready");
+
+  // Ends page load by unblocking the image request
+  response.finish();
+
+  // We should then receive the page load event
+  info("Wait for load");
+  yield pageLoaded;
+});
+
+function waitForLinkedBrowserEvent(tab, event) {
+  let def = defer();
+  tab.linkedBrowser.addEventListener(event, function cb() {
+    tab.linkedBrowser.removeEventListener(event, cb, true);
+    def.resolve();
+  }, true);
+  return def.promise;
+}
+
+function contentReadyState(tab) {
+  return ContentTask.spawn(tab.linkedBrowser, null, function () {
+    return content.document.readyState;
+  });
+}
--- a/devtools/client/shared/components/reps/grip.js
+++ b/devtools/client/shared/components/reps/grip.js
@@ -47,17 +47,17 @@ define(function (require, exports, modul
         return this.propIterator(object, max);
       } catch (err) {
         console.error(err);
       }
       return [];
     },
 
     propIterator: function (object, max) {
-      if (Object.keys(object.preview).includes("wrappedValue")) {
+      if (object.preview && Object.keys(object.preview).includes("wrappedValue")) {
         const { Rep } = createFactories(require("./rep"));
 
         return [Rep({
           object: object.preview.wrappedValue,
           mode: this.props.mode || MODE.TINY,
           defaultRep: Grip,
         })];
       }
--- a/devtools/client/sourceeditor/codemirror/mozilla.css
+++ b/devtools/client/sourceeditor/codemirror/mozilla.css
@@ -11,16 +11,21 @@
 
 .theme-dark:root {
   --breakpoint-background: url("chrome://devtools/skin/images/breakpoint.svg#dark");
   --breakpoint-hover-background: url("chrome://devtools/skin/images/breakpoint.svg#dark-hover");
   --breakpoint-active-color: rgba(112,191,83,.4);
   --breakpoint-conditional-background: url("chrome://devtools/skin/images/breakpoint.svg#dark-conditional");
 }
 
+.CodeMirror {
+  height: 100%;
+  cursor: text;
+}
+
 .CodeMirror .errors {
   width: 16px;
 }
 
 .CodeMirror .error {
   display: inline-block;
   margin-left: 5px;
   width: 12px;
@@ -87,20 +92,16 @@
 }
 
 /* Don't display the highlight color since the debug line
    is already highlighted */
 .debug-line .CodeMirror-activeline-background {
   display: none;
 }
 
-.CodeMirror {
-  cursor: text;
-}
-
 .CodeMirror-gutters {
   cursor: default;
 }
 
 /* This is to avoid the fake horizontal scrollbar div of codemirror to go 0
 height when floating scrollbars are active. Make sure that this value is equal
 to the maximum of `min-height` specific to the `scrollbar[orient="horizontal"]`
 selector in floating-scrollbar-light.css across all platforms. */
--- a/devtools/client/sourceeditor/editor.js
+++ b/devtools/client/sourceeditor/editor.js
@@ -57,18 +57,17 @@ const CM_SCRIPTS = [
 
 const CM_IFRAME =
   "data:text/html;charset=utf8,<!DOCTYPE html>" +
   "<html dir='ltr'>" +
   "  <head>" +
   "    <style>" +
   "      html, body { height: 100%; }" +
   "      body { margin: 0; overflow: hidden; }" +
-  "      .CodeMirror { width: 100%; height: 100% !important; " +
-  "line-height: 1.25 !important;}" +
+  "      .CodeMirror { width: 100% !important; line-height: 1.25 !important; }" +
   "    </style>" +
   CM_STYLES.map(style => "<link rel='stylesheet' href='" + style + "'>").join("\n") +
   "  </head>" +
   "  <body class='theme-body devtools-monospace'></body>" +
   "</html>";
 
 const CM_MAPPING = [
   "focus",
--- a/devtools/server/actors/highlighters.js
+++ b/devtools/server/actors/highlighters.js
@@ -521,38 +521,40 @@ var CustomHighlighterActor = exports.Cus
       this._highlighterEnv = null;
     }
   }
 });
 
 /**
  * The HighlighterEnvironment is an object that holds all the required data for
  * highlighters to work: the window, docShell, event listener target, ...
- * It also emits "will-navigate" and "navigate" events, similarly to the
- * TabActor.
+ * It also emits "will-navigate", "navigate" and "window-ready" events,
+ * similarly to the TabActor.
  *
  * It can be initialized either from a TabActor (which is the most frequent way
  * of using it, since highlighters are usually initialized by the
  * HighlighterActor or CustomHighlighterActor, which have a tabActor reference).
  * It can also be initialized just with a window object (which is useful for
  * when a highlighter is used outside of the debugger server context, for
  * instance from a gcli command).
  */
 function HighlighterEnvironment() {
+  this.relayTabActorWindowReady = this.relayTabActorWindowReady.bind(this);
   this.relayTabActorNavigate = this.relayTabActorNavigate.bind(this);
   this.relayTabActorWillNavigate = this.relayTabActorWillNavigate.bind(this);
 
   EventEmitter.decorate(this);
 }
 
 exports.HighlighterEnvironment = HighlighterEnvironment;
 
 HighlighterEnvironment.prototype = {
   initFromTabActor: function (tabActor) {
     this._tabActor = tabActor;
+    events.on(this._tabActor, "window-ready", this.relayTabActorWindowReady);
     events.on(this._tabActor, "navigate", this.relayTabActorNavigate);
     events.on(this._tabActor, "will-navigate", this.relayTabActorWillNavigate);
   },
 
   initFromWindow: function (win) {
     this._win = win;
 
     // We need a progress listener to know when the window will navigate/has
@@ -644,26 +646,31 @@ HighlighterEnvironment.prototype = {
    */
   get pageListenerTarget() {
     if (this._tabActor && this._tabActor.isRootActor) {
       return this.window;
     }
     return this.docShell.chromeEventHandler;
   },
 
+  relayTabActorWindowReady: function (data) {
+    this.emit("window-ready", data);
+  },
+
   relayTabActorNavigate: function (data) {
     this.emit("navigate", data);
   },
 
   relayTabActorWillNavigate: function (data) {
     this.emit("will-navigate", data);
   },
 
   destroy: function () {
     if (this._tabActor) {
+      events.off(this._tabActor, "window-ready", this.relayTabActorWindowReady);
       events.off(this._tabActor, "navigate", this.relayTabActorNavigate);
       events.off(this._tabActor, "will-navigate", this.relayTabActorWillNavigate);
     }
 
     // In case the environment was initialized from a window, we need to remove
     // the progress listener.
     if (this._win) {
       try {
--- a/devtools/server/actors/highlighters/utils/markup.js
+++ b/devtools/server/actors/highlighters/utils/markup.js
@@ -238,54 +238,56 @@ function CanvasFrameAnonymousContentHelp
   this.highlighterEnv = highlighterEnv;
   this.nodeBuilder = nodeBuilder;
   this.anonymousContentDocument = this.highlighterEnv.document;
   // XXX the next line is a wallpaper for bug 1123362.
   this.anonymousContentGlobal = Cu.getGlobalForObject(
                                 this.anonymousContentDocument);
 
   // Only try to create the highlighter when the document is loaded,
-  // otherwise, wait for the navigate event to fire.
+  // otherwise, wait for the window-ready event to fire.
   let doc = this.highlighterEnv.document;
   if (doc.documentElement && doc.readyState != "uninitialized") {
     this._insert();
   }
 
-  this._onNavigate = this._onNavigate.bind(this);
-  this.highlighterEnv.on("navigate", this._onNavigate);
+  this._onWindowReady= this._onWindowReady.bind(this);
+  this.highlighterEnv.on("window-ready", this._onWindowReady);
 
   this.listeners = new Map();
 }
 
 CanvasFrameAnonymousContentHelper.prototype = {
   destroy: function () {
     try {
       let doc = this.anonymousContentDocument;
       doc.removeAnonymousContent(this._content);
     } catch (e) {
       // If the current window isn't the one the content was inserted into, this
       // will fail, but that's fine.
     }
-    this.highlighterEnv.off("navigate", this._onNavigate);
+    this.highlighterEnv.off("window-ready", this._onWindowReady);
     this.highlighterEnv = this.nodeBuilder = this._content = null;
     this.anonymousContentDocument = null;
     this.anonymousContentGlobal = null;
 
     this._removeAllListeners();
   },
 
   _insert: function () {
     let doc = this.highlighterEnv.document;
-    // Insert the content node only if the document:
-    // * is loaded (navigate event will fire once it is),
-    // * still exists,
-    // * isn't in XUL.
-    if (doc.readyState == "uninitialized" ||
-        !doc.documentElement ||
-        isXUL(this.highlighterEnv.window)) {
+    // Wait for DOMContentLoaded before injecting the anonymous content.
+    if (doc.readyState != "interactive" && doc.readyState != "complete") {
+      doc.addEventListener("DOMContentLoaded", this._insert.bind(this),
+                           { once: true });
+      return;
+    }
+    // Reject XUL documents. Check that after DOMContentLoaded as we query
+    // documentElement which is only available after this event.
+    if (isXUL(this.highlighterEnv.window)) {
       return;
     }
 
     // For now highlighters.css is injected in content as a ua sheet because
     // <style scoped> doesn't work inside anonymous content (see bug 1086532).
     // If it did, highlighters.css would be injected as an anonymous content
     // node using CanvasFrameAnonymousContentHelper instead.
     installHelperSheet(this.highlighterEnv.window,
@@ -295,17 +297,17 @@ CanvasFrameAnonymousContentHelper.protot
     // It was stated that hidden documents don't accept
     // `insertAnonymousContent` calls yet. That doesn't seems the case anymore,
     // at least on desktop. Therefore, removing the code that was dealing with
     // that scenario, fixes when we're adding anonymous content in a tab that
     // is not the active one (see bug 1260043 and bug 1260044)
     this._content = doc.insertAnonymousContent(node);
   },
 
-  _onNavigate: function (e, {isTopLevel}) {
+  _onWindowReady: function (e, {isTopLevel}) {
     if (isTopLevel) {
       this._removeAllListeners();
       this._insert();
       this.anonymousContentDocument = this.highlighterEnv.document;
     }
   },
 
   getTextContentForElement: function (id) {
--- a/devtools/server/actors/inspector.js
+++ b/devtools/server/actors/inspector.js
@@ -790,17 +790,17 @@ var WalkerActor = protocol.ActorClassWit
     // list contains orphaned nodes that were so retained.
     this._retainedOrphans = new Set();
 
     this.onMutations = this.onMutations.bind(this);
     this.onFrameLoad = this.onFrameLoad.bind(this);
     this.onFrameUnload = this.onFrameUnload.bind(this);
 
     events.on(tabActor, "will-navigate", this.onFrameUnload);
-    events.on(tabActor, "navigate", this.onFrameLoad);
+    events.on(tabActor, "window-ready", this.onFrameLoad);
 
     // Ensure that the root document node actor is ready and
     // managed.
     this.rootNode = this.document();
 
     this.layoutChangeObserver = getLayoutChangesObserver(this.tabActor);
     this._onReflows = this._onReflows.bind(this);
     this.layoutChangeObserver.on("reflows", this._onReflows);
@@ -881,17 +881,17 @@ var WalkerActor = protocol.ActorClassWit
       this.rootDoc = null;
       this.rootNode = null;
       this.layoutHelpers = null;
       this._orphaned = null;
       this._retainedOrphans = null;
       this._refMap = null;
 
       events.off(this.tabActor, "will-navigate", this.onFrameUnload);
-      events.off(this.tabActor, "navigate", this.onFrameLoad);
+      events.off(this.tabActor, "window-ready", this.onFrameLoad);
 
       this.onFrameLoad = null;
       this.onFrameUnload = null;
 
       this.walkerSearch.destroy();
 
       this.layoutChangeObserver.off("reflows", this._onReflows);
       this.layoutChangeObserver.off("resize", this._onResize);
@@ -2342,16 +2342,23 @@ var WalkerActor = protocol.ActorClassWit
       type: "inlineTextChild",
       target: parentActor.actorID,
       inlineTextChild:
         inlineTextChild ? inlineTextChild.form() : undefined
     });
   },
 
   onFrameLoad: function ({ window, isTopLevel }) {
+    let { readyState } = window.document;
+    if (readyState != "interactive" && readyState != "complete") {
+      window.addEventListener("DOMContentLoaded",
+        this.onFrameLoad.bind(this, { window, isTopLevel }),
+        { once: true });
+      return;
+    }
     if (isTopLevel) {
       // If we initialize the inspector while the document is loading,
       // we may already have a root document set in the constructor.
       if (this.rootDoc && !Cu.isDeadWrapper(this.rootDoc) &&
           this.rootDoc.defaultView) {
         this.onFrameUnload({ window: this.rootDoc.defaultView });
       }
       this.rootDoc = window.document;
--- a/dom/media/ADTSDemuxer.cpp
+++ b/dom/media/ADTSDemuxer.cpp
@@ -428,17 +428,17 @@ ADTSTrackDemuxer::Init()
 
 UniquePtr<TrackInfo>
 ADTSTrackDemuxer::GetInfo() const
 {
   return mInfo->Clone();
 }
 
 RefPtr<ADTSTrackDemuxer::SeekPromise>
-ADTSTrackDemuxer::Seek(media::TimeUnit aTime)
+ADTSTrackDemuxer::Seek(const media::TimeUnit& aTime)
 {
   // Efficiently seek to the position.
   FastSeek(aTime);
   // Correct seek position by scanning the next frames.
   const media::TimeUnit seekTime = ScanUntil(aTime);
 
   return SeekPromise::CreateAndResolve(seekTime, __func__);
 }
@@ -550,17 +550,17 @@ ADTSTrackDemuxer::Reset()
   MOZ_ASSERT(mParser);
   if (mParser) {
     mParser->Reset();
   }
   FastSeek(media::TimeUnit());
 }
 
 RefPtr<ADTSTrackDemuxer::SkipAccessPointPromise>
-ADTSTrackDemuxer::SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold)
+ADTSTrackDemuxer::SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold)
 {
   // Will not be called for audio-only resources.
   return SkipAccessPointPromise::CreateAndReject(
     SkipFailureHolder(NS_ERROR_DOM_MEDIA_DEMUXER_ERR, 0), __func__);
 }
 
 int64_t
 ADTSTrackDemuxer::GetResourceOffset() const
--- a/dom/media/ADTSDemuxer.h
+++ b/dom/media/ADTSDemuxer.h
@@ -55,21 +55,21 @@ public:
   media::TimeUnit Duration() const;
 
   // Returns the estimated duration up to the given frame number,
   // or a 0-duration if unknown.
   media::TimeUnit Duration(int64_t aNumFrames) const;
 
   // MediaTrackDemuxer interface.
   UniquePtr<TrackInfo> GetInfo() const override;
-  RefPtr<SeekPromise> Seek(media::TimeUnit aTime) override;
+  RefPtr<SeekPromise> Seek(const media::TimeUnit& aTime) override;
   RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples = 1) override;
   void Reset() override;
   RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(
-    media::TimeUnit aTimeThreshold) override;
+    const media::TimeUnit& aTimeThreshold) override;
   int64_t GetResourceOffset() const override;
   media::TimeIntervals GetBuffered() override;
 
 private:
   // Destructor.
   ~ADTSTrackDemuxer();
 
   // Fast approximate seeking to given time.
--- a/dom/media/MP3Demuxer.cpp
+++ b/dom/media/MP3Demuxer.cpp
@@ -180,17 +180,17 @@ MP3TrackDemuxer::VBRInfo() const {
 }
 
 UniquePtr<TrackInfo>
 MP3TrackDemuxer::GetInfo() const {
   return mInfo->Clone();
 }
 
 RefPtr<MP3TrackDemuxer::SeekPromise>
-MP3TrackDemuxer::Seek(TimeUnit aTime) {
+MP3TrackDemuxer::Seek(const TimeUnit& aTime) {
   // Efficiently seek to the position.
   FastSeek(aTime);
   // Correct seek position by scanning the next frames.
   const TimeUnit seekTime = ScanUntil(aTime);
 
   return SeekPromise::CreateAndResolve(seekTime, __func__);
 }
 
@@ -309,17 +309,17 @@ void
 MP3TrackDemuxer::Reset() {
   MP3LOG("Reset()");
 
   FastSeek(TimeUnit());
   mParser.Reset();
 }
 
 RefPtr<MP3TrackDemuxer::SkipAccessPointPromise>
-MP3TrackDemuxer::SkipToNextRandomAccessPoint(TimeUnit aTimeThreshold) {
+MP3TrackDemuxer::SkipToNextRandomAccessPoint(const TimeUnit& aTimeThreshold) {
   // Will not be called for audio-only resources.
   return SkipAccessPointPromise::CreateAndReject(
     SkipFailureHolder(NS_ERROR_DOM_MEDIA_DEMUXER_ERR, 0), __func__);
 }
 
 int64_t
 MP3TrackDemuxer::GetResourceOffset() const {
   return mOffset;
--- a/dom/media/MP3Demuxer.h
+++ b/dom/media/MP3Demuxer.h
@@ -378,21 +378,21 @@ public:
   const FrameParser::Frame& LastFrame() const;
   RefPtr<MediaRawData> DemuxSample();
 
   const ID3Parser::ID3Header& ID3Header() const;
   const FrameParser::VBRHeader& VBRInfo() const;
 
   // MediaTrackDemuxer interface.
   UniquePtr<TrackInfo> GetInfo() const override;
-  RefPtr<SeekPromise> Seek(media::TimeUnit aTime) override;
+  RefPtr<SeekPromise> Seek(const media::TimeUnit& aTime) override;
   RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples = 1) override;
   void Reset() override;
   RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(
-    media::TimeUnit aTimeThreshold) override;
+    const media::TimeUnit& aTimeThreshold) override;
   int64_t GetResourceOffset() const override;
   media::TimeIntervals GetBuffered() override;
 
 private:
   // Destructor.
   ~MP3TrackDemuxer() {}
 
   // Fast approximate seeking to given time.
--- a/dom/media/MediaDataDemuxer.h
+++ b/dom/media/MediaDataDemuxer.h
@@ -127,17 +127,17 @@ public:
   // The TrackInfo returned will be:
   // TrackInfo::kVideoTrack -> VideoInfo.
   // TrackInfo::kAudioTrack -> AudioInfo.
   // respectively.
   virtual UniquePtr<TrackInfo> GetInfo() const = 0;
 
   // Seeks to aTime. Upon success, SeekPromise will be resolved with the
   // actual time seeked to. Typically the random access point time
-  virtual RefPtr<SeekPromise> Seek(media::TimeUnit aTime) = 0;
+  virtual RefPtr<SeekPromise> Seek(const media::TimeUnit& aTime) = 0;
 
   // Returns the next aNumSamples sample(s) available.
   // If only a lesser amount of samples is available, only those will be
   // returned.
   // A aNumSamples value of -1 indicates to return all remaining samples.
   // A video sample is typically made of a single video frame while an audio
   // sample will contains multiple audio frames.
   virtual RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples = 1) = 0;
@@ -171,17 +171,18 @@ public:
     return NS_ERROR_NOT_IMPLEMENTED;
   }
 
   // Skip frames until the next Random Access Point located after
   // aTimeThreshold.
   // The first frame returned by the next call to GetSamples() will be the
   // first random access point found after aTimeThreshold.
   // Upon success, returns the number of frames skipped.
-  virtual RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold) = 0;
+  virtual RefPtr<SkipAccessPointPromise>
+  SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold) = 0;
 
   // Gets the resource's offset used for the last Seek() or GetSample().
   // A negative value indicates that this functionality isn't supported.
   virtual int64_t GetResourceOffset() const
   {
     return -1;
   }
 
--- a/dom/media/MediaDecoderReader.h
+++ b/dom/media/MediaDecoderReader.h
@@ -159,17 +159,17 @@ public:
 
   // Fills aInfo with the latest cached data required to present the media,
   // ReadUpdatedMetadata will always be called once ReadMetadata has succeeded.
   virtual void ReadUpdatedMetadata(MediaInfo* aInfo) {}
 
   // Moves the decode head to aTime microseconds. aEndTime denotes the end
   // time of the media in usecs. This is only needed for OggReader, and should
   // probably be removed somehow.
-  virtual RefPtr<SeekPromise> Seek(SeekTarget aTarget, int64_t aEndTime) = 0;
+  virtual RefPtr<SeekPromise> Seek(const SeekTarget& aTarget, int64_t aEndTime) = 0;
 
   virtual void SetCDMProxy(CDMProxy* aProxy) {}
 
   // Tell the reader that the data decoded are not for direct playback, so it
   // can accept more files, in particular those which have more channels than
   // available in the audio output.
   void SetIgnoreAudioOutputFormat()
   {
--- a/dom/media/MediaDecoderReaderWrapper.cpp
+++ b/dom/media/MediaDecoderReaderWrapper.cpp
@@ -117,23 +117,26 @@ MediaDecoderReaderWrapper::IsWaitingAudi
 bool
 MediaDecoderReaderWrapper::IsWaitingVideoData() const
 {
   MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
   return mVideoWaitRequest.Exists();
 }
 
 RefPtr<MediaDecoderReader::SeekPromise>
-MediaDecoderReaderWrapper::Seek(SeekTarget aTarget, media::TimeUnit aEndTime)
+MediaDecoderReaderWrapper::Seek(const SeekTarget& aTarget,
+                                const media::TimeUnit& aEndTime)
 {
   MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
-  aTarget.SetTime(aTarget.GetTime() + StartTime());
-  return InvokeAsync(mReader->OwnerThread(), mReader.get(), __func__,
-                     &MediaDecoderReader::Seek, aTarget,
-                     aEndTime.ToMicroseconds());
+  SeekTarget adjustedTarget = aTarget;
+  adjustedTarget.SetTime(adjustedTarget.GetTime() + StartTime());
+  return InvokeAsync<SeekTarget&&, int64_t>(
+           mReader->OwnerThread(), mReader.get(), __func__,
+           &MediaDecoderReader::Seek,
+           Move(adjustedTarget), aEndTime.ToMicroseconds());
 }
 
 void
 MediaDecoderReaderWrapper::WaitForData(MediaData::Type aType)
 {
   MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
 
   auto p = InvokeAsync(mReader->OwnerThread(), mReader.get(), __func__,
--- a/dom/media/MediaDecoderReaderWrapper.h
+++ b/dom/media/MediaDecoderReaderWrapper.h
@@ -63,17 +63,18 @@ public:
   // NOTE: please set callbacks before invoking WaitForData()!
   void WaitForData(MediaData::Type aType);
 
   bool IsRequestingAudioData() const;
   bool IsRequestingVideoData() const;
   bool IsWaitingAudioData() const;
   bool IsWaitingVideoData() const;
 
-  RefPtr<SeekPromise> Seek(SeekTarget aTarget, media::TimeUnit aEndTime);
+  RefPtr<SeekPromise> Seek(const SeekTarget& aTarget,
+                           const media::TimeUnit& aEndTime);
   RefPtr<BufferedUpdatePromise> UpdateBufferedWithPromise();
   RefPtr<ShutdownPromise> Shutdown();
 
   void ReleaseResources();
   void ResetDecode(TrackSet aTracks);
 
   nsresult Init() { return mReader->Init(); }
   bool IsWaitForDataSupported() const { return mReader->IsWaitForDataSupported(); }
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -2366,17 +2366,17 @@ void MediaDecoderStateMachine::BufferedR
     media::TimeUnit end{mBuffered.Ref().GetEnd(&exists)};
     if (exists) {
       mObservedDuration = std::max(mObservedDuration.Ref(), end);
     }
   }
 }
 
 RefPtr<MediaDecoder::SeekPromise>
-MediaDecoderStateMachine::Seek(SeekTarget aTarget)
+MediaDecoderStateMachine::Seek(const SeekTarget& aTarget)
 {
   MOZ_ASSERT(OnTaskQueue());
 
   if (IsShutdown()) {
     return MediaDecoder::SeekPromise::CreateAndReject(/* aIgnored = */ true, __func__);
   }
 
   // We need to be able to seek in some way
@@ -2391,20 +2391,21 @@ MediaDecoderStateMachine::Seek(SeekTarge
   }
 
   MOZ_ASSERT(mDuration.Ref().isSome(), "We should have got duration already");
 
   return mStateObj->HandleSeek(aTarget);
 }
 
 RefPtr<MediaDecoder::SeekPromise>
-MediaDecoderStateMachine::InvokeSeek(SeekTarget aTarget)
+MediaDecoderStateMachine::InvokeSeek(const SeekTarget& aTarget)
 {
-  return InvokeAsync(OwnerThread(), this, __func__,
-                     &MediaDecoderStateMachine::Seek, aTarget);
+  return InvokeAsync<SeekTarget&&>(
+           OwnerThread(), this, __func__,
+           &MediaDecoderStateMachine::Seek, aTarget);
 }
 
 void MediaDecoderStateMachine::StopMediaSink()
 {
   MOZ_ASSERT(OnTaskQueue());
   if (mMediaSink->IsStarted()) {
     DECODER_LOG("Stop MediaSink");
     mAudibleListener.DisconnectIfExists();
--- a/dom/media/MediaDecoderStateMachine.h
+++ b/dom/media/MediaDecoderStateMachine.h
@@ -167,17 +167,17 @@ public:
 
   void DumpDebugInfo();
 
   void AddOutputStream(ProcessedMediaStream* aStream, bool aFinishWhenEnded);
   // Remove an output stream added with AddOutputStream.
   void RemoveOutputStream(MediaStream* aStream);
 
   // Seeks to the decoder to aTarget asynchronously.
-  RefPtr<MediaDecoder::SeekPromise> InvokeSeek(SeekTarget aTarget);
+  RefPtr<MediaDecoder::SeekPromise> InvokeSeek(const SeekTarget& aTarget);
 
   void DispatchSetPlaybackRate(double aPlaybackRate)
   {
     OwnerThread()->DispatchStateChange(NewRunnableMethod<double>(
       this, &MediaDecoderStateMachine::SetPlaybackRate, aPlaybackRate));
   }
 
   RefPtr<ShutdownPromise> BeginShutdown();
@@ -279,17 +279,17 @@ private:
 
   // Initialization that needs to happen on the task queue. This is the first
   // task that gets run on the task queue, and is dispatched from the MDSM
   // constructor immediately after the task queue is created.
   void InitializationTask(MediaDecoder* aDecoder);
 
   void SetAudioCaptured(bool aCaptured);
 
-  RefPtr<MediaDecoder::SeekPromise> Seek(SeekTarget aTarget);
+  RefPtr<MediaDecoder::SeekPromise> Seek(const SeekTarget& aTarget);
 
   RefPtr<ShutdownPromise> Shutdown();
 
   RefPtr<ShutdownPromise> FinishShutdown();
 
   // Update the playback position. This can result in a timeupdate event
   // and an invalidate of the frame being dispatched asynchronously if
   // there is no such event currently queued.
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -1923,17 +1923,17 @@ MediaFormatReader::OnVideoSkipFailed(Med
       break;
     default:
       NotifyError(TrackType::kVideoTrack, aFailure.mFailure);
       break;
   }
 }
 
 RefPtr<MediaDecoderReader::SeekPromise>
-MediaFormatReader::Seek(SeekTarget aTarget, int64_t aUnused)
+MediaFormatReader::Seek(const SeekTarget& aTarget, int64_t aUnused)
 {
   MOZ_ASSERT(OnTaskQueue());
 
   LOG("aTarget=(%lld)", aTarget.GetTime().ToMicroseconds());
 
   MOZ_DIAGNOSTIC_ASSERT(mSeekPromise.IsEmpty());
   MOZ_DIAGNOSTIC_ASSERT(!mVideo.HasPromise());
   MOZ_DIAGNOSTIC_ASSERT(aTarget.IsVideoOnly() || !mAudio.HasPromise());
@@ -1945,17 +1945,17 @@ MediaFormatReader::Seek(SeekTarget aTarg
     LOG("Seek() END (Unseekable)");
     return SeekPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
   }
 
   if (mShutdown) {
     return SeekPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
   }
 
-  SetSeekTarget(Move(aTarget));
+  SetSeekTarget(aTarget);
 
   RefPtr<SeekPromise> p = mSeekPromise.Ensure(__func__);
 
   ScheduleSeek();
 
   return p;
 }
 
--- a/dom/media/MediaFormatReader.h
+++ b/dom/media/MediaFormatReader.h
@@ -43,17 +43,17 @@ public:
 
   RefPtr<MediaDataPromise> RequestAudioData() override;
 
   RefPtr<MetadataPromise> AsyncReadMetadata() override;
 
   void ReadUpdatedMetadata(MediaInfo* aInfo) override;
 
   RefPtr<SeekPromise>
-  Seek(SeekTarget aTarget, int64_t aUnused) override;
+  Seek(const SeekTarget& aTarget, int64_t aUnused) override;
 
 protected:
   void NotifyDataArrivedInternal() override;
 
 public:
   media::TimeIntervals GetBuffered() override;
 
   RefPtr<BufferedUpdatePromise> UpdateBufferedWithPromise() override;
--- a/dom/media/android/AndroidMediaReader.cpp
+++ b/dom/media/android/AndroidMediaReader.cpp
@@ -309,17 +309,17 @@ bool AndroidMediaReader::DecodeAudioData
                               frames,
                               source.mAudioChannels,
                               MPCopy(static_cast<uint8_t *>(source.mData),
                                      source.mSize,
                                      source.mAudioChannels));
 }
 
 RefPtr<MediaDecoderReader::SeekPromise>
-AndroidMediaReader::Seek(SeekTarget aTarget, int64_t aEndTime)
+AndroidMediaReader::Seek(const SeekTarget& aTarget, int64_t aEndTime)
 {
   MOZ_ASSERT(OnTaskQueue());
 
   RefPtr<SeekPromise> p = mSeekPromise.Ensure(__func__);
   if (mHasAudio && mHasVideo) {
     // The decoder seeks/demuxes audio and video streams separately. So if
     // we seek both audio and video to aTarget, the audio stream can typically
     // seek closer to the seek target, since typically every audio block is
--- a/dom/media/android/AndroidMediaReader.h
+++ b/dom/media/android/AndroidMediaReader.h
@@ -43,17 +43,17 @@ public:
 
   nsresult ResetDecode(TrackSet aTracks = TrackSet(TrackInfo::kAudioTrack,
                                                    TrackInfo::kVideoTrack)) override;
 
   bool DecodeAudioData() override;
   bool DecodeVideoFrame(bool &aKeyframeSkip, int64_t aTimeThreshold) override;
 
   nsresult ReadMetadata(MediaInfo* aInfo, MetadataTags** aTags) override;
-  RefPtr<SeekPromise> Seek(SeekTarget aTarget, int64_t aEndTime) override;
+  RefPtr<SeekPromise> Seek(const SeekTarget& aTarget, int64_t aEndTime) override;
 
   RefPtr<ShutdownPromise> Shutdown() override;
 
   class ImageBufferCallback : public MPAPI::BufferCallback {
     typedef mozilla::layers::Image Image;
 
   public:
     ImageBufferCallback(mozilla::layers::ImageContainer *aImageContainer);
--- a/dom/media/directshow/DirectShowReader.cpp
+++ b/dom/media/directshow/DirectShowReader.cpp
@@ -315,17 +315,17 @@ bool
 DirectShowReader::DecodeVideoFrame(bool &aKeyframeSkip,
                                    int64_t aTimeThreshold)
 {
   MOZ_ASSERT(OnTaskQueue());
   return false;
 }
 
 RefPtr<MediaDecoderReader::SeekPromise>
-DirectShowReader::Seek(SeekTarget aTarget, int64_t aEndTime)
+DirectShowReader::Seek(const SeekTarget& aTarget, int64_t aEndTime)
 {
   nsresult res = SeekInternal(aTarget.GetTime().ToMicroseconds());
   if (NS_FAILED(res)) {
     return SeekPromise::CreateAndReject(res, __func__);
   } else {
     return SeekPromise::CreateAndResolve(aTarget.GetTime(), __func__);
   }
 }
--- a/dom/media/directshow/DirectShowReader.h
+++ b/dom/media/directshow/DirectShowReader.h
@@ -53,17 +53,17 @@ public:
   bool DecodeAudioData() override;
   bool DecodeVideoFrame(bool &aKeyframeSkip,
                         int64_t aTimeThreshold) override;
 
   nsresult ReadMetadata(MediaInfo* aInfo,
                         MetadataTags** aTags) override;
 
   RefPtr<SeekPromise>
-  Seek(SeekTarget aTarget, int64_t aEndTime) override;
+  Seek(const SeekTarget& aTarget, int64_t aEndTime) override;
 
   static const GUID CLSID_MPEG_LAYER_3_DECODER_FILTER;
 
 private:
   // Notifies the filter graph that playback is complete. aStatus is
   // the code to send to the filter graph. Always returns false, so
   // that we can just "return Finish()" from DecodeAudioData().
   bool Finish(HRESULT aStatus);
--- a/dom/media/flac/FlacDemuxer.cpp
+++ b/dom/media/flac/FlacDemuxer.cpp
@@ -717,17 +717,17 @@ bool
 FlacTrackDemuxer::IsSeekable() const
 {
   // For now we only allow seeking if a STREAMINFO block was found and with
   // a known number of samples (duration is set).
   return mParser->Info().IsValid() && mParser->Info().mDuration;
 }
 
 RefPtr<FlacTrackDemuxer::SeekPromise>
-FlacTrackDemuxer::Seek(TimeUnit aTime)
+FlacTrackDemuxer::Seek(const TimeUnit& aTime)
 {
   // Efficiently seek to the position.
   FastSeek(aTime);
   // Correct seek position by scanning the next frames.
   const TimeUnit seekTime = ScanUntil(aTime);
 
   return SeekPromise::CreateAndResolve(seekTime, __func__);
 }
@@ -890,17 +890,17 @@ FlacTrackDemuxer::Reset()
     mSource.Seek(SEEK_SET, mParser->FirstFrame().Offset());
   } else {
     mSource.Seek(SEEK_SET, 0);
   }
   mParser->EndFrameSession();
 }
 
 RefPtr<FlacTrackDemuxer::SkipAccessPointPromise>
-FlacTrackDemuxer::SkipToNextRandomAccessPoint(TimeUnit aTimeThreshold)
+FlacTrackDemuxer::SkipToNextRandomAccessPoint(const TimeUnit& aTimeThreshold)
 {
   // Will not be called for audio-only resources.
   return SkipAccessPointPromise::CreateAndReject(
     SkipFailureHolder(NS_ERROR_DOM_MEDIA_DEMUXER_ERR, 0), __func__);
 }
 
 int64_t
 FlacTrackDemuxer::GetResourceOffset() const
--- a/dom/media/flac/FlacDemuxer.h
+++ b/dom/media/flac/FlacDemuxer.h
@@ -45,23 +45,23 @@ public:
   explicit FlacTrackDemuxer(MediaResource* aSource);
 
   // Initializes the track demuxer by reading the first frame for meta data.
   // Returns initialization success state.
   bool Init();
 
   // MediaTrackDemuxer interface.
   UniquePtr<TrackInfo> GetInfo() const override;
-  RefPtr<SeekPromise> Seek(media::TimeUnit aTime) override;
+  RefPtr<SeekPromise> Seek(const media::TimeUnit& aTime) override;
   RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples = 1) override;
   void Reset() override;
   int64_t GetResourceOffset() const override;
   media::TimeIntervals GetBuffered() override;
   RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(
-    media::TimeUnit aTimeThreshold) override;
+    const media::TimeUnit& aTimeThreshold) override;
 
   bool IsSeekable() const;
 
 private:
   // Destructor.
   ~FlacTrackDemuxer();
 
   // Returns the estimated stream duration, or a 0-duration if unknown.
--- a/dom/media/fmp4/MP4Demuxer.cpp
+++ b/dom/media/fmp4/MP4Demuxer.cpp
@@ -36,25 +36,26 @@ class MP4TrackDemuxer : public MediaTrac
 {
 public:
   MP4TrackDemuxer(MP4Demuxer* aParent,
                   UniquePtr<TrackInfo>&& aInfo,
                   const nsTArray<mp4_demuxer::Index::Indice>& indices);
 
   UniquePtr<TrackInfo> GetInfo() const override;
 
-  RefPtr<SeekPromise> Seek(media::TimeUnit aTime) override;
+  RefPtr<SeekPromise> Seek(const media::TimeUnit& aTime) override;
 
   RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples = 1) override;
 
   void Reset() override;
 
   nsresult GetNextRandomAccessPoint(media::TimeUnit* aTime) override;
 
-  RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold) override;
+  RefPtr<SkipAccessPointPromise>
+  SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold) override;
 
   media::TimeIntervals GetBuffered() override;
 
   void BreakCycles() override;
 
 private:
   friend class MP4Demuxer;
   void NotifyDataArrived();
@@ -281,17 +282,17 @@ MP4TrackDemuxer::EnsureUpToDateIndex()
   if (NS_FAILED(rv)) {
     return;
   }
   mIndex->UpdateMoofIndex(byteRanges);
   mNeedReIndex = false;
 }
 
 RefPtr<MP4TrackDemuxer::SeekPromise>
-MP4TrackDemuxer::Seek(media::TimeUnit aTime)
+MP4TrackDemuxer::Seek(const media::TimeUnit& aTime)
 {
   int64_t seekTime = aTime.ToMicroseconds();
   mQueuedSample = nullptr;
 
   mIterator->Seek(seekTime);
 
   // Check what time we actually seeked to.
   RefPtr<MediaRawData> sample;
@@ -438,17 +439,17 @@ MP4TrackDemuxer::GetNextRandomAccessPoin
       media::TimeUnit::FromMicroseconds(std::numeric_limits<int64_t>::max());
   } else {
     *aTime = mNextKeyframeTime.value();
   }
   return NS_OK;
 }
 
 RefPtr<MP4TrackDemuxer::SkipAccessPointPromise>
-MP4TrackDemuxer::SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold)
+MP4TrackDemuxer::SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold)
 {
   mQueuedSample = nullptr;
   // Loop until we reach the next keyframe after the threshold.
   uint32_t parsed = 0;
   bool found = false;
   RefPtr<MediaRawData> sample;
   while (!found && (sample = GetNextSample())) {
     parsed++;
--- a/dom/media/gmp/GMPParent.cpp
+++ b/dom/media/gmp/GMPParent.cpp
@@ -926,22 +926,23 @@ RefPtr<GenericPromise>
 GMPParent::ReadChromiumManifestFile(nsIFile* aFile)
 {
   nsAutoCString json;
   if (!ReadIntoString(aFile, json, 5 * 1024)) {
     return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
   }
 
   // DOM JSON parsing needs to run on the main thread.
-  return InvokeAsync(AbstractThread::MainThread(), this, __func__,
+  return InvokeAsync<nsString&&>(
+    AbstractThread::MainThread(), this, __func__,
     &GMPParent::ParseChromiumManifest, NS_ConvertUTF8toUTF16(json));
 }
 
 RefPtr<GenericPromise>
-GMPParent::ParseChromiumManifest(nsString aJSON)
+GMPParent::ParseChromiumManifest(const nsAString& aJSON)
 {
   LOGD("%s: for '%s'", __FUNCTION__, NS_LossyConvertUTF16toASCII(aJSON).get());
 
   MOZ_ASSERT(NS_IsMainThread());
   mozilla::dom::WidevineCDMManifest m;
   if (!m.Init(aJSON)) {
     return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
   }
--- a/dom/media/gmp/GMPParent.h
+++ b/dom/media/gmp/GMPParent.h
@@ -156,17 +156,17 @@ public:
 
 private:
   ~GMPParent();
 
   RefPtr<GeckoMediaPluginServiceParent> mService;
   bool EnsureProcessLoaded();
   RefPtr<GenericPromise> ReadGMPMetaData();
   RefPtr<GenericPromise> ReadGMPInfoFile(nsIFile* aFile);
-  RefPtr<GenericPromise> ParseChromiumManifest(nsString aJSON); // Main thread.
+  RefPtr<GenericPromise> ParseChromiumManifest(const nsAString& aJSON); // Main thread.
   RefPtr<GenericPromise> ReadChromiumManifestFile(nsIFile* aFile); // GMP thread.
 #ifdef MOZ_CRASHREPORTER
   void WriteExtraDataForMinidump(CrashReporter::AnnotationTable& notes);
   void GetCrashID(nsString& aResult);
 #endif
   void ActorDestroy(ActorDestroyReason aWhy) override;
 
   PCrashReporterParent* AllocPCrashReporterParent(const NativeThreadId& aThread) override;
--- a/dom/media/gmp/GMPServiceParent.cpp
+++ b/dom/media/gmp/GMPServiceParent.cpp
@@ -901,17 +901,19 @@ GeckoMediaPluginServiceParent::AsyncAddP
 {
   RefPtr<AbstractThread> thread(GetAbstractGMPThread());
   if (!thread) {
     return GenericPromise::CreateAndReject(NS_ERROR_FAILURE, __func__);
   }
 
   nsString dir(aDirectory);
   RefPtr<GeckoMediaPluginServiceParent> self = this;
-  return InvokeAsync(thread, this, __func__, &GeckoMediaPluginServiceParent::AddOnGMPThread, dir)
+  return InvokeAsync<nsString&&>(
+           thread, this, __func__,
+           &GeckoMediaPluginServiceParent::AddOnGMPThread, dir)
     ->Then(AbstractThread::MainThread(), __func__,
       [dir, self]() -> void {
         LOGD(("GeckoMediaPluginServiceParent::AsyncAddPluginDirectory %s succeeded",
               NS_ConvertUTF16toUTF8(dir).get()));
         MOZ_ASSERT(NS_IsMainThread());
         self->UpdateContentProcessGMPCapabilities();
       },
       [dir]() -> void {
--- a/dom/media/mediasource/MediaSourceDemuxer.cpp
+++ b/dom/media/mediasource/MediaSourceDemuxer.cpp
@@ -30,32 +30,27 @@ MediaSourceDemuxer::MediaSourceDemuxer()
 
 // Due to inaccuracies in determining buffer end
 // frames (Bug 1065207). This value is based on videos seen in the wild.
 const TimeUnit MediaSourceDemuxer::EOS_FUZZ = media::TimeUnit::FromMicroseconds(500000);
 
 RefPtr<MediaSourceDemuxer::InitPromise>
 MediaSourceDemuxer::Init()
 {
-  return InvokeAsync(GetTaskQueue(), this, __func__,
-                     &MediaSourceDemuxer::AttemptInit);
-}
+  RefPtr<MediaSourceDemuxer> self = this;
+  return InvokeAsync(GetTaskQueue(), __func__,
+    [self](){
+      if (self->ScanSourceBuffersForContent()) {
+        return InitPromise::CreateAndResolve(NS_OK, __func__);
+      }
 
-RefPtr<MediaSourceDemuxer::InitPromise>
-MediaSourceDemuxer::AttemptInit()
-{
-  MOZ_ASSERT(OnTaskQueue());
+      RefPtr<InitPromise> p = self->mInitPromise.Ensure(__func__);
 
-  if (ScanSourceBuffersForContent()) {
-    return InitPromise::CreateAndResolve(NS_OK, __func__);
-  }
-
-  RefPtr<InitPromise> p = mInitPromise.Ensure(__func__);
-
-  return p;
+      return p;
+    });
 }
 
 void
 MediaSourceDemuxer::AddSizeOfResources(MediaSourceDecoder::ResourceSizes* aSizes)
 {
   MOZ_ASSERT(NS_IsMainThread());
 
   // NB: The track buffers must only be accessed on the TaskQueue.
@@ -304,21 +299,22 @@ MediaSourceTrackDemuxer::MediaSourceTrac
 
 UniquePtr<TrackInfo>
 MediaSourceTrackDemuxer::GetInfo() const
 {
   return mParent->GetTrackInfo(mType)->Clone();
 }
 
 RefPtr<MediaSourceTrackDemuxer::SeekPromise>
-MediaSourceTrackDemuxer::Seek(media::TimeUnit aTime)
+MediaSourceTrackDemuxer::Seek(const media::TimeUnit& aTime)
 {
   MOZ_ASSERT(mParent, "Called after BreackCycle()");
-  return InvokeAsync(mParent->GetTaskQueue(), this, __func__,
-                     &MediaSourceTrackDemuxer::DoSeek, aTime);
+  return InvokeAsync<media::TimeUnit&&>(
+           mParent->GetTaskQueue(), this, __func__,
+           &MediaSourceTrackDemuxer::DoSeek, aTime);
 }
 
 RefPtr<MediaSourceTrackDemuxer::SamplesPromise>
 MediaSourceTrackDemuxer::GetSamples(int32_t aNumSamples)
 {
   MOZ_ASSERT(mParent, "Called after BreackCycle()");
   return InvokeAsync(mParent->GetTaskQueue(), this, __func__,
                      &MediaSourceTrackDemuxer::DoGetSamples, aNumSamples);
@@ -348,21 +344,22 @@ nsresult
 MediaSourceTrackDemuxer::GetNextRandomAccessPoint(media::TimeUnit* aTime)
 {
   MonitorAutoLock mon(mMonitor);
   *aTime = mNextRandomAccessPoint;
   return NS_OK;
 }
 
 RefPtr<MediaSourceTrackDemuxer::SkipAccessPointPromise>
-MediaSourceTrackDemuxer::SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold)
+MediaSourceTrackDemuxer::SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold)
 {
-  return InvokeAsync(mParent->GetTaskQueue(), this, __func__,
-                     &MediaSourceTrackDemuxer::DoSkipToNextRandomAccessPoint,
-                     aTimeThreshold);
+  return InvokeAsync<media::TimeUnit&&>(
+           mParent->GetTaskQueue(), this, __func__,
+           &MediaSourceTrackDemuxer::DoSkipToNextRandomAccessPoint,
+           aTimeThreshold);
 }
 
 media::TimeIntervals
 MediaSourceTrackDemuxer::GetBuffered()
 {
   return mManager->Buffered();
 }
 
@@ -374,17 +371,17 @@ MediaSourceTrackDemuxer::BreakCycles()
     NS_NewRunnableFunction([self]() {
       self->mParent = nullptr;
       self->mManager = nullptr;
     } );
   mParent->GetTaskQueue()->Dispatch(task.forget());
 }
 
 RefPtr<MediaSourceTrackDemuxer::SeekPromise>
-MediaSourceTrackDemuxer::DoSeek(media::TimeUnit aTime)
+MediaSourceTrackDemuxer::DoSeek(const media::TimeUnit& aTime)
 {
   TimeIntervals buffered = mManager->Buffered(mType);
   // Fuzz factor represents a +/- threshold. So when seeking it allows the gap
   // to be twice as big as the fuzz value. We only want to allow EOS_FUZZ gap.
   buffered.SetFuzz(MediaSourceDemuxer::EOS_FUZZ / 2);
   TimeUnit seekTime = std::max(aTime - mPreRoll, TimeUnit::FromMicroseconds(0));
 
   if (mManager->IsEnded() && seekTime >= buffered.GetEnd()) {
@@ -469,17 +466,17 @@ MediaSourceTrackDemuxer::DoGetSamples(in
     MonitorAutoLock mon(mMonitor);
     mNextRandomAccessPoint =
       mManager->GetNextRandomAccessPoint(mType, MediaSourceDemuxer::EOS_FUZZ);
   }
   return SamplesPromise::CreateAndResolve(samples, __func__);
 }
 
 RefPtr<MediaSourceTrackDemuxer::SkipAccessPointPromise>
-MediaSourceTrackDemuxer::DoSkipToNextRandomAccessPoint(media::TimeUnit aTimeThreadshold)
+MediaSourceTrackDemuxer::DoSkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreadshold)
 {
   uint32_t parsed = 0;
   // Ensure that the data we are about to skip to is still available.
   TimeIntervals buffered = mManager->Buffered(mType);
   buffered.SetFuzz(MediaSourceDemuxer::EOS_FUZZ / 2);
   if (buffered.ContainsWithStrictEnd(aTimeThreadshold)) {
     bool found;
     parsed = mManager->SkipToNextRandomAccessPoint(mType,
--- a/dom/media/mediasource/MediaSourceDemuxer.h
+++ b/dom/media/mediasource/MediaSourceDemuxer.h
@@ -59,17 +59,16 @@ public:
   // Gap allowed between frames.
   static const media::TimeUnit EOS_FUZZ;
 
 private:
   ~MediaSourceDemuxer();
   friend class MediaSourceTrackDemuxer;
   // Scan source buffers and update information.
   bool ScanSourceBuffersForContent();
-  RefPtr<InitPromise> AttemptInit();
   TrackBuffersManager* GetManager(TrackInfo::TrackType aType);
   TrackInfo* GetTrackInfo(TrackInfo::TrackType);
   void DoAttachSourceBuffer(TrackBuffersManager* aSourceBuffer);
   void DoDetachSourceBuffer(TrackBuffersManager* aSourceBuffer);
   bool OnTaskQueue()
   {
     return !GetTaskQueue() || GetTaskQueue()->IsCurrentThreadIn();
   }
@@ -92,39 +91,39 @@ class MediaSourceTrackDemuxer : public M
 {
 public:
   MediaSourceTrackDemuxer(MediaSourceDemuxer* aParent,
                           TrackInfo::TrackType aType,
                           TrackBuffersManager* aManager);
 
   UniquePtr<TrackInfo> GetInfo() const override;
 
-  RefPtr<SeekPromise> Seek(media::TimeUnit aTime) override;
+  RefPtr<SeekPromise> Seek(const media::TimeUnit& aTime) override;
 
   RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples = 1) override;
 
   void Reset() override;
 
   nsresult GetNextRandomAccessPoint(media::TimeUnit* aTime) override;
 
-  RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold) override;
+  RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold) override;
 
   media::TimeIntervals GetBuffered() override;
 
   void BreakCycles() override;
 
   bool GetSamplesMayBlock() const override
   {
     return false;
   }
 
 private:
-  RefPtr<SeekPromise> DoSeek(media::TimeUnit aTime);
+  RefPtr<SeekPromise> DoSeek(const media::TimeUnit& aTime);
   RefPtr<SamplesPromise> DoGetSamples(int32_t aNumSamples);
-  RefPtr<SkipAccessPointPromise> DoSkipToNextRandomAccessPoint(media::TimeUnit aTimeThreadshold);
+  RefPtr<SkipAccessPointPromise> DoSkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreadshold);
   already_AddRefed<MediaRawData> GetSample(MediaResult& aError);
   // Return the timestamp of the next keyframe after mLastSampleIndex.
   media::TimeUnit GetNextRandomAccessPoint();
 
   RefPtr<MediaSourceDemuxer> mParent;
   RefPtr<TrackBuffersManager> mManager;
   TrackInfo::TrackType mType;
   // Monitor protecting members below accessed from multiple threads.
--- a/dom/media/mediasource/SourceBufferTask.h
+++ b/dom/media/mediasource/SourceBufferTask.h
@@ -43,17 +43,17 @@ public:
 
 protected:
   virtual ~SourceBufferTask() {}
 };
 
 class AppendBufferTask : public SourceBufferTask {
 public:
   AppendBufferTask(MediaByteBuffer* aData,
-                   SourceBufferAttributes aAttributes)
+                   const SourceBufferAttributes& aAttributes)
   : mBuffer(aData)
   , mAttributes(aAttributes)
   {}
 
   static const Type sType = Type::AppendBuffer;
   Type GetType() const override { return Type::AppendBuffer; }
 
   RefPtr<MediaByteBuffer> mBuffer;
@@ -103,9 +103,9 @@ public:
 class DetachTask : public SourceBufferTask {
 public:
   static const Type sType = Type::Detach;
   Type GetType() const override { return Type::Detach; }
 };
 
 } // end mozilla namespace
 
-#endif
\ No newline at end of file
+#endif
--- a/dom/media/mediasource/TrackBuffersManager.cpp
+++ b/dom/media/mediasource/TrackBuffersManager.cpp
@@ -116,26 +116,24 @@ RefPtr<TrackBuffersManager::AppendPromis
 TrackBuffersManager::AppendData(MediaByteBuffer* aData,
                                 const SourceBufferAttributes& aAttributes)
 {
   MOZ_ASSERT(NS_IsMainThread());
   MSE_DEBUG("Appending %lld bytes", aData->Length());
 
   mEnded = false;
 
-  RefPtr<MediaByteBuffer> buffer = aData;
-
-  return InvokeAsync(GetTaskQueue(), this,
-                     __func__, &TrackBuffersManager::DoAppendData,
-                     buffer, aAttributes);
+  return InvokeAsync<RefPtr<MediaByteBuffer>, SourceBufferAttributes&&>(
+           GetTaskQueue(), this, __func__,
+           &TrackBuffersManager::DoAppendData, aData, aAttributes);
 }
 
 RefPtr<TrackBuffersManager::AppendPromise>
-TrackBuffersManager::DoAppendData(RefPtr<MediaByteBuffer> aData,
-                                  SourceBufferAttributes aAttributes)
+TrackBuffersManager::DoAppendData(MediaByteBuffer* aData,
+                                  const SourceBufferAttributes& aAttributes)
 {
   RefPtr<AppendBufferTask> task = new AppendBufferTask(aData, aAttributes);
   RefPtr<AppendPromise> p = task->mPromise.Ensure(__func__);
   QueueTask(task);
 
   return p;
 }
 
--- a/dom/media/mediasource/TrackBuffersManager.h
+++ b/dom/media/mediasource/TrackBuffersManager.h
@@ -168,18 +168,18 @@ public:
 
 private:
   typedef MozPromise<bool, MediaResult, /* IsExclusive = */ true> CodedFrameProcessingPromise;
 
   // for MediaSourceDemuxer::GetMozDebugReaderData
   friend class MediaSourceDemuxer;
   ~TrackBuffersManager();
   // All following functions run on the taskqueue.
-  RefPtr<AppendPromise> DoAppendData(RefPtr<MediaByteBuffer> aData,
-                                     SourceBufferAttributes aAttributes);
+  RefPtr<AppendPromise> DoAppendData(MediaByteBuffer* aData,
+                                     const SourceBufferAttributes& aAttributes);
   void ScheduleSegmentParserLoop();
   void SegmentParserLoop();
   void InitializationSegmentReceived();
   void ShutdownDemuxers();
   void CreateDemuxerforMIMEType();
   void ResetDemuxingState();
   void NeedMoreData();
   void RejectAppend(const MediaResult& aRejectValue, const char* aName);
--- a/dom/media/ogg/OggDemuxer.cpp
+++ b/dom/media/ogg/OggDemuxer.cpp
@@ -1455,17 +1455,17 @@ OggTrackDemuxer::~OggTrackDemuxer()
 
 UniquePtr<TrackInfo>
 OggTrackDemuxer::GetInfo() const
 {
   return mInfo->Clone();
 }
 
 RefPtr<OggTrackDemuxer::SeekPromise>
-OggTrackDemuxer::Seek(TimeUnit aTime)
+OggTrackDemuxer::Seek(const TimeUnit& aTime)
 {
   // Seeks to aTime. Upon success, SeekPromise will be resolved with the
   // actual time seeked to. Typically the random access point time
   mQueuedSample = nullptr;
   TimeUnit seekTime = aTime;
   if (mParent->SeekInternal(mType, aTime) == NS_OK) {
     RefPtr<MediaRawData> sample(NextSample());
 
@@ -1533,17 +1533,17 @@ OggTrackDemuxer::GetSamples(int32_t aNum
 void
 OggTrackDemuxer::Reset()
 {
   mParent->Reset(mType);
   mQueuedSample = nullptr;
 }
 
 RefPtr<OggTrackDemuxer::SkipAccessPointPromise>
-OggTrackDemuxer::SkipToNextRandomAccessPoint(TimeUnit aTimeThreshold)
+OggTrackDemuxer::SkipToNextRandomAccessPoint(const TimeUnit& aTimeThreshold)
 {
   uint32_t parsed = 0;
   bool found = false;
   RefPtr<MediaRawData> sample;
 
   OGG_DEBUG("TimeThreshold: %f", aTimeThreshold.ToSeconds());
   while (!found && (sample = NextSample())) {
     parsed++;
--- a/dom/media/ogg/OggDemuxer.h
+++ b/dom/media/ogg/OggDemuxer.h
@@ -347,23 +347,23 @@ class OggTrackDemuxer : public MediaTrac
 {
 public:
   OggTrackDemuxer(OggDemuxer* aParent,
                   TrackInfo::TrackType aType,
                   uint32_t aTrackNumber);
 
   UniquePtr<TrackInfo> GetInfo() const override;
 
-  RefPtr<SeekPromise> Seek(media::TimeUnit aTime) override;
+  RefPtr<SeekPromise> Seek(const media::TimeUnit& aTime) override;
 
   RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples = 1) override;
 
   void Reset() override;
 
-  RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold) override;
+  RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold) override;
 
   media::TimeIntervals GetBuffered() override;
 
   void BreakCycles() override;
 
 private:
   ~OggTrackDemuxer();
   void SetNextKeyFrameTime();
--- a/dom/media/platforms/omx/OmxDataDecoder.cpp
+++ b/dom/media/platforms/omx/OmxDataDecoder.cpp
@@ -155,18 +155,18 @@ OmxDataDecoder::Init()
   mReaderTaskQueue = AbstractThread::GetCurrent()->AsTaskQueue();
   MOZ_ASSERT(mReaderTaskQueue);
 
   RefPtr<InitPromise> p = mInitPromise.Ensure(__func__);
   RefPtr<OmxDataDecoder> self = this;
 
   // TODO: it needs to get permission from resource manager before allocating
   //       Omx component.
-  InvokeAsync(mOmxTaskQueue, mOmxLayer.get(), __func__, &OmxPromiseLayer::Init,
-              mTrackInfo.get())
+  InvokeAsync<const TrackInfo*>(mOmxTaskQueue, mOmxLayer.get(), __func__,
+                                &OmxPromiseLayer::Init, mTrackInfo.get())
     ->Then(mOmxTaskQueue, __func__,
       [self] () {
         // Omx state should be OMX_StateIdle.
         self->mOmxState = self->mOmxLayer->GetState();
         MOZ_ASSERT(self->mOmxState != OMX_StateIdle);
       },
       [self] () {
         self->RejectInitPromise(NS_ERROR_DOM_MEDIA_FATAL_ERR, __func__);
--- a/dom/media/wave/WaveDemuxer.cpp
+++ b/dom/media/wave/WaveDemuxer.cpp
@@ -296,17 +296,17 @@ WAVTrackDemuxer::DemuxSample()
 
 UniquePtr<TrackInfo>
 WAVTrackDemuxer::GetInfo() const
 {
   return mInfo->Clone();
 }
 
 RefPtr<WAVTrackDemuxer::SeekPromise>
-WAVTrackDemuxer::Seek(TimeUnit aTime)
+WAVTrackDemuxer::Seek(const TimeUnit& aTime)
 {
   FastSeek(aTime);
   const TimeUnit seekTime = ScanUntil(aTime);
   return SeekPromise::CreateAndResolve(seekTime, __func__);
 }
 
 TimeUnit
 WAVTrackDemuxer::FastSeek(const TimeUnit& aTime)
@@ -369,17 +369,17 @@ WAVTrackDemuxer::Reset()
   FastSeek(TimeUnit());
   mParser.Reset();
   mHeaderParser.Reset();
   mRIFFParser.Reset();
   mFmtParser.Reset();
 }
 
 RefPtr<WAVTrackDemuxer::SkipAccessPointPromise>
-WAVTrackDemuxer::SkipToNextRandomAccessPoint(TimeUnit aTimeThreshold)
+WAVTrackDemuxer::SkipToNextRandomAccessPoint(const TimeUnit& aTimeThreshold)
 {
   return SkipAccessPointPromise::CreateAndReject(
     SkipFailureHolder(NS_ERROR_DOM_MEDIA_DEMUXER_ERR, 0), __func__);
 }
 
 int64_t
 WAVTrackDemuxer::GetResourceOffset() const
 {
--- a/dom/media/wave/WaveDemuxer.h
+++ b/dom/media/wave/WaveDemuxer.h
@@ -185,21 +185,21 @@ public:
   media::TimeUnit DurationFromBytes(uint32_t aNumBytes) const;
 
   media::TimeUnit SeekPosition() const;
 
   RefPtr<MediaRawData> DemuxSample();
 
   // MediaTrackDemuxer interface.
   UniquePtr<TrackInfo> GetInfo() const override;
-  RefPtr<SeekPromise> Seek(media::TimeUnit aTime) override;
+  RefPtr<SeekPromise> Seek(const media::TimeUnit& aTime) override;
   RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples) override;
   void Reset() override;
   RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(
-    media::TimeUnit aTimeThreshold) override;
+    const media::TimeUnit& aTimeThreshold) override;
   int64_t GetResourceOffset() const override;
   media::TimeIntervals GetBuffered() override;
 
 private:
   ~WAVTrackDemuxer() {}
 
   media::TimeUnit FastSeek(const media::TimeUnit& aTime);
   media::TimeUnit ScanUntil(const media::TimeUnit& aTime);
--- a/dom/media/webm/WebMDemuxer.cpp
+++ b/dom/media/webm/WebMDemuxer.cpp
@@ -914,17 +914,17 @@ WebMTrackDemuxer::~WebMTrackDemuxer()
 
 UniquePtr<TrackInfo>
 WebMTrackDemuxer::GetInfo() const
 {
   return mInfo->Clone();
 }
 
 RefPtr<WebMTrackDemuxer::SeekPromise>
-WebMTrackDemuxer::Seek(media::TimeUnit aTime)
+WebMTrackDemuxer::Seek(const media::TimeUnit& aTime)
 {
   // Seeks to aTime. Upon success, SeekPromise will be resolved with the
   // actual time seeked to. Typically the random access point time
 
   media::TimeUnit seekTime = aTime;
   mSamples.Reset();
   mParent->SeekInternal(mType, aTime);
   mParent->GetNextPacket(mType, &mSamples);
@@ -1078,17 +1078,17 @@ WebMTrackDemuxer::GetNextRandomAccessPoi
       media::TimeUnit::FromMicroseconds(std::numeric_limits<int64_t>::max());
   } else {
     *aTime = mNextKeyframeTime.ref();
   }
   return NS_OK;
 }
 
 RefPtr<WebMTrackDemuxer::SkipAccessPointPromise>
-WebMTrackDemuxer::SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold)
+WebMTrackDemuxer::SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold)
 {
   uint32_t parsed = 0;
   bool found = false;
   RefPtr<MediaRawData> sample;
   int64_t sampleTime;
 
   WEBM_DEBUG("TimeThreshold: %f", aTimeThreshold.ToSeconds());
   while (!found && (sample = NextSample())) {
--- a/dom/media/webm/WebMDemuxer.h
+++ b/dom/media/webm/WebMDemuxer.h
@@ -250,25 +250,25 @@ class WebMTrackDemuxer : public MediaTra
 {
 public:
   WebMTrackDemuxer(WebMDemuxer* aParent,
                   TrackInfo::TrackType aType,
                   uint32_t aTrackNumber);
 
   UniquePtr<TrackInfo> GetInfo() const override;
 
-  RefPtr<SeekPromise> Seek(media::TimeUnit aTime) override;
+  RefPtr<SeekPromise> Seek(const media::TimeUnit& aTime) override;
 
   RefPtr<SamplesPromise> GetSamples(int32_t aNumSamples = 1) override;
 
   void Reset() override;
 
   nsresult GetNextRandomAccessPoint(media::TimeUnit* aTime) override;
 
-  RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold) override;
+  RefPtr<SkipAccessPointPromise> SkipToNextRandomAccessPoint(const media::TimeUnit& aTimeThreshold) override;
 
   media::TimeIntervals GetBuffered() override;
 
   int64_t GetEvictionOffset(const media::TimeUnit& aTime) override;
 
   void BreakCycles() override;
 
 private:
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -9284,30 +9284,31 @@ void nsFrame::FillCursorInformationFromS
 {
   aCursor.mCursor = ui->mCursor;
   aCursor.mHaveHotspot = false;
   aCursor.mLoading = false;
   aCursor.mHotspotX = aCursor.mHotspotY = 0.0f;
 
   for (const nsCursorImage& item : ui->mCursorImages) {
     uint32_t status;
-    nsresult rv = item.GetImage()->GetImageStatus(&status);
-    if (NS_SUCCEEDED(rv)) {
-      if (!(status & imgIRequest::STATUS_LOAD_COMPLETE)) {
-        // If we are falling back because any cursor before is loading,
-        // let the consumer know.
-        aCursor.mLoading = true;
-      } else if (!(status & imgIRequest::STATUS_ERROR)) {
-        // This is the one we want
-        item.GetImage()->GetImage(getter_AddRefs(aCursor.mContainer));
-        aCursor.mHaveHotspot = item.mHaveHotspot;
-        aCursor.mHotspotX = item.mHotspotX;
-        aCursor.mHotspotY = item.mHotspotY;
-        break;
-      }
+    imgRequestProxy* req = item.GetImage();
+    if (!req || NS_FAILED(req->GetImageStatus(&status))) {
+      continue;
+    }
+    if (!(status & imgIRequest::STATUS_LOAD_COMPLETE)) {
+      // If we are falling back because any cursor before is loading,
+      // let the consumer know.
+      aCursor.mLoading = true;
+    } else if (!(status & imgIRequest::STATUS_ERROR)) {
+      // This is the one we want
+      req->GetImage(getter_AddRefs(aCursor.mContainer));
+      aCursor.mHaveHotspot = item.mHaveHotspot;
+      aCursor.mHotspotX = item.mHotspotX;
+      aCursor.mHotspotY = item.mHotspotY;
+      break;
     }
   }
 }
 
 NS_IMETHODIMP
 nsFrame::RefreshSizeCache(nsBoxLayoutState& aState)
 {
   // XXXbz this comment needs some rewriting to make sense in the
--- a/layout/generic/nsVideoFrame.cpp
+++ b/layout/generic/nsVideoFrame.cpp
@@ -305,17 +305,17 @@ nsVideoFrame::Reflow(nsPresContext* aPre
   const bool isBSizeShrinkWrapping = (contentBoxBSize == NS_INTRINSICSIZE);
 
   nscoord borderBoxBSize;
   if (!isBSizeShrinkWrapping) {
     borderBoxBSize = contentBoxBSize +
       aReflowInput.ComputedLogicalBorderPadding().BStartEnd(myWM);
   }
 
-  mBorderPadding   = aReflowInput.ComputedPhysicalBorderPadding();
+  nsMargin borderPadding = aReflowInput.ComputedPhysicalBorderPadding();
 
   // Reflow the child frames. We may have up to three: an image
   // frame (for the poster image), a container frame for the controls,
   // and a container frame for the caption.
   for (nsIFrame* child : mFrames) {
     nsSize oldChildSize = child->GetSize();
 
     if (child->GetContent() == mPosterImage) {
@@ -330,17 +330,17 @@ nsVideoFrame::Reflow(nsPresContext* aPre
                                        aReflowInput,
                                        imageFrame,
                                        availableSize,
                                        &cbSize);
 
       nsRect posterRenderRect;
       if (ShouldDisplayPoster()) {
         posterRenderRect =
-          nsRect(nsPoint(mBorderPadding.left, mBorderPadding.top),
+          nsRect(nsPoint(borderPadding.left, borderPadding.top),
                  nsSize(aReflowInput.ComputedWidth(),
                         aReflowInput.ComputedHeight()));
       }
       kidReflowInput.SetComputedWidth(posterRenderRect.width);
       kidReflowInput.SetComputedHeight(posterRenderRect.height);
       ReflowChild(imageFrame, aPresContext, kidDesiredSize, kidReflowInput,
                   posterRenderRect.x, posterRenderRect.y, 0, aStatus);
       FinishReflowChild(imageFrame, aPresContext,
@@ -350,18 +350,18 @@ nsVideoFrame::Reflow(nsPresContext* aPre
 // Android still uses XUL media controls & hence needs this XUL-friendly
 // custom reflow code. This will go away in bug 1310907.
 #ifdef ANDROID
     } else if (child->GetContent() == mVideoControls) {
       // Reflow the video controls frame.
       nsBoxLayoutState boxState(PresContext(), aReflowInput.mRenderingContext);
       nsBoxFrame::LayoutChildAt(boxState,
                                 child,
-                                nsRect(mBorderPadding.left,
-                                       mBorderPadding.top,
+                                nsRect(borderPadding.left,
+                                       borderPadding.top,
                                        aReflowInput.ComputedWidth(),
                                        aReflowInput.ComputedHeight()));
 
 #endif // ANDROID
     } else if (child->GetContent() == mCaptionDiv ||
                child->GetContent() == mVideoControls) {
       // Reflow the caption and control bar frames.
       WritingMode wm = child->GetWritingMode();
@@ -369,25 +369,25 @@ nsVideoFrame::Reflow(nsPresContext* aPre
       availableSize.BSize(wm) = NS_UNCONSTRAINEDSIZE;
 
       ReflowInput kidReflowInput(aPresContext,
                                        aReflowInput,
                                        child,
                                        availableSize);
       ReflowOutput kidDesiredSize(kidReflowInput);
       ReflowChild(child, aPresContext, kidDesiredSize, kidReflowInput,
-                  mBorderPadding.left, mBorderPadding.top, 0, aStatus);
+                  borderPadding.left, borderPadding.top, 0, aStatus);
 
       if (child->GetContent() == mVideoControls && isBSizeShrinkWrapping) {
         contentBoxBSize = kidDesiredSize.BSize(myWM);
       }
 
       FinishReflowChild(child, aPresContext,
                         kidDesiredSize, &kidReflowInput,
-                        mBorderPadding.left, mBorderPadding.top, 0);
+                        borderPadding.left, borderPadding.top, 0);
     }
 
     if (child->GetContent() == mVideoControls && child->GetSize() != oldChildSize) {
       RefPtr<Runnable> event = new DispatchResizeToControls(child->GetContent());
       nsContentUtils::AddScriptRunner(event);
     }
   }
 
--- a/layout/generic/nsVideoFrame.h
+++ b/layout/generic/nsVideoFrame.h
@@ -125,18 +125,16 @@ protected:
 
   // Sets the mPosterImage's src attribute to be the video's poster attribute,
   // if we're the frame for a video element. Only call on frames for video
   // elements, not for frames for audio elements.
   void UpdatePosterSource(bool aNotify);
 
   virtual ~nsVideoFrame();
 
-  nsMargin mBorderPadding;
-
   // Anonymous child which is bound via XBL to the video controls.
   nsCOMPtr<nsIContent> mVideoControls;
 
   // Anonymous child which is the image element of the poster frame.
   nsCOMPtr<nsIContent> mPosterImage;
 
   // Anonymous child which is the text track caption display div.
   nsCOMPtr<nsIContent> mCaptionDiv;
new file mode 100644
--- /dev/null
+++ b/layout/style/ServoArcTypeList.h
@@ -0,0 +1,13 @@
+/* -*- 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/. */
+
+/* a list of all Servo Arc types used in stylo bindings for preprocessing */
+
+SERVO_ARC_TYPE(CssRules, ServoCssRules)
+SERVO_ARC_TYPE(StyleSheet, RawServoStyleSheet)
+SERVO_ARC_TYPE(ComputedValues, ServoComputedValues)
+SERVO_ARC_TYPE(DeclarationBlock, RawServoDeclarationBlock)
+SERVO_ARC_TYPE(StyleRule, RawServoStyleRule)
--- a/layout/style/ServoBindingList.h
+++ b/layout/style/ServoBindingList.h
@@ -26,20 +26,16 @@ SERVO_BINDING_FUNC(Servo_StyleSheet_Empt
                    mozilla::css::SheetParsingMode parsing_mode)
 SERVO_BINDING_FUNC(Servo_StyleSheet_FromUTF8Bytes, RawServoStyleSheetStrong,
                    const nsACString* data,
                    mozilla::css::SheetParsingMode parsing_mode,
                    const nsACString* base_url,
                    ThreadSafeURIHolder* base,
                    ThreadSafeURIHolder* referrer,
                    ThreadSafePrincipalHolder* principal)
-SERVO_BINDING_FUNC(Servo_StyleSheet_AddRef, void,
-                   RawServoStyleSheetBorrowed sheet)
-SERVO_BINDING_FUNC(Servo_StyleSheet_Release, void,
-                   RawServoStyleSheetBorrowed sheet)
 SERVO_BINDING_FUNC(Servo_StyleSheet_HasRules, bool,
                    RawServoStyleSheetBorrowed sheet)
 SERVO_BINDING_FUNC(Servo_StyleSheet_GetRules, ServoCssRulesStrong,
                    RawServoStyleSheetBorrowed sheet)
 SERVO_BINDING_FUNC(Servo_StyleSet_Init, RawServoStyleSetOwned)
 SERVO_BINDING_FUNC(Servo_StyleSet_Drop, void, RawServoStyleSetOwned set)
 SERVO_BINDING_FUNC(Servo_StyleSet_AppendStyleSheet, void,
                    RawServoStyleSetBorrowed set, RawServoStyleSheetBorrowed sheet)
@@ -47,29 +43,23 @@ SERVO_BINDING_FUNC(Servo_StyleSet_Prepen
                    RawServoStyleSetBorrowed set, RawServoStyleSheetBorrowed sheet)
 SERVO_BINDING_FUNC(Servo_StyleSet_RemoveStyleSheet, void,
                    RawServoStyleSetBorrowed set, RawServoStyleSheetBorrowed sheet)
 SERVO_BINDING_FUNC(Servo_StyleSet_InsertStyleSheetBefore, void,
                    RawServoStyleSetBorrowed set, RawServoStyleSheetBorrowed sheet,
                    RawServoStyleSheetBorrowed reference)
 
 // CSSRuleList
-SERVO_BINDING_FUNC(Servo_CssRules_AddRef, void, ServoCssRulesBorrowed rules)
-SERVO_BINDING_FUNC(Servo_CssRules_Release, void, ServoCssRulesBorrowed rules)
 SERVO_BINDING_FUNC(Servo_CssRules_ListTypes, void,
                    ServoCssRulesBorrowed rules,
                    nsTArrayBorrowed_uintptr_t result)
 SERVO_BINDING_FUNC(Servo_CssRules_GetStyleRuleAt, RawServoStyleRuleStrong,
                    ServoCssRulesBorrowed rules, uint32_t index)
 
 // CSS Rules
-SERVO_BINDING_FUNC(Servo_StyleRule_AddRef, void,
-                   RawServoStyleRuleBorrowed rule)
-SERVO_BINDING_FUNC(Servo_StyleRule_Release, void,
-                   RawServoStyleRuleBorrowed rule)
 SERVO_BINDING_FUNC(Servo_StyleRule_Debug, void,
                    RawServoStyleRuleBorrowed rule, nsACString* result)
 SERVO_BINDING_FUNC(Servo_StyleRule_GetStyle, RawServoDeclarationBlockStrong,
                    RawServoStyleRuleBorrowed rule)
 SERVO_BINDING_FUNC(Servo_StyleRule_SetStyle, void,
                    RawServoStyleRuleBorrowed rule,
                    RawServoDeclarationBlockBorrowed declarations)
 SERVO_BINDING_FUNC(Servo_StyleRule_GetCssText, void,
@@ -91,20 +81,16 @@ SERVO_BINDING_FUNC(Servo_RestyleWithAdde
 
 // Style attribute
 SERVO_BINDING_FUNC(Servo_ParseStyleAttribute, RawServoDeclarationBlockStrong,
                    const nsACString* data)
 SERVO_BINDING_FUNC(Servo_DeclarationBlock_CreateEmpty,
                    RawServoDeclarationBlockStrong)
 SERVO_BINDING_FUNC(Servo_DeclarationBlock_Clone, RawServoDeclarationBlockStrong,
                    RawServoDeclarationBlockBorrowed declarations)
-SERVO_BINDING_FUNC(Servo_DeclarationBlock_AddRef, void,
-                   RawServoDeclarationBlockBorrowed declarations)
-SERVO_BINDING_FUNC(Servo_DeclarationBlock_Release, void,
-                   RawServoDeclarationBlockBorrowed declarations)
 SERVO_BINDING_FUNC(Servo_DeclarationBlock_Equals, bool,
                    RawServoDeclarationBlockBorrowed a,
                    RawServoDeclarationBlockBorrowed b)
 SERVO_BINDING_FUNC(Servo_DeclarationBlock_GetCssText, void,
                    RawServoDeclarationBlockBorrowed declarations,
                    nsAString* result)
 SERVO_BINDING_FUNC(Servo_DeclarationBlock_SerializeOneValue, void,
                    RawServoDeclarationBlockBorrowed declarations,
@@ -139,20 +125,16 @@ SERVO_BINDING_FUNC(Servo_ComputedValues_
                    nsIAtom* pseudoTag, RawServoStyleSetBorrowed set)
 SERVO_BINDING_FUNC(Servo_ComputedValues_GetForPseudoElement,
                    ServoComputedValuesStrong,
                    ServoComputedValuesBorrowed parent_style,
                    RawGeckoElementBorrowed match_element, nsIAtom* pseudo_tag,
                    RawServoStyleSetBorrowed set, bool is_probe)
 SERVO_BINDING_FUNC(Servo_ComputedValues_Inherit, ServoComputedValuesStrong,
                    ServoComputedValuesBorrowedOrNull parent_style)
-SERVO_BINDING_FUNC(Servo_ComputedValues_AddRef, void,
-                   ServoComputedValuesBorrowed computed_values)
-SERVO_BINDING_FUNC(Servo_ComputedValues_Release, void,
-                   ServoComputedValuesBorrowed computed_values)
 
 // Initialize Servo components. Should be called exactly once at startup.
 SERVO_BINDING_FUNC(Servo_Initialize, void)
 // Shut down Servo components. Should be called exactly once at shutdown.
 SERVO_BINDING_FUNC(Servo_Shutdown, void)
 
 // Gets the snapshot for the element. This will return null if the element
 // has never been styled, since snapshotting in that case is wasted work.
@@ -177,8 +159,15 @@ SERVO_BINDING_FUNC(Servo_AssertTreeIsCle
 
 // Style-struct management.
 #define STYLE_STRUCT(name, checkdata_cb)                            \
   struct nsStyle##name;                                             \
   SERVO_BINDING_FUNC(Servo_GetStyle##name, const nsStyle##name*,  \
                      ServoComputedValuesBorrowedOrNull computed_values)
 #include "nsStyleStructList.h"
 #undef STYLE_STRUCT
+
+// AddRef / Release functions
+#define SERVO_ARC_TYPE(name_, type_)                                \
+  SERVO_BINDING_FUNC(Servo_##name_##_AddRef, void, type_##Borrowed) \
+  SERVO_BINDING_FUNC(Servo_##name_##_Release, void, type_##Borrowed)
+#include "mozilla/ServoArcTypeList.h"
+#undef SERVO_ARC_TYPE
--- a/layout/style/ServoBindingTypes.h
+++ b/layout/style/ServoBindingTypes.h
@@ -5,22 +5,21 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef mozilla_ServoBindingTypes_h
 #define mozilla_ServoBindingTypes_h
 
 #include "mozilla/RefPtr.h"
 #include "mozilla/UniquePtr.h"
 
-struct ServoComputedValues;
-struct ServoCssRules;
-struct RawServoStyleSheet;
 struct RawServoStyleSet;
-struct RawServoDeclarationBlock;
-struct RawServoStyleRule;
+
+#define SERVO_ARC_TYPE(name_, type_) struct type_;
+#include "mozilla/ServoArcTypeList.h"
+#undef SERVO_ARC_TYPE
 
 namespace mozilla {
   class ServoElementSnapshot;
 namespace dom {
 class Element;
 class StyleChildrenIterator;
 } // namespace dom
 } // namespace mozilla
@@ -51,40 +50,37 @@ typedef nsIDocument RawGeckoDocument;
 // The "Arc" types are Servo-managed Arc<ServoType>s, which are passed
 // over FFI as Strong<T> (which is nullable).
 // Note that T != ServoType, rather T is ArcInner<ServoType>
 #define DECL_BORROWED_REF_TYPE_FOR(type_) typedef type_ const* type_##Borrowed;
 #define DECL_NULLABLE_BORROWED_REF_TYPE_FOR(type_) typedef type_ const* type_##BorrowedOrNull;
 #define DECL_BORROWED_MUT_REF_TYPE_FOR(type_) typedef type_* type_##BorrowedMut;
 #define DECL_NULLABLE_BORROWED_MUT_REF_TYPE_FOR(type_) typedef type_* type_##BorrowedMutOrNull;
 
-#define DECL_ARC_REF_TYPE_FOR(type_)         \
+#define SERVO_ARC_TYPE(name_, type_)         \
   DECL_NULLABLE_BORROWED_REF_TYPE_FOR(type_) \
   DECL_BORROWED_REF_TYPE_FOR(type_)          \
   struct MOZ_MUST_USE_TYPE type_##Strong     \
   {                                          \
     type_* mPtr;                             \
     already_AddRefed<type_> Consume();       \
   };
+#include "mozilla/ServoArcTypeList.h"
+#undef SERVO_ARC_TYPE
 
 #define DECL_OWNED_REF_TYPE_FOR(type_)    \
   typedef type_* type_##Owned;            \
   DECL_BORROWED_REF_TYPE_FOR(type_)       \
   DECL_BORROWED_MUT_REF_TYPE_FOR(type_)
 
 #define DECL_NULLABLE_OWNED_REF_TYPE_FOR(type_)    \
   typedef type_* type_##OwnedOrNull;               \
   DECL_NULLABLE_BORROWED_REF_TYPE_FOR(type_)       \
   DECL_NULLABLE_BORROWED_MUT_REF_TYPE_FOR(type_)
 
-DECL_ARC_REF_TYPE_FOR(ServoComputedValues)
-DECL_ARC_REF_TYPE_FOR(ServoCssRules)
-DECL_ARC_REF_TYPE_FOR(RawServoStyleSheet)
-DECL_ARC_REF_TYPE_FOR(RawServoDeclarationBlock)
-DECL_ARC_REF_TYPE_FOR(RawServoStyleRule)
 // This is a reference to a reference of RawServoDeclarationBlock, which
 // corresponds to Option<&Arc<RawServoDeclarationBlock>> in Servo side.
 DECL_NULLABLE_BORROWED_REF_TYPE_FOR(RawServoDeclarationBlockStrong)
 
 DECL_OWNED_REF_TYPE_FOR(RawServoStyleSet)
 DECL_NULLABLE_OWNED_REF_TYPE_FOR(StyleChildrenIterator)
 DECL_OWNED_REF_TYPE_FOR(StyleChildrenIterator)
 DECL_OWNED_REF_TYPE_FOR(ServoElementSnapshot)
@@ -108,39 +104,33 @@ DECL_BORROWED_MUT_REF_TYPE_FOR(nsCSSValu
 #undef DECL_ARC_REF_TYPE_FOR
 #undef DECL_OWNED_REF_TYPE_FOR
 #undef DECL_NULLABLE_OWNED_REF_TYPE_FOR
 #undef DECL_BORROWED_REF_TYPE_FOR
 #undef DECL_NULLABLE_BORROWED_REF_TYPE_FOR
 #undef DECL_BORROWED_MUT_REF_TYPE_FOR
 #undef DECL_NULLABLE_BORROWED_MUT_REF_TYPE_FOR
 
-#define DEFINE_REFPTR_TRAITS(name_, type_)           \
+#define SERVO_ARC_TYPE(name_, type_)                 \
   extern "C" {                                       \
   void Servo_##name_##_AddRef(type_##Borrowed ptr);  \
   void Servo_##name_##_Release(type_##Borrowed ptr); \
   }                                                  \
   namespace mozilla {                                \
   template<> struct RefPtrTraits<type_> {            \
     static void AddRef(type_* aPtr) {                \
       Servo_##name_##_AddRef(aPtr);                  \
     }                                                \
     static void Release(type_* aPtr) {               \
       Servo_##name_##_Release(aPtr);                 \
     }                                                \
   };                                                 \
   }
-
-DEFINE_REFPTR_TRAITS(CssRules, ServoCssRules)
-DEFINE_REFPTR_TRAITS(StyleSheet, RawServoStyleSheet)
-DEFINE_REFPTR_TRAITS(ComputedValues, ServoComputedValues)
-DEFINE_REFPTR_TRAITS(DeclarationBlock, RawServoDeclarationBlock)
-DEFINE_REFPTR_TRAITS(StyleRule, RawServoStyleRule)
-
-#undef DEFINE_REFPTR_TRAITS
+#include "mozilla/ServoArcTypeList.h"
+#undef SERVO_ARC_TYPE
 
 extern "C" void Servo_StyleSet_Drop(RawServoStyleSetOwned ptr);
 
 namespace mozilla {
 template<>
 class DefaultDelete<RawServoStyleSet>
 {
 public:
--- a/layout/style/ServoBindings.cpp
+++ b/layout/style/ServoBindings.cpp
@@ -31,31 +31,25 @@
 #include "mozilla/ServoRestyleManager.h"
 #include "mozilla/StyleAnimationValue.h"
 #include "mozilla/DeclarationBlockInlines.h"
 #include "mozilla/dom/Element.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
-#define IMPL_STRONG_REF_TYPE_FOR(type_) \
-  already_AddRefed<type_>               \
-  type_##Strong::Consume() {            \
-    RefPtr<type_> result;               \
-    result.swap(mPtr);                  \
-    return result.forget();             \
+#define SERVO_ARC_TYPE(name_, type_) \
+  already_AddRefed<type_>            \
+  type_##Strong::Consume() {         \
+    RefPtr<type_> result;            \
+    result.swap(mPtr);               \
+    return result.forget();          \
   }
-
-IMPL_STRONG_REF_TYPE_FOR(ServoComputedValues)
-IMPL_STRONG_REF_TYPE_FOR(ServoCssRules)
-IMPL_STRONG_REF_TYPE_FOR(RawServoStyleSheet)
-IMPL_STRONG_REF_TYPE_FOR(RawServoDeclarationBlock)
-IMPL_STRONG_REF_TYPE_FOR(RawServoStyleRule)
-
-#undef IMPL_STRONG_REF_TYPE_FOR
+#include "mozilla/ServoArcTypeList.h"
+#undef SERVO_ARC_TYPE
 
 uint32_t
 Gecko_ChildrenCount(RawGeckoNodeBorrowed aNode)
 {
   return aNode->GetChildCount();
 }
 
 bool
new file mode 100644
--- /dev/null
+++ b/layout/style/crashtests/1320423-1.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<style>
+#target {
+  cursor: url(file:///somewhere/cursor.png), pointer;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: yellow;
+}
+#target:hover {
+  background: green;
+}
+</style>
+<div id=target></div>
+<script>
+var target = document.getElementById("target");
+var x = window.outerWidth / 2, y = window.outerHeight / 2;
+SpecialPowers.DOMWindowUtils.sendMouseEvent("mouseover", x, y, 0, 0, 0);
+</script>
--- a/layout/style/crashtests/crashtests.list
+++ b/layout/style/crashtests/crashtests.list
@@ -158,8 +158,9 @@ pref(dom.animations-api.core.enabled,tru
 pref(dom.animations-api.core.enabled,true) load 1290994-1.html
 pref(dom.animations-api.core.enabled,true) load 1290994-2.html
 pref(dom.animations-api.core.enabled,true) load 1290994-3.html
 load 1290994-4.html
 load 1314531.html
 load 1315889-1.html
 load 1315894-1.html
 load 1319072-1.html
+HTTP load 1320423-1.html
--- a/layout/style/moz.build
+++ b/layout/style/moz.build
@@ -88,16 +88,17 @@ EXPORTS.mozilla += [
     'CSSVariableValues.h',
     'DeclarationBlock.h',
     'DeclarationBlockInlines.h',
     'HandleRefPtr.h',
     'IncrementalClearCOMRuleArray.h',
     'LayerAnimationInfo.h',
     'RuleNodeCacheConditions.h',
     'RuleProcessorCache.h',
+    'ServoArcTypeList.h',
     'ServoBindingList.h',
     'ServoBindings.h',
     'ServoBindingTypes.h',
     'ServoCSSRuleList.h',
     'ServoDeclarationBlock.h',
     'ServoElementSnapshot.h',
     'ServoStyleRule.h',
     'ServoStyleSet.h',
new file mode 100644
--- /dev/null
+++ b/mobile/android/tests/background/junit4/src/org/mozilla/gecko/util/TestFloatUtils.java
@@ -0,0 +1,76 @@
+/*
+ * 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/.
+ */
+
+package org.mozilla.gecko.util;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mozilla.gecko.background.testhelpers.TestRunner;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
+
+
+/**
+ * Unit tests for float utilities.
+ */
+@RunWith(TestRunner.class)
+public class TestFloatUtils {
+
+    @Test
+    public void testEqualIfComparingZeros() {
+        assertTrue(FloatUtils.fuzzyEquals(0, 0));
+    }
+
+    @Test
+    public void testEqualFailIf5thDigitIsDifferent() {
+        assertFalse(FloatUtils.fuzzyEquals(0.00001f, 0.00002f));
+    }
+
+    @Test
+    public void testEqualSuccessIf6thDigitIsDifferent() {
+        assertTrue(FloatUtils.fuzzyEquals(0.000001f, 0.000002f));
+    }
+
+    @Test
+    public void testEqualFail() {
+        assertFalse(FloatUtils.fuzzyEquals(10, 0));
+    }
+
+    @Test
+    public void testEqualSuccessIfPromoted() {
+        assertTrue(FloatUtils.fuzzyEquals(5, 5));
+    }
+
+    @Test
+    public void testEqualSuccessIfUnPromoted() {
+        assertTrue(FloatUtils.fuzzyEquals(5.6f, 5.6f));
+    }
+
+    @Test
+    public void testClampSuccess() {
+        assertEquals(3, FloatUtils.clamp(3, 1, 5), 0);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testClampFail() {
+        FloatUtils.clamp(3, 5, 1);
+    }
+
+    @Test
+    public void testInterpolateSuccess() {
+        assertEquals(4f ,FloatUtils.interpolate(1, 2, 3), 0f);
+    }
+
+    @Test
+    public void testInterpolateFail() {
+        assertNotEquals(3f ,FloatUtils.interpolate(1, 2, 3), 0f);
+    }
+
+
+}
--- a/python/compare-locales/compare_locales/__init__.py
+++ b/python/compare-locales/compare_locales/__init__.py
@@ -1,1 +1,1 @@
-version = "1.2.1"
+version = "1.1"
--- a/python/compare-locales/compare_locales/commands.py
+++ b/python/compare-locales/compare_locales/commands.py
@@ -1,155 +1,154 @@
 # 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/.
 
 'Commands exposed to commandlines'
 
 import logging
-from argparse import ArgumentParser
+from optparse import OptionParser, make_option
 
-from compare_locales import version
 from compare_locales.paths import EnumerateApp
 from compare_locales.compare import compareApp, compareDirs
 from compare_locales.webapps import compare_web_app
 
 
 class BaseCommand(object):
     """Base class for compare-locales commands.
     This handles command line parsing, and general sugar for setuptools
     entry_points.
     """
+    options = [
+        make_option('-v', '--verbose', action='count', dest='v', default=0,
+                    help='Make more noise'),
+        make_option('-q', '--quiet', action='count', dest='q', default=0,
+                    help='Make less noise'),
+        make_option('-m', '--merge',
+                    help='''Use this directory to stage merged files,
+use {ab_CD} to specify a different directory for each locale'''),
+    ]
+    data_option = make_option('--data', choices=['text', 'exhibit', 'json'],
+                              default='text',
+                              help='''Choose data and format (one of text,
+exhibit, json); text: (default) Show which files miss which strings, together
+with warnings and errors. Also prints a summary; json: Serialize the internal
+tree, useful for tools. Also always succeeds; exhibit: Serialize the summary
+data in a json useful for Exhibit
+''')
 
     def __init__(self):
         self.parser = None
 
     def get_parser(self):
-        """Get an ArgumentParser, with class docstring as description.
+        """Get an OptionParser, with class docstring as usage, and
+        self.options.
         """
-        parser = ArgumentParser(description=self.__doc__)
-        parser.add_argument('--version', action='version',
-                            version='%(prog)s ' + version)
-        parser.add_argument('-v', '--verbose', action='count', dest='v',
-                            default=0, help='Make more noise')
-        parser.add_argument('-q', '--quiet', action='count', dest='q',
-                            default=0, help='Make less noise')
-        parser.add_argument('-m', '--merge',
-                            help='''Use this directory to stage merged files,
-use {ab_CD} to specify a different directory for each locale''')
+        parser = OptionParser()
+        parser.set_usage(self.__doc__)
+        for option in self.options:
+            parser.add_option(option)
         return parser
 
-    def add_data_argument(self, parser):
-        parser.add_argument('--data', choices=['text', 'exhibit', 'json'],
-                            default='text',
-                            help='''Choose data and format (one of text,
-exhibit, json); text: (default) Show which files miss which strings, together
-with warnings and errors. Also prints a summary; json: Serialize the internal
-tree, useful for tools. Also always succeeds; exhibit: Serialize the summary
-data in a json useful for Exhibit
-''')
-
     @classmethod
     def call(cls):
         """Entry_point for setuptools.
         The actual command handling is done in the handle() method of the
         subclasses.
         """
         cmd = cls()
         cmd.handle_()
 
     def handle_(self):
         """The instance part of the classmethod call."""
         self.parser = self.get_parser()
-        args = self.parser.parse_args()
+        (options, args) = self.parser.parse_args()
         # log as verbose or quiet as we want, warn by default
         logging.basicConfig()
         logging.getLogger().setLevel(logging.WARNING -
-                                     (args.v - args.q) * 10)
-        observer = self.handle(args)
-        print observer.serialize(type=args.data).encode('utf-8', 'replace')
+                                     (options.v - options.q)*10)
+        observer = self.handle(args, options)
+        print observer.serialize(type=options.data).encode('utf-8', 'replace')
 
-    def handle(self, args):
+    def handle(self, args, options):
         """Subclasses need to implement this method for the actual
         command handling.
         """
         raise NotImplementedError
 
 
 class CompareLocales(BaseCommand):
-    """Check the localization status of a gecko application.
+    """usage: %prog [options] l10n.ini l10n_base_dir [locale ...]
+
+Check the localization status of a gecko application.
 The first argument is a path to the l10n.ini file for the application,
 followed by the base directory of the localization repositories.
 Then you pass in the list of locale codes you want to compare. If there are
 not locales given, the list of locales will be taken from the all-locales file
 of the application\'s l10n.ini."""
 
-    def get_parser(self):
-        parser = super(CompareLocales, self).get_parser()
-        parser.add_argument('ini_file', metavar='l10n.ini',
-                            help='INI file for the project')
-        parser.add_argument('l10n_base_dir', metavar='l10n-base-dir',
-                            help='Parent directory of localizations')
-        parser.add_argument('locales', nargs='*', metavar='locale-code',
-                            help='Locale code and top-level directory of '
-                                 'each localization')
-        parser.add_argument('--clobber-merge', action="store_true",
-                            default=False, dest='clobber',
-                            help="""WARNING: DATALOSS.
+    options = BaseCommand.options + [
+        make_option('--clobber-merge', action="store_true", default=False,
+                    dest='clobber',
+                    help="""WARNING: DATALOSS.
 Use this option with care. If specified, the merge directory will
 be clobbered for each module. That means, the subdirectory will
 be completely removed, any files that were there are lost.
-Be careful to specify the right merge directory when using this option.""")
-        parser.add_argument('-r', '--reference', default='en-US',
-                            dest='reference',
-                            help='Explicitly set the reference '
-                            'localization. [default: en-US]')
-        self.add_data_argument(parser)
-        return parser
+Be careful to specify the right merge directory when using this option."""),
+        make_option('-r', '--reference', default='en-US', dest='reference',
+                    help='Explicitly set the reference '
+                    'localization. [default: en-US]'),
+        BaseCommand.data_option
+    ]
 
-    def handle(self, args):
-        app = EnumerateApp(args.ini_file, args.l10n_base_dir, args.locales)
-        app.reference = args.reference
+    def handle(self, args, options):
+        if len(args) < 2:
+            self.parser.error('Need to pass in list of languages')
+        inipath, l10nbase = args[:2]
+        locales = args[2:]
+        app = EnumerateApp(inipath, l10nbase, locales)
+        app.reference = options.reference
         try:
-            observer = compareApp(app, merge_stage=args.merge,
-                                  clobber=args.clobber)
+            observer = compareApp(app, merge_stage=options.merge,
+                                  clobber=options.clobber)
         except (OSError, IOError), exc:
             print "FAIL: " + str(exc)
             self.parser.exit(2)
         return observer
 
 
 class CompareDirs(BaseCommand):
-    """Check the localization status of a directory tree.
+    """usage: %prog [options] reference localization
+
+Check the localization status of a directory tree.
 The first argument is a path to the reference data,the second is the
 localization to be tested."""
 
-    def get_parser(self):
-        parser = super(CompareDirs, self).get_parser()
-        parser.add_argument('reference')
-        parser.add_argument('localization')
-        self.add_data_argument(parser)
-        return parser
+    options = BaseCommand.options + [
+        BaseCommand.data_option
+    ]
 
-    def handle(self, args):
-        observer = compareDirs(args.reference, args.localization,
-                               merge_stage=args.merge)
+    def handle(self, args, options):
+        if len(args) != 2:
+            self.parser.error('Reference and localizatino required')
+        reference, locale = args
+        observer = compareDirs(reference, locale, merge_stage=options.merge)
         return observer
 
 
 class CompareWebApp(BaseCommand):
-    """Check the localization status of a gaia-style web app.
+    """usage: %prog [options] webapp [locale locale]
+
+Check the localization status of a gaia-style web app.
 The first argument is the directory of the web app.
 Following arguments explicitly state the locales to test.
 If none are given, test all locales in manifest.webapp or files."""
 
-    def get_parser(self):
-        parser = super(CompareWebApp, self).get_parser()
-        parser.add_argument('webapp')
-        parser.add_argument('locales', nargs='*', metavar='locale-code',
-                            help='Locale code and top-level directory of '
-                                 'each localization')
-        self.add_data_argument(parser)
-        return parser
+    options = BaseCommand.options[:-1] + [
+        BaseCommand.data_option]
 
-    def handle(self, args):
-        observer = compare_web_app(args.webapp, args.locales)
+    def handle(self, args, options):
+        if len(args) < 1:
+            self.parser.error('Webapp directory required')
+        basedir = args[0]
+        locales = args[1:]
+        observer = compare_web_app(basedir, locales)
         return observer
--- a/python/compare-locales/compare_locales/compare.py
+++ b/python/compare-locales/compare_locales/compare.py
@@ -378,45 +378,45 @@ class ContentComparer:
         Results from the notify calls are ignored.
         '''
         self.other_observers.append(obs)
 
     def set_merge_stage(self, merge_stage):
         self.merge_stage = merge_stage
 
     def merge(self, ref_entities, ref_map, ref_file, l10n_file, missing,
-              skips, ctx, canMerge, encoding):
+              skips, p):
         outfile = os.path.join(self.merge_stage, l10n_file.module,
                                l10n_file.file)
         outdir = os.path.dirname(outfile)
         if not os.path.isdir(outdir):
             os.makedirs(outdir)
-        if not canMerge:
+        if not p.canMerge:
             shutil.copyfile(ref_file.fullpath, outfile)
             print "copied reference to " + outfile
             return
         if skips:
             # skips come in ordered by key name, we need them in file order
             skips.sort(key=lambda s: s.span[0])
         trailing = (['\n'] +
                     [ref_entities[ref_map[key]].all for key in missing] +
                     [ref_entities[ref_map[skip.key]].all for skip in skips
                      if not isinstance(skip, parser.Junk)])
         if skips:
             # we need to skip a few errornous blocks in the input, copy by hand
-            f = codecs.open(outfile, 'wb', encoding)
+            f = codecs.open(outfile, 'wb', p.encoding)
             offset = 0
             for skip in skips:
                 chunk = skip.span
-                f.write(ctx.contents[offset:chunk[0]])
+                f.write(p.contents[offset:chunk[0]])
                 offset = chunk[1]
-            f.write(ctx.contents[offset:])
+            f.write(p.contents[offset:])
         else:
             shutil.copyfile(l10n_file.fullpath, outfile)
-            f = codecs.open(outfile, 'ab', encoding)
+            f = codecs.open(outfile, 'ab', p.encoding)
         print "adding to " + outfile
 
         def ensureNewline(s):
             if not s.endswith('\n'):
                 return s + '\n'
             return s
 
         f.write(''.join(map(ensureNewline, trailing)))
@@ -453,20 +453,30 @@ class ContentComparer:
                 return
             self.reference[ref_file] = p.parse()
         ref = self.reference[ref_file]
         ref_list = ref[1].keys()
         ref_list.sort()
         try:
             p.readContents(l10n.getContents())
             l10n_entities, l10n_map = p.parse()
-            l10n_ctx = p.ctx
         except Exception, e:
             self.notify('error', l10n, str(e))
             return
+        lines = []
+
+        def _getLine(offset):
+            if not lines:
+                lines.append(0)
+                for m in self.nl.finditer(p.contents):
+                    lines.append(m.end())
+            for i in xrange(len(lines), 0, -1):
+                if offset >= lines[i - 1]:
+                    return (i, offset - lines[i - 1])
+            return (1, offset)
 
         l10n_list = l10n_map.keys()
         l10n_list.sort()
         ar = AddRemove()
         ar.set_left(ref_list)
         ar.set_right(l10n_list)
         report = missing = obsolete = changed = unchanged = keys = 0
         missings = []
@@ -486,20 +496,19 @@ class ContentComparer:
                 else:
                     # just report
                     report += 1
             elif action == 'add':
                 # obsolete entity or junk
                 if isinstance(l10n_entities[l10n_map[item_or_pair]],
                               parser.Junk):
                     junk = l10n_entities[l10n_map[item_or_pair]]
-                    params = (junk.val,) + junk.position() + junk.position(-1)
+                    params = (junk.val,) + junk.span
                     self.notify('error', l10n,
-                                'Unparsed content "%s" from line %d colum %d'
-                                ' to line %d column %d' % params)
+                                'Unparsed content "%s" at %d-%d' % params)
                     if self.merge_stage is not None:
                         skips.append(junk)
                 elif self.notify('obsoleteEntity', l10n,
                                  item_or_pair) != 'ignore':
                     obsolete += 1
             else:
                 # entity found in both ref and l10n, check for changed
                 entity = item_or_pair[0]
@@ -514,40 +523,37 @@ class ContentComparer:
                     else:
                         self.doChanged(ref_file, refent, l10nent)
                         changed += 1
                         # run checks:
                 if checker:
                     for tp, pos, msg, cat in checker.check(refent, l10nent):
                         # compute real src position, if first line,
                         # col needs adjustment
+                        _l, _offset = _getLine(l10nent.val_span[0])
                         if isinstance(pos, tuple):
-                            _l, col = l10nent.value_position()
                             # line, column
                             if pos[0] == 1:
-                                col = col + pos[1]
+                                col = pos[1] + _offset
                             else:
                                 col = pos[1]
-                                _l += pos[0] - 1
+                            _l += pos[0] - 1
                         else:
-                            _l, col = l10nent.value_position(pos)
-                        # skip error entities when merging
+                            _l, col = _getLine(l10nent.val_span[0] + pos)
+                            # skip error entities when merging
                         if tp == 'error' and self.merge_stage is not None:
                             skips.append(l10nent)
                         self.notify(tp, l10n,
                                     u"%s at line %d, column %d for %s" %
                                     (msg, _l, col, refent.key))
                 pass
         if missing:
             self.notify('missing', l10n, missing)
         if self.merge_stage is not None and (missings or skips):
-            self.merge(
-                ref[0], ref[1], ref_file,
-                l10n, missings, skips, l10n_ctx,
-                p.canMerge, p.encoding)
+            self.merge(ref[0], ref[1], ref_file, l10n, missings, skips, p)
         if report:
             self.notify('report', l10n, report)
         if obsolete:
             self.notify('obsolete', l10n, obsolete)
         if changed:
             self.notify('changed', l10n, changed)
         if unchanged:
             self.notify('unchanged', l10n, unchanged)
--- a/python/compare-locales/compare_locales/parser.py
+++ b/python/compare-locales/compare_locales/parser.py
@@ -1,298 +1,199 @@
 # 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/.
 
 import re
-import bisect
 import codecs
 import logging
+from HTMLParser import HTMLParser
 
 __constructors = []
 
 
-class EntityBase(object):
+class Entity(object):
     '''
     Abstraction layer for a localizable entity.
     Currently supported are grammars of the form:
 
     1: pre white space
-    2: entity definition
-    3: entity key (name)
-    4: entity value
-    5: post white space
+    2: pre comments
+    3: entity definition
+    4: entity key (name)
+    5: entity value
+    6: post comment (and white space) in the same line (dtd only)
                                                  <--[1]
-    <!ENTITY key "value">
+    <!-- pre comments -->                        <--[2]
+    <!ENTITY key "value"> <!-- comment -->
 
-    <-------[2]--------->
+    <-------[3]---------><------[6]------>
     '''
-    def __init__(self, ctx, pp, pre_comment,
-                 span, pre_ws_span, def_span,
+    def __init__(self, contents, pp,
+                 span, pre_ws_span, pre_comment_span, def_span,
                  key_span, val_span, post_span):
-        self.ctx = ctx
+        self.contents = contents
         self.span = span
         self.pre_ws_span = pre_ws_span
+        self.pre_comment_span = pre_comment_span
         self.def_span = def_span
         self.key_span = key_span
         self.val_span = val_span
         self.post_span = post_span
         self.pp = pp
-        self.pre_comment = pre_comment
         pass
 
-    def position(self, offset=0):
-        """Get the 1-based line and column of the character
-        with given offset into the Entity.
-
-        If offset is negative, return the end of the Entity.
-        """
-        if offset < 0:
-            pos = self.span[1]
-        else:
-            pos = self.span[0] + offset
-        return self.ctx.lines(pos)[0]
-
-    def value_position(self, offset=0):
-        """Get the 1-based line and column of the character
-        with given offset into the value.
-
-        If offset is negative, return the end of the value.
-        """
-        if offset < 0:
-            pos = self.val_span[1]
-        else:
-            pos = self.val_span[0] + offset
-        return self.ctx.lines(pos)[0]
-
     # getter helpers
 
     def get_all(self):
-        return self.ctx.contents[self.span[0]:self.span[1]]
+        return self.contents[self.span[0]:self.span[1]]
 
     def get_pre_ws(self):
-        return self.ctx.contents[self.pre_ws_span[0]:self.pre_ws_span[1]]
+        return self.contents[self.pre_ws_span[0]:self.pre_ws_span[1]]
+
+    def get_pre_comment(self):
+        return self.contents[self.pre_comment_span[0]:
+                             self.pre_comment_span[1]]
 
     def get_def(self):
-        return self.ctx.contents[self.def_span[0]:self.def_span[1]]
+        return self.contents[self.def_span[0]:self.def_span[1]]
 
     def get_key(self):
-        return self.ctx.contents[self.key_span[0]:self.key_span[1]]
+        return self.contents[self.key_span[0]:self.key_span[1]]
 
     def get_val(self):
-        return self.pp(self.ctx.contents[self.val_span[0]:self.val_span[1]])
+        return self.pp(self.contents[self.val_span[0]:self.val_span[1]])
 
     def get_raw_val(self):
-        return self.ctx.contents[self.val_span[0]:self.val_span[1]]
+        return self.contents[self.val_span[0]:self.val_span[1]]
 
     def get_post(self):
-        return self.ctx.contents[self.post_span[0]:self.post_span[1]]
+        return self.contents[self.post_span[0]:self.post_span[1]]
 
     # getters
 
     all = property(get_all)
     pre_ws = property(get_pre_ws)
+    pre_comment = property(get_pre_comment)
     definition = property(get_def)
     key = property(get_key)
     val = property(get_val)
     raw_val = property(get_raw_val)
     post = property(get_post)
 
     def __repr__(self):
         return self.key
 
 
-class Entity(EntityBase):
-    pass
-
-
-class Comment(EntityBase):
-    def __init__(self, ctx, span, pre_ws_span, def_span,
-                 post_span):
-        self.ctx = ctx
-        self.span = span
-        self.pre_ws_span = pre_ws_span
-        self.def_span = def_span
-        self.post_span = post_span
-        self.pp = lambda v: v
-
-    @property
-    def key(self):
-        return None
-
-    @property
-    def val(self):
-        return None
-
-    def __repr__(self):
-        return self.all
-
-
 class Junk(object):
     '''
     An almost-Entity, representing junk data that we didn't parse.
     This way, we can signal bad content as stuff we don't understand.
     And the either fix that, or report real bugs in localizations.
     '''
     junkid = 0
 
-    def __init__(self, ctx, span):
-        self.ctx = ctx
+    def __init__(self, contents, span):
+        self.contents = contents
         self.span = span
-        self.pre_ws = self.definition = self.post = ''
+        self.pre_ws = self.pre_comment = self.definition = self.post = ''
         self.__class__.junkid += 1
         self.key = '_junk_%d_%d-%d' % (self.__class__.junkid, span[0], span[1])
 
-    def position(self, offset=0):
-        """Get the 1-based line and column of the character
-        with given offset into the Entity.
-
-        If offset is negative, return the end of the Entity.
-        """
-        if offset < 0:
-            pos = self.span[1]
-        else:
-            pos = self.span[0] + offset
-        return self.ctx.lines(pos)[0]
-
     # getter helpers
     def get_all(self):
-        return self.ctx.contents[self.span[0]:self.span[1]]
+        return self.contents[self.span[0]:self.span[1]]
 
     # getters
     all = property(get_all)
     val = property(get_all)
 
     def __repr__(self):
         return self.key
 
 
-class Whitespace(EntityBase):
-    '''Entity-like object representing an empty file with whitespace,
-    if allowed
-    '''
-    def __init__(self, ctx, span):
-        self.ctx = ctx
-        self.key_span = self.val_span = self.span = span
-        self.def_span = self.pre_ws_span = (span[0], span[0])
-        self.post_span = (span[1], span[1])
-        self.pp = lambda v: v
-
-    def __repr__(self):
-        return self.raw_val
-
-
 class Parser:
     canMerge = True
-    tail = re.compile('\s+\Z')
-
-    class Context(object):
-        "Fixture for content and line numbers"
-        def __init__(self, contents):
-            self.contents = contents
-            self._lines = None
-
-        def lines(self, *positions):
-            # return line and column tuples, 1-based
-            if self._lines is None:
-                nl = re.compile('\n', re.M)
-                self._lines = [m.end()
-                               for m in nl.finditer(self.contents)]
-            line_nrs = [bisect.bisect(self._lines, p) for p in positions]
-            # compute columns
-            pos_ = [
-                (1 + line, 1 + p - (self._lines[line-1] if line else 0))
-                for line, p in zip(line_nrs, positions)]
-            return pos_
 
     def __init__(self):
         if not hasattr(self, 'encoding'):
             self.encoding = 'utf-8'
-        self.ctx = None
-        self.last_comment = None
+        pass
 
     def readFile(self, file):
-        with open(file, 'rU') as f:
-            try:
-                self.readContents(f.read())
-            except UnicodeDecodeError, e:
-                (logging.getLogger('locales')
-                        .error("Can't read file: " + file + '; ' + str(e)))
+        f = codecs.open(file, 'r', self.encoding)
+        try:
+            self.contents = f.read()
+        except UnicodeDecodeError, e:
+            (logging.getLogger('locales')
+                    .error("Can't read file: " + file + '; ' + str(e)))
+            self.contents = u''
+        f.close()
 
     def readContents(self, contents):
-        '''Read contents and create parsing context.
-
-        contents are in native encoding, but with normalized line endings.
-        '''
-        (contents, length) = codecs.getdecoder(self.encoding)(contents)
-        self.ctx = Parser.Context(contents)
+        (self.contents, length) = codecs.getdecoder(self.encoding)(contents)
 
     def parse(self):
         l = []
         m = {}
         for e in self:
             m[e.key] = len(l)
             l.append(e)
         return (l, m)
 
     def postProcessValue(self, val):
         return val
 
     def __iter__(self):
-        return self.walk(onlyEntities=True)
-
-    def walk(self, onlyEntities=False):
-        if not self.ctx:
-            # loading file failed, or we just didn't load anything
-            return
-        ctx = self.ctx
-        contents = ctx.contents
+        contents = self.contents
         offset = 0
-        entity, offset = self.getEntity(ctx, offset)
+        self.header, offset = self.getHeader(contents, offset)
+        self.footer = ''
+        entity, offset = self.getEntity(contents, offset)
         while entity:
-            if (not onlyEntities or
-                    type(entity) is Entity or
-                    type(entity) is Junk):
-                yield entity
-            entity, offset = self.getEntity(ctx, offset)
+            yield entity
+            entity, offset = self.getEntity(contents, offset)
+        f = self.reFooter.match(contents, offset)
+        if f:
+            self.footer = f.group()
+            offset = f.end()
         if len(contents) > offset:
-            yield Junk(ctx, (offset, len(contents)))
+            yield Junk(contents, (offset, len(contents)))
+        pass
 
-    def getEntity(self, ctx, offset):
-        m = self.reKey.match(ctx.contents, offset)
+    def getHeader(self, contents, offset):
+        header = ''
+        h = self.reHeader.match(contents)
+        if h:
+            header = h.group()
+            offset = h.end()
+        return (header, offset)
+
+    def getEntity(self, contents, offset):
+        m = self.reKey.match(contents, offset)
         if m:
             offset = m.end()
-            entity = self.createEntity(ctx, m)
+            entity = self.createEntity(contents, m)
             return (entity, offset)
-        m = self.reComment.match(ctx.contents, offset)
+        # first check if footer has a non-empty match,
+        # 'cause then we don't find junk
+        m = self.reFooter.match(contents, offset)
+        if m and m.end() > offset:
+            return (None, offset)
+        m = self.reKey.search(contents, offset)
         if m:
-            offset = m.end()
-            self.last_comment = Comment(ctx, *[m.span(i) for i in xrange(4)])
-            return (self.last_comment, offset)
-        return self.getTrailing(ctx, offset, self.reKey, self.reComment)
+            # we didn't match, but search, so there's junk between offset
+            # and start. We'll match() on the next turn
+            junkend = m.start()
+            return (Junk(contents, (offset, junkend)), junkend)
+        return (None, offset)
 
-    def getTrailing(self, ctx, offset, *expressions):
-        junkend = None
-        for exp in expressions:
-            m = exp.search(ctx.contents, offset)
-            if m:
-                junkend = min(junkend, m.start()) if junkend else m.start()
-        if junkend is None:
-            if self.tail.match(ctx.contents, offset):
-                white_end = len(ctx.contents)
-                return (Whitespace(ctx, (offset, white_end)), white_end)
-            else:
-                return (None, offset)
-        return (Junk(ctx, (offset, junkend)), junkend)
-
-    def createEntity(self, ctx, m):
-        pre_comment = unicode(self.last_comment) if self.last_comment else ''
-        self.last_comment = ''
-        return Entity(ctx, self.postProcessValue, pre_comment,
-                      *[m.span(i) for i in xrange(6)])
+    def createEntity(self, contents, m):
+        return Entity(contents, self.postProcessValue,
+                      *[m.span(i) for i in xrange(7)])
 
 
 def getParser(path):
     for item in __constructors:
         if re.search(item[0], path):
             return item[1]
     raise UserWarning("Cannot find Parser")
 
@@ -324,249 +225,297 @@ class DTDParser(Parser):
         u'\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F' + \
         u'\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD'
     # + \U00010000-\U000EFFFF seems to be unsupported in python
 
     # NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 |
     #     [#x0300-#x036F] | [#x203F-#x2040]
     NameChar = NameStartChar + ur'\-\.0-9' + u'\xB7\u0300-\u036F\u203F-\u2040'
     Name = '[' + NameStartChar + '][' + NameChar + ']*'
-    reKey = re.compile('(?:(?P<pre>\s*)(?P<entity><!ENTITY\s+(?P<key>' + Name +
+    reKey = re.compile('(?:(?P<pre>\s*)(?P<precomment>(?:' + XmlComment +
+                       '\s*)*)(?P<entity><!ENTITY\s+(?P<key>' + Name +
                        ')\s+(?P<val>\"[^\"]*\"|\'[^\']*\'?)\s*>)'
-                       '(?P<post>\s*)?)',
-                       re.DOTALL | re.M)
+                       '(?P<post>[ \t]*(?:' + XmlComment + '\s*)*\n?)?)',
+                       re.DOTALL)
     # add BOM to DTDs, details in bug 435002
-    reHeader = re.compile(u'^\ufeff')
-    reComment = re.compile('(\s*)(<!--(-?[%s])*?-->)(\s*)' % CharMinusDash,
-                           re.S)
-    rePE = re.compile(u'(?:(\s*)'
-                      u'(<!ENTITY\s+%\s+(' + Name +
-                      u')\s+SYSTEM\s+(\"[^\"]*\"|\'[^\']*\')\s*>\s*%' + Name +
-                      u';)([ \t]*(?:' + XmlComment + u'\s*)*\n?)?)')
+    reHeader = re.compile(u'^\ufeff?'
+                          u'(\s*<!--.*(http://mozilla.org/MPL/2.0/|'
+                          u'LICENSE BLOCK)([^-]+-)*[^-]+-->)?', re.S)
+    reFooter = re.compile('\s*(<!--([^-]+-)*[^-]+-->\s*)*$')
+    rePE = re.compile('(?:(\s*)((?:' + XmlComment + '\s*)*)'
+                      '(<!ENTITY\s+%\s+(' + Name +
+                      ')\s+SYSTEM\s+(\"[^\"]*\"|\'[^\']*\')\s*>\s*%' + Name +
+                      ';)([ \t]*(?:' + XmlComment + '\s*)*\n?)?)')
 
-    def getEntity(self, ctx, offset):
+    def getEntity(self, contents, offset):
         '''
         Overload Parser.getEntity to special-case ParsedEntities.
         Just check for a parsed entity if that method claims junk.
 
         <!ENTITY % foo SYSTEM "url">
         %foo;
         '''
-        if offset is 0 and self.reHeader.match(ctx.contents):
-            offset += 1
-        entity, inneroffset = Parser.getEntity(self, ctx, offset)
+        entity, inneroffset = Parser.getEntity(self, contents, offset)
         if (entity and isinstance(entity, Junk)) or entity is None:
-            m = self.rePE.match(ctx.contents, offset)
+            m = self.rePE.match(contents, offset)
             if m:
                 inneroffset = m.end()
-                self.last_comment = ''
-                entity = Entity(ctx, self.postProcessValue, '',
-                                *[m.span(i) for i in xrange(6)])
+                entity = Entity(contents, self.postProcessValue,
+                                *[m.span(i) for i in xrange(7)])
         return (entity, inneroffset)
 
-    def createEntity(self, ctx, m):
+    def createEntity(self, contents, m):
         valspan = m.span('val')
         valspan = (valspan[0]+1, valspan[1]-1)
-        pre_comment = unicode(self.last_comment) if self.last_comment else ''
-        self.last_comment = ''
-        return Entity(ctx, self.postProcessValue, pre_comment,
-                      m.span(),
-                      m.span('pre'),
+        return Entity(contents, self.postProcessValue, m.span(),
+                      m.span('pre'), m.span('precomment'),
                       m.span('entity'), m.span('key'), valspan,
                       m.span('post'))
 
 
 class PropertiesParser(Parser):
     escape = re.compile(r'\\((?P<uni>u[0-9a-fA-F]{1,4})|'
                         '(?P<nl>\n\s*)|(?P<single>.))', re.M)
     known_escapes = {'n': '\n', 'r': '\r', 't': '\t', '\\': '\\'}
 
     def __init__(self):
         self.reKey = re.compile('^(\s*)'
+                                '((?:[#!].*?\n\s*)*)'
                                 '([^#!\s\n][^=:\n]*?)\s*[:=][ \t]*', re.M)
-        self.reComment = re.compile('(\s*)(((?:[#!][^\n]*\n?)+))', re.M)
+        self.reHeader = re.compile('^\s*([#!].*\s*)+')
+        self.reFooter = re.compile('\s*([#!].*\s*)*$')
         self._escapedEnd = re.compile(r'\\+$')
-        self._trailingWS = re.compile(r'\s*(?:\n|\Z)', re.M)
+        self._trailingWS = re.compile(r'[ \t]*$')
         Parser.__init__(self)
 
-    def getEntity(self, ctx, offset):
+    def getHeader(self, contents, offset):
+        header = ''
+        h = self.reHeader.match(contents, offset)
+        if h:
+            candidate = h.group()
+            if 'http://mozilla.org/MPL/2.0/' in candidate or \
+                    'LICENSE BLOCK' in candidate:
+                header = candidate
+                offset = h.end()
+        return (header, offset)
+
+    def getEntity(self, contents, offset):
         # overwritten to parse values line by line
-        contents = ctx.contents
-        m = self.reComment.match(contents, offset)
-        if m:
-            spans = [m.span(i) for i in xrange(3)]
-            start_trailing = offset = m.end()
-            while offset < len(contents):
-                m = self._trailingWS.match(contents, offset)
-                if not m:
-                    break
-                offset = m.end()
-            spans.append((start_trailing, offset))
-            self.last_comment = Comment(ctx, *spans)
-            return (self.last_comment, offset)
         m = self.reKey.match(contents, offset)
         if m:
-            startline = offset = m.end()
+            offset = m.end()
             while True:
                 endval = nextline = contents.find('\n', offset)
                 if nextline == -1:
                     endval = offset = len(contents)
                     break
                 # is newline escaped?
                 _e = self._escapedEnd.search(contents, offset, nextline)
                 offset = nextline + 1
                 if _e is None:
                     break
                 # backslashes at end of line, if 2*n, not escaped
                 if len(_e.group()) % 2 == 0:
                     break
-                startline = offset
             # strip trailing whitespace
-            ws = self._trailingWS.search(contents, startline)
+            ws = self._trailingWS.search(contents, m.end(), offset)
             if ws:
-                endval = ws.start()
-                offset = ws.end()
-            pre_comment = (unicode(self.last_comment) if self.last_comment
-                           else '')
-            self.last_comment = ''
-            entity = Entity(ctx, self.postProcessValue, pre_comment,
+                endval -= ws.end() - ws.start()
+            entity = Entity(contents, self.postProcessValue,
                             (m.start(), offset),   # full span
                             m.span(1),  # leading whitespan
-                            (m.start(2), offset),   # entity def span
-                            m.span(2),   # key span
+                            m.span(2),  # leading comment span
+                            (m.start(3), offset),   # entity def span
+                            m.span(3),   # key span
                             (m.end(), endval),   # value span
                             (offset, offset))  # post comment span, empty
             return (entity, offset)
-        return self.getTrailing(ctx, offset, self.reKey, self.reComment)
+        m = self.reKey.search(contents, offset)
+        if m:
+            # we didn't match, but search, so there's junk between offset
+            # and start. We'll match() on the next turn
+            junkend = m.start()
+            return (Junk(contents, (offset, junkend)), junkend)
+        return (None, offset)
 
     def postProcessValue(self, val):
 
         def unescape(m):
             found = m.groupdict()
             if found['uni']:
                 return unichr(int(found['uni'][1:], 16))
             if found['nl']:
                 return ''
             return self.known_escapes.get(found['single'], found['single'])
         val = self.escape.sub(unescape, val)
         return val
 
 
-class DefinesInstruction(EntityBase):
-    '''Entity-like object representing processing instructions in inc files
-    '''
-    def __init__(self, ctx, span, pre_ws_span, def_span, val_span, post_span):
-        self.ctx = ctx
-        self.span = span
-        self.pre_ws_span = pre_ws_span
-        self.def_span = def_span
-        self.key_span = self.val_span = val_span
-        self.post_span = post_span
-        self.pp = lambda v: v
-
-    def __repr__(self):
-        return self.raw_val
-
-
 class DefinesParser(Parser):
     # can't merge, #unfilter needs to be the last item, which we don't support
     canMerge = False
-    tail = re.compile(r'(?!)')  # never match
 
     def __init__(self):
-        self.reComment = re.compile(
-            '((?:[ \t]*\n)*)'
-            '((?:^# .*?(?:\n|\Z))+)'
-            '((?:[ \t]*(?:\n|\Z))*)', re.M)
-        self.reKey = re.compile('((?:[ \t]*\n)*)'
-                                '(#define[ \t]+(\w+)(?:[ \t](.*?))?(?:\n|\Z))'
-                                '((?:[ \t]*(?:\n|\Z))*)',
+        self.reKey = re.compile('^(\s*)((?:^#(?!define\s).*\s*)*)'
+                                '(#define[ \t]+(\w+)[ \t]+(.*?))([ \t]*$\n?)',
                                 re.M)
-        self.rePI = re.compile('((?:[ \t]*\n)*)'
-                               '(#(\w+)[ \t]+(.*?)(?:\n|\Z))'
-                               '((?:[ \t]*(?:\n|\Z))*)',
-                               re.M)
+        self.reHeader = re.compile('^\s*(#(?!define\s).*\s*)*')
+        self.reFooter = re.compile('\s*(#(?!define\s).*\s*)*$', re.M)
         Parser.__init__(self)
 
-    def getEntity(self, ctx, offset):
-        contents = ctx.contents
-        m = self.reComment.match(contents, offset)
-        if m:
-            offset = m.end()
-            self.last_comment = Comment(ctx, *[m.span(i) for i in xrange(4)])
-            return (self.last_comment, offset)
-        m = self.reKey.match(contents, offset)
-        if m:
-            offset = m.end()
-            return (self.createEntity(ctx, m), offset)
-        m = self.rePI.match(contents, offset)
-        if m:
-            offset = m.end()
-            return (DefinesInstruction(ctx, *[m.span(i) for i in xrange(5)]),
-                    offset)
-        return self.getTrailing(ctx, offset,
-                                self.reComment, self.reKey, self.rePI)
-
-
-class IniSection(EntityBase):
-    '''Entity-like object representing sections in ini files
-    '''
-    def __init__(self, ctx, span, pre_ws_span, def_span, val_span, post_span):
-        self.ctx = ctx
-        self.span = span
-        self.pre_ws_span = pre_ws_span
-        self.def_span = def_span
-        self.key_span = self.val_span = val_span
-        self.post_span = post_span
-        self.pp = lambda v: v
-
-    def __repr__(self):
-        return self.raw_val
-
 
 class IniParser(Parser):
     '''
     Parse files of the form:
     # initial comment
     [cat]
     whitespace*
     #comment
     string=value
     ...
     '''
     def __init__(self):
-        self.reComment = re.compile(
-            '((?:[ \t]*\n)*)'
-            '((?:^[;#].*?(?:\n|\Z))+)'
-            '((?:[ \t]*(?:\n|\Z))*)', re.M)
-        self.reSection = re.compile(
-            '((?:[ \t]*\n)*)'
-            '(\[(.*?)\])'
-            '((?:[ \t]*(?:\n|\Z))*)', re.M)
-        self.reKey = re.compile(
-            '((?:[ \t]*\n)*)'
-            '((.+?)=(.*))'
-            '((?:[ \t]*(?:\n|\Z))*)', re.M)
+        self.reHeader = re.compile('^((?:\s*|[;#].*)\n)*\[.+?\]\n', re.M)
+        self.reKey = re.compile('(\s*)((?:[;#].*\n\s*)*)((.+?)=(.*))(\n?)')
+        self.reFooter = re.compile('\s*([;#].*\s*)*$')
         Parser.__init__(self)
 
-    def getEntity(self, ctx, offset):
-        contents = ctx.contents
-        m = self.reComment.match(contents, offset)
-        if m:
-            offset = m.end()
-            self.last_comment = Comment(ctx, *[m.span(i) for i in xrange(4)])
-            return (self.last_comment, offset)
-        m = self.reSection.match(contents, offset)
-        if m:
-            offset = m.end()
-            return (IniSection(ctx, *[m.span(i) for i in xrange(5)]), offset)
-        m = self.reKey.match(contents, offset)
-        if m:
-            offset = m.end()
-            return (self.createEntity(ctx, m), offset)
-        return self.getTrailing(ctx, offset,
-                                self.reComment, self.reSection, self.reKey)
+
+DECL, COMMENT, START, END, CONTENT = range(5)
+
+
+class BookmarksParserInner(HTMLParser):
+
+    class Token(object):
+        _type = None
+        content = ''
+
+        def __str__(self):
+            return self.content
+
+    class DeclToken(Token):
+        _type = DECL
+
+        def __init__(self, decl):
+            self.content = decl
+            pass
+
+        def __str__(self):
+            return '<!%s>' % self.content
+        pass
+
+    class CommentToken(Token):
+        _type = COMMENT
+
+        def __init__(self, comment):
+            self.content = comment
+            pass
+
+        def __str__(self):
+            return '<!--%s-->' % self.content
+        pass
+
+    class StartToken(Token):
+        _type = START
+
+        def __init__(self, tag, attrs, content):
+            self.tag = tag
+            self.attrs = dict(attrs)
+            self.content = content
+            pass
+        pass
+
+    class EndToken(Token):
+        _type = END
+
+        def __init__(self, tag):
+            self.tag = tag
+            pass
+
+        def __str__(self):
+            return '</%s>' % self.tag.upper()
+        pass
+
+    class ContentToken(Token):
+        _type = CONTENT
+
+        def __init__(self, content):
+            self.content = content
+            pass
+        pass
+
+    def __init__(self):
+        HTMLParser.__init__(self)
+        self.tokens = []
+
+    def parse(self, contents):
+        self.tokens = []
+        self.feed(contents)
+        self.close()
+        return self.tokens
+
+    # Called when we hit an end DL tag to reset the folder selections
+    def handle_decl(self, decl):
+        self.tokens.append(self.DeclToken(decl))
+
+    # Called when we hit an end DL tag to reset the folder selections
+    def handle_comment(self, comment):
+        self.tokens.append(self.CommentToken(comment))
+
+    def handle_starttag(self, tag, attrs):
+        self.tokens.append(self.StartToken(tag, attrs,
+                                           self.get_starttag_text()))
+
+    # Called when text data is encountered
+    def handle_data(self, data):
+        if self.tokens[-1]._type == CONTENT:
+            self.tokens[-1].content += data
+        else:
+            self.tokens.append(self.ContentToken(data))
+
+    def handle_charref(self, data):
+        self.handle_data('&#%s;' % data)
+
+    def handle_entityref(self, data):
+        self.handle_data('&%s;' % data)
+
+    # Called when we hit an end DL tag to reset the folder selections
+    def handle_endtag(self, tag):
+        self.tokens.append(self.EndToken(tag))
+
+
+class BookmarksParser(Parser):
+    canMerge = False
+
+    class BMEntity(object):
+        def __init__(self, key, val):
+            self.key = key
+            self.val = val
+
+    def __iter__(self):
+        p = BookmarksParserInner()
+        tks = p.parse(self.contents)
+        i = 0
+        k = []
+        for i in xrange(len(tks)):
+            t = tks[i]
+            if t._type == START:
+                k.append(t.tag)
+                keys = t.attrs.keys()
+                keys.sort()
+                for attrname in keys:
+                    yield self.BMEntity('.'.join(k) + '.@' + attrname,
+                                        t.attrs[attrname])
+                if i + 1 < len(tks) and tks[i+1]._type == CONTENT:
+                    i += 1
+                    t = tks[i]
+                    v = t.content.strip()
+                    if v:
+                        yield self.BMEntity('.'.join(k), v)
+            elif t._type == END:
+                k.pop()
 
 
 __constructors = [('\\.dtd$', DTDParser()),
                   ('\\.properties$', PropertiesParser()),
                   ('\\.ini$', IniParser()),
-                  ('\\.inc$', DefinesParser())]
+                  ('\\.inc$', DefinesParser()),
+                  ('bookmarks\\.html$', BookmarksParser())]
--- a/python/compare-locales/compare_locales/tests/__init__.py
+++ b/python/compare-locales/compare_locales/tests/__init__.py
@@ -4,28 +4,28 @@
 
 '''Mixins for parser tests.
 '''
 
 from itertools import izip_longest
 from pkg_resources import resource_string
 import re
 
-from compare_locales import parser
+from compare_locales.parser import getParser
 
 
 class ParserTestMixin():
     '''Utility methods used by the parser tests.
     '''
     filename = None
 
     def setUp(self):
         '''Create a parser for this test.
         '''
-        self.parser = parser.getParser(self.filename)
+        self.parser = getParser(self.filename)
 
     def tearDown(self):
         'tear down this test'
         del self.parser
 
     def resource(self, name):
         testcontent = resource_string(__name__, 'data/' + name)
         # fake universal line endings
@@ -33,18 +33,17 @@ class ParserTestMixin():
         return testcontent
 
     def _test(self, content, refs):
         '''Helper to test the parser.
         Compares the result of parsing content with the given list
         of reference keys and values.
         '''
         self.parser.readContents(content)
-        entities = list(self.parser.walk())
+        entities = [entity for entity in self.parser]
         for entity, ref in izip_longest(entities, refs):
-            self.assertTrue(entity, 'excess reference entity ' + unicode(ref))
-            self.assertTrue(ref, 'excess parsed entity ' + unicode(entity))
-            if isinstance(entity, parser.Entity):
+            self.assertTrue(entity, 'excess reference entity')
+            self.assertTrue(ref, 'excess parsed entity')
+            self.assertEqual(entity.val, ref[1])
+            if ref[0].startswith('_junk'):
+                self.assertTrue(re.match(ref[0], entity.key))
+            else:
                 self.assertEqual(entity.key, ref[0])
-                self.assertEqual(entity.val, ref[1])
-            else:
-                self.assertEqual(type(entity).__name__, ref[0])
-                self.assertIn(ref[1], entity.all)
--- a/python/compare-locales/compare_locales/tests/test_checks.py
+++ b/python/compare-locales/compare_locales/tests/test_checks.py
@@ -1,17 +1,17 @@
 # -*- coding: utf-8 -*-
 # 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/.
 
 import unittest
 
 from compare_locales.checks import getChecker
-from compare_locales.parser import getParser, Parser, Entity
+from compare_locales.parser import getParser, Entity
 from compare_locales.paths import File
 
 
 class BaseHelper(unittest.TestCase):
     file = None
     refContent = None
 
     def setUp(self):
@@ -234,26 +234,24 @@ class TestAndroid(unittest.TestCase):
     we're passing in a DTD file in the embedding/android module.
     """
     apos_msg = u"Apostrophes in Android DTDs need escaping with \\' or " + \
                u"\\u0027, or use \u2019, or put string in quotes."
     quot_msg = u"Quotes in Android DTDs need escaping with \\\" or " + \
                u"\\u0022, or put string in apostrophes."
 
     def getEntity(self, v):
-        ctx = Parser.Context(v)
-        return Entity(ctx, lambda s: s, '', (0, len(v)), (), (), (),
+        return Entity(v, lambda s: s, (0, len(v)), (), (0, 0), (), (),
                       (0, len(v)), ())
 
     def getDTDEntity(self, v):
         v = v.replace('"', '&quot;')
-        ctx = Parser.Context('<!ENTITY foo "%s">' % v)
-        return Entity(ctx,
-                      lambda s: s, '',
-                      (0, len(v) + 16), (), (), (9, 12),
+        return Entity('<!ENTITY foo "%s">' % v,
+                      lambda s: s,
+                      (0, len(v) + 16), (), (0, 0), (), (9, 12),
                       (14, len(v) + 14), ())
 
     def test_android_dtd(self):
         """Testing the actual android checks. The logic is involved,
         so this is a lot of nitty gritty detail tests.
         """
         f = File("embedding/android/strings.dtd", "strings.dtd",
                  "embedding/android")
deleted file mode 100644
--- a/python/compare-locales/compare_locales/tests/test_defines.py
+++ /dev/null
@@ -1,95 +0,0 @@
-# -*- coding: utf-8 -*-
-# 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/.
-
-import unittest
-
-from compare_locales.tests import ParserTestMixin
-
-
-mpl2 = '''\
-# 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/.
-'''
-
-
-class TestDefinesParser(ParserTestMixin, unittest.TestCase):
-
-    filename = 'defines.inc'
-
-    def testBrowser(self):
-        self._test(mpl2 + '''#filter emptyLines
-
-#define MOZ_LANGPACK_CREATOR mozilla.org
-
-# If non-English locales wish to credit multiple contributors, uncomment this
-# variable definition and use the format specified.
-# #define MOZ_LANGPACK_CONTRIBUTORS <em:contributor>Joe Solon</em:contributor>
-
-#unfilter emptyLines
-
-''', (
-            ('Comment', mpl2),
-            ('DefinesInstruction', 'filter emptyLines'),
-            ('MOZ_LANGPACK_CREATOR', 'mozilla.org'),
-            ('Comment', '#define'),
-            ('DefinesInstruction', 'unfilter emptyLines')))
-
-    def testBrowserWithContributors(self):
-        self._test(mpl2 + '''#filter emptyLines
-
-#define MOZ_LANGPACK_CREATOR mozilla.org
-
-# If non-English locales wish to credit multiple contributors, uncomment this
-# variable definition and use the format specified.
-#define MOZ_LANGPACK_CONTRIBUTORS <em:contributor>Joe Solon</em:contributor>
-
-#unfilter emptyLines
-
-''', (
-            ('Comment', mpl2),
-            ('DefinesInstruction', 'filter emptyLines'),
-            ('MOZ_LANGPACK_CREATOR', 'mozilla.org'),
-            ('Comment', 'non-English'),
-            ('MOZ_LANGPACK_CONTRIBUTORS',
-             '<em:contributor>Joe Solon</em:contributor>'),
-            ('DefinesInstruction', 'unfilter emptyLines')))
-
-    def testCommentWithNonAsciiCharacters(self):
-        self._test(mpl2 + '''#filter emptyLines
-
-# e.g. #define seamonkey_l10n <DT><A HREF="http://www.mozilla.cz/produkty/seamonkey/">SeaMonkey v češtině</a>
-#define seamonkey_l10n_long
-
-#unfilter emptyLines
-
-''', (
-            ('Comment', mpl2),
-            ('DefinesInstruction', 'filter emptyLines'),
-            ('Comment', u'češtině'),
-            ('seamonkey_l10n_long', ''),
-            ('DefinesInstruction', 'unfilter emptyLines')))
-
-    def testToolkit(self):
-        self._test('''#define MOZ_LANG_TITLE English (US)
-''', (
-            ('MOZ_LANG_TITLE', 'English (US)'),))
-
-    def testToolkitEmpty(self):
-        self._test('', tuple())
-
-    def test_empty_file(self):
-        '''Test that empty files generate errors
-
-        defines.inc are interesting that way, as their
-        content is added to the generated file.
-        '''
-        self._test('\n', (('Junk', '\n'),))
-        self._test('\n\n', (('Junk', '\n\n'),))
-        self._test(' \n\n', (('Junk', ' \n\n'),))
-
-
-if __name__ == '__main__':
-    unittest.main()
--- a/python/compare-locales/compare_locales/tests/test_dtd.py
+++ b/python/compare-locales/compare_locales/tests/test_dtd.py
@@ -3,17 +3,17 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 '''Tests for the DTD parser.
 '''
 
 import unittest
 import re
 
-from compare_locales import parser
+from compare_locales.parser import getParser
 from compare_locales.tests import ParserTestMixin
 
 
 class TestDTD(ParserTestMixin, unittest.TestCase):
     '''Tests for the DTD Parser.'''
     filename = 'foo.dtd'
 
     def test_one_entity(self):
@@ -25,19 +25,19 @@ class TestDTD(ParserTestMixin, unittest.
 <!ENTITY good.two "two">
 <!ENTITY bad.two "bad "quoted" word">
 <!ENTITY good.three "three">
 <!ENTITY good.four "good ' quote">
 <!ENTITY good.five "good 'quoted' word">
 '''
     quoteRef = (
         ('good.one', 'one'),
-        ('Junk', '<!ENTITY bad.one "bad " quote">'),
+        ('_junk_\\d_25-56$', '<!ENTITY bad.one "bad " quote">'),
         ('good.two', 'two'),
-        ('Junk', '<!ENTITY bad.two "bad "quoted" word">'),
+        ('_junk_\\d_82-119$', '<!ENTITY bad.two "bad "quoted" word">'),
         ('good.three', 'three'),
         ('good.four', 'good \' quote'),
         ('good.five', 'good \'quoted\' word'),)
 
     def test_quotes(self):
         self._test(self.quoteContent, self.quoteRef)
 
     def test_apos(self):
@@ -57,73 +57,30 @@ class TestDTD(ParserTestMixin, unittest.
 
     def test_trailing_comment(self):
         self._test('''<!ENTITY first "string">
 <!ENTITY second "string">
 <!--
 <!ENTITY commented "out">
 -->
 ''',
-                   (('first', 'string'), ('second', 'string'),
-                    ('Comment', 'out')))
+                   (('first', 'string'), ('second', 'string')))
 
     def test_license_header(self):
-        p = parser.getParser('foo.dtd')
+        p = getParser('foo.dtd')
         p.readContents(self.resource('triple-license.dtd'))
-        entities = list(p.walk())
-        self.assert_(isinstance(entities[0], parser.Comment))
-        self.assertIn('MPL', entities[0].all)
-        e = entities[1]
-        self.assert_(isinstance(e, parser.Entity))
-        self.assertEqual(e.key, 'foo')
-        self.assertEqual(e.val, 'value')
-        self.assertEqual(len(entities), 2)
+        for e in p:
+            self.assertEqual(e.key, 'foo')
+            self.assertEqual(e.val, 'value')
+        self.assert_('MPL' in p.header)
         p.readContents('''\
 <!-- 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/.  -->
 <!ENTITY foo "value">
 ''')
-        entities = list(p.walk())
-        self.assert_(isinstance(entities[0], parser.Comment))
-        self.assertIn('MPL', entities[0].all)
-        e = entities[1]
-        self.assert_(isinstance(e, parser.Entity))
-        self.assertEqual(e.key, 'foo')
-        self.assertEqual(e.val, 'value')
-        self.assertEqual(len(entities), 2)
-
-    def testBOM(self):
-        self._test(u'\ufeff<!ENTITY foo.label "stuff">'.encode('utf-8'),
-                   (('foo.label', 'stuff'),))
-
-    def test_trailing_whitespace(self):
-        self._test('<!ENTITY foo.label "stuff">\n  \n',
-                   (('foo.label', 'stuff'),))
-
-    def test_unicode_comment(self):
-        self._test('<!-- \xe5\x8f\x96 -->',
-                   (('Comment', u'\u53d6'),))
-
-    def test_empty_file(self):
-        self._test('', tuple())
-        self._test('\n', (('Whitespace', '\n'),))
-        self._test('\n\n', (('Whitespace', '\n\n'),))
-        self._test(' \n\n', (('Whitespace', ' \n\n'),))
-
-    def test_positions(self):
-        self.parser.readContents('''\
-<!ENTITY one  "value">
-<!ENTITY  two "other
-escaped value">
-''')
-        one, two = list(self.parser)
-        self.assertEqual(one.position(), (1, 1))
-        self.assertEqual(one.value_position(), (1, 16))
-        self.assertEqual(one.position(-1), (2, 1))
-        self.assertEqual(two.position(), (2, 1))
-        self.assertEqual(two.value_position(), (2, 16))
-        self.assertEqual(two.value_position(-1), (3, 14))
-        self.assertEqual(two.value_position(10), (3, 5))
-
+        for e in p:
+            self.assertEqual(e.key, 'foo')
+            self.assertEqual(e.val, 'value')
+        self.assert_('MPL' in p.header)
 
 if __name__ == '__main__':
     unittest.main()
--- a/python/compare-locales/compare_locales/tests/test_ini.py
+++ b/python/compare-locales/compare_locales/tests/test_ini.py
@@ -18,122 +18,98 @@ mpl2 = '''\
 class TestIniParser(ParserTestMixin, unittest.TestCase):
 
     filename = 'foo.ini'
 
     def testSimpleHeader(self):
         self._test('''; This file is in the UTF-8 encoding
 [Strings]
 TitleText=Some Title
-''', (
-            ('Comment', 'UTF-8 encoding'),
-            ('IniSection', 'Strings'),
-            ('TitleText', 'Some Title'),))
+''', (('TitleText', 'Some Title'),))
+        self.assert_('UTF-8' in self.parser.header)
 
     def testMPL2_Space_UTF(self):
         self._test(mpl2 + '''
 ; This file is in the UTF-8 encoding
 [Strings]
 TitleText=Some Title
-''', (
-            ('Comment', mpl2),
-            ('Comment', 'UTF-8'),
-            ('IniSection', 'Strings'),
-            ('TitleText', 'Some Title'),))
+''', (('TitleText', 'Some Title'),))
+        self.assert_('MPL' in self.parser.header)
 
     def testMPL2_Space(self):
         self._test(mpl2 + '''
 [Strings]
 TitleText=Some Title
-''', (
-            ('Comment', mpl2),
-            ('IniSection', 'Strings'),
-            ('TitleText', 'Some Title'),))
+''', (('TitleText', 'Some Title'),))
+        self.assert_('MPL' in self.parser.header)
 
     def testMPL2_MultiSpace(self):
         self._test(mpl2 + '''\
 
 ; more comments
 
 [Strings]
 TitleText=Some Title
-''', (
-            ('Comment', mpl2),
-            ('Comment', 'more comments'),
-            ('IniSection', 'Strings'),
-            ('TitleText', 'Some Title'),))
+''', (('TitleText', 'Some Title'),))
+        self.assert_('MPL' in self.parser.header)
 
     def testMPL2_JunkBeforeCategory(self):
         self._test(mpl2 + '''\
 Junk
 [Strings]
 TitleText=Some Title
-''', (
-            ('Comment', mpl2),
-            ('Junk', 'Junk'),
-            ('IniSection', 'Strings'),
-            ('TitleText', 'Some Title')))
+''', (('_junk_\\d+_0-213$', mpl2 + '''\
+Junk
+[Strings]'''), ('TitleText', 'Some Title')))
+        self.assert_('MPL' not in self.parser.header)
 
     def test_TrailingComment(self):
         self._test(mpl2 + '''
 [Strings]
 TitleText=Some Title
 ;Stray trailing comment
-''', (
-            ('Comment', mpl2),
-            ('IniSection', 'Strings'),
-            ('TitleText', 'Some Title'),
-            ('Comment', 'Stray trailing')))
+''', (('TitleText', 'Some Title'),))
+        self.assert_('MPL' in self.parser.header)
 
     def test_SpacedTrailingComments(self):
         self._test(mpl2 + '''
 [Strings]
 TitleText=Some Title
 
 ;Stray trailing comment
 ;Second stray comment
 
-''', (
-            ('Comment', mpl2),
-            ('IniSection', 'Strings'),
-            ('TitleText', 'Some Title'),
-            ('Comment', 'Second stray comment')))
+''', (('TitleText', 'Some Title'),))
+        self.assert_('MPL' in self.parser.header)
 
     def test_TrailingCommentsAndJunk(self):
         self._test(mpl2 + '''
 [Strings]
 TitleText=Some Title
 
 ;Stray trailing comment
 Junk
 ;Second stray comment
 
-''', (
-            ('Comment', mpl2),
-            ('IniSection', 'Strings'),
-            ('TitleText', 'Some Title'),
-            ('Comment', 'Stray trailing'),
-            ('Junk', 'Junk'),
-            ('Comment', 'Second stray comment')))
+''', (('TitleText', 'Some Title'), ('_junk_\\d+_231-284$', '''\
+
+;Stray trailing comment
+Junk
+;Second stray comment
+
+''')))
+        self.assert_('MPL' in self.parser.header)
 
     def test_JunkInbetweenEntries(self):
         self._test(mpl2 + '''
 [Strings]
 TitleText=Some Title
 
 Junk
 
 Good=other string
-''', (
-            ('Comment', mpl2),
-            ('IniSection', 'Strings'),
-            ('TitleText', 'Some Title'),
-            ('Junk', 'Junk'),
-            ('Good', 'other string')))
+''', (('TitleText', 'Some Title'), ('_junk_\\d+_231-236$', '''\
 
-    def test_empty_file(self):
-        self._test('', tuple())
-        self._test('\n', (('Whitespace', '\n'),))
-        self._test('\n\n', (('Whitespace', '\n\n'),))
-        self._test(' \n\n', (('Whitespace', ' \n\n'),))
+Junk'''), ('Good', 'other string')))
+        self.assert_('MPL' in self.parser.header)
 
 if __name__ == '__main__':
     unittest.main()
--- a/python/compare-locales/compare_locales/tests/test_merge.py
+++ b/python/compare-locales/compare_locales/tests/test_merge.py
@@ -8,32 +8,32 @@ from tempfile import mkdtemp
 import shutil
 
 from compare_locales.parser import getParser
 from compare_locales.paths import File
 from compare_locales.compare import ContentComparer
 
 
 class ContentMixin(object):
+    maxDiff = None  # we got big dictionaries to compare
     extension = None  # OVERLOAD
 
     def reference(self, content):
         self.ref = os.path.join(self.tmp, "en-reference" + self.extension)
         open(self.ref, "w").write(content)
 
     def localized(self, content):
         self.l10n = os.path.join(self.tmp, "l10n" + self.extension)
         open(self.l10n, "w").write(content)
 
 
 class TestProperties(unittest.TestCase, ContentMixin):
     extension = '.properties'
 
     def setUp(self):
-        self.maxDiff = None
         self.tmp = mkdtemp()
         os.mkdir(os.path.join(self.tmp, "merge"))
 
     def tearDown(self):
         shutil.rmtree(self.tmp)
         del self.tmp
 
     def testGood(self):
@@ -93,18 +93,17 @@ eff = effVal""")
         [m, n] = p.parse()
         self.assertEqual(map(lambda e: e.key,  m), ["bar", "eff", "foo"])
 
     def testError(self):
         self.assertTrue(os.path.isdir(self.tmp))
         self.reference("""foo = fooVal
 bar = %d barVal
 eff = effVal""")
-        self.localized("""\
-bar = %S lBar
+        self.localized("""bar = %S lBar
 eff = leffVal
 """)
         cc = ContentComparer()
         cc.set_merge_stage(os.path.join(self.tmp, "merge"))
         cc.compare(File(self.ref, "en-reference.properties", ""),
                    File(self.l10n, "l10n.properties", ""))
         self.assertDictEqual(
             cc.observer.toJSON(),
@@ -112,17 +111,17 @@ eff = leffVal
                 {None: {
                     'changed': 2, 'errors': 1, 'missing': 1
                 }},
              'details': {
                  'children': [
                      ('l10n.properties',
                          {'value': {
                           'error': [u'argument 1 `S` should be `d` '
-                                    u'at line 1, column 7 for bar'],
+                                    u'at line 1, column 6 for bar'],
                           'missingEntity': [u'foo']}}
                       )
                  ]}
              }
         )
         mergefile = os.path.join(self.tmp, "merge", "l10n.properties")
         self.assertTrue(os.path.isfile(mergefile))
         p = getParser(mergefile)
@@ -156,17 +155,16 @@ eff = leffVal
              }
         )
 
 
 class TestDTD(unittest.TestCase, ContentMixin):
     extension = '.dtd'
 
     def setUp(self):
-        self.maxDiff = None
         self.tmp = mkdtemp()
         os.mkdir(os.path.join(self.tmp, "merge"))
 
     def tearDown(self):
         shutil.rmtree(self.tmp)
         del self.tmp
 
     def testGood(self):
@@ -245,19 +243,17 @@ class TestDTD(unittest.TestCase, Content
                 {None: {
                     'errors': 1, 'missing': 1, 'unchanged': 2
                 }},
              'details': {
                  'children': [
                      ('l10n.dtd',
                          {'value': {
                              'error': [u'Unparsed content "<!ENTY bar '
-                                       u'\'gimmick\'>" '
-                                       u'from line 2 colum 1 to '
-                                       u'line 2 column 22'],
+                                       u'\'gimmick\'>" at 23-44'],
                              'missingEntity': [u'bar']}}
                       )
                  ]}
              }
         )
         mergefile = os.path.join(self.tmp, "merge", "l10n.dtd")
         self.assertTrue(os.path.isfile(mergefile))
         p = getParser(mergefile)
deleted file mode 100644
--- a/python/compare-locales/compare_locales/tests/test_parser.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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/.
-
-import unittest
-
-from compare_locales import parser
-
-
-class TestParserContext(unittest.TestCase):
-    def test_lines(self):
-        "Test that Parser.Context.lines returns 1-based tuples"
-        ctx = parser.Parser.Context('''first line
-second line
-third line
-''')
-        self.assertEqual(
-            ctx.lines(0, 1),
-            [(1, 1), (1, 2)]
-        )
-        self.assertEqual(
-            ctx.lines(len('first line')),
-            [(1, len('first line') + 1)]
-        )
-        self.assertEqual(
-            ctx.lines(len('first line') + 1),
-            [(2, 1)]
-        )
-        self.assertEqual(
-            ctx.lines(len(ctx.contents)),
-            [(4, 1)]
-        )
-
-    def test_empty_parser(self):
-        p = parser.Parser()
-        entities, _map = p.parse()
-        self.assertListEqual(
-            entities,
-            []
-        )
-        self.assertDictEqual(
-            _map,
-            {}
-        )
--- a/python/compare-locales/compare_locales/tests/test_properties.py
+++ b/python/compare-locales/compare_locales/tests/test_properties.py
@@ -19,17 +19,17 @@ of two lines
 one_line_trailing = This line ends in \\
 and has junk
 two_lines_triple = This line is one of two and ends in \\\
 and still has another line coming
 ''', (
             ('one_line', 'This is one line'),
             ('two_line', u'This is the first of two lines'),
             ('one_line_trailing', u'This line ends in \\'),
-            ('Junk', 'and has junk\n'),
+            ('_junk_\\d+_113-126$', 'and has junk\n'),
             ('two_lines_triple', 'This line is one of two and ends in \\'
              'and still has another line coming')))
 
     def testProperties(self):
         # port of netwerk/test/PropertiesTest.cpp
         self.parser.readContents(self.resource('test.properties'))
         ref = ['1', '2', '3', '4', '5', '6', '7', '8',
                'this is the first part of a continued line '
@@ -58,17 +58,18 @@ and an end''', (('bar', 'one line with a
 
     def test_license_header(self):
         self._test('''\
 # 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/.
 
 foo=value
-''', (('Comment', 'MPL'), ('foo', 'value')))
+''', (('foo', 'value'),))
+        self.assert_('MPL' in self.parser.header)
 
     def test_escapes(self):
         self.parser.readContents(r'''
 # unicode escapes
 zero = some \unicode
 one = \u0
 two = \u41
 three = \u042
@@ -82,69 +83,13 @@ seven = \n\r\t\\
             self.assertEqual(e.val, r)
 
     def test_trailing_comment(self):
         self._test('''first = string
 second = string
 
 #
 #commented out
-''', (('first', 'string'), ('second', 'string'),
-            ('Comment', 'commented out')))
-
-    def test_trailing_newlines(self):
-        self._test('''\
-foo = bar
-
-\x20\x20
-  ''', (('foo', 'bar'),))
-
-    def test_just_comments(self):
-        self._test('''\
-# 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/.
-
-# LOCALIZATION NOTE These strings are used inside the Promise debugger
-# which is available as a panel in the Debugger.
-''', (('Comment', 'MPL'), ('Comment', 'LOCALIZATION NOTE')))
-
-    def test_just_comments_without_trailing_newline(self):
-        self._test('''\
-# 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/.
+''', (('first', 'string'), ('second', 'string')))
 
-# LOCALIZATION NOTE These strings are used inside the Promise debugger
-# which is available as a panel in the Debugger.''', (
-            ('Comment', 'MPL'), ('Comment', 'LOCALIZATION NOTE')))
-
-    def test_trailing_comment_and_newlines(self):
-        self._test('''\
-# LOCALIZATION NOTE These strings are used inside the Promise debugger
-# which is available as a panel in the Debugger.
-
-
-
-''',  (('Comment', 'LOCALIZATION NOTE'),))
-
-    def test_empty_file(self):
-        self._test('', tuple())
-        self._test('\n', (('Whitespace', '\n'),))
-        self._test('\n\n', (('Whitespace', '\n\n'),))
-        self._test(' \n\n', (('Whitespace', ' \n\n'),))
-
-    def test_positions(self):
-        self.parser.readContents('''\
-one = value
-two = other \\
-escaped value
-''')
-        one, two = list(self.parser)
-        self.assertEqual(one.position(), (1, 1))
-        self.assertEqual(one.value_position(), (1, 7))
-        self.assertEqual(two.position(), (2, 1))
-        self.assertEqual(two.value_position(), (2, 7))
-        self.assertEqual(two.value_position(-1), (3, 14))
-        self.assertEqual(two.value_position(10), (3, 3))
 
 if __name__ == '__main__':
     unittest.main()
--- a/python/compare-locales/compare_locales/webapps.py
+++ b/python/compare-locales/compare_locales/webapps.py
@@ -78,17 +78,17 @@ class Manifest(object):
         return self._strings
 
     def load_and_parse(self):
         try:
             manifest = json.load(open(self.file.fullpath))
         except (ValueError, IOError), e:
             if self.watcher:
                 self.watcher.notify('error', self.file, str(e))
-            return {}
+            return False
         return self.extract_manifest_strings(manifest)
 
     def extract_manifest_strings(self, manifest_fragment):
         '''Extract localizable strings from a manifest dict.
         This method is recursive, and returns a two-level dict,
         first level being locale codes, second level being generated
         key and localized value. Keys are generated by concatenating
         each level in the json with a ".".
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1160,9 +1160,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 = 464;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1488637323624000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1488810073758000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -22,34 +22,32 @@ 25daysof.io: could not connect to host
 2859cc.com: could not connect to host
 2or3.tk: could not connect to host
 300651.ru: did not receive HSTS header
 302.nyc: could not connect to host
 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
-404.sh: could not connect to host
 420dongstorm.com: could not connect to host
 42ms.org: could not connect to host
 4455software.com: did not receive HSTS header
 4679.space: could not connect to host
 47ronin.com: did not receive HSTS header
 491mhz.net: could not connect to host
 4elements.com: did not receive HSTS header
 4eyes.ch: did not receive HSTS header
 4mm.org: could not connect to host
 4sqsu.eu: could not connect to host
 50millionablaze.org: did not receive HSTS header
 56ct.com: could not connect to host
 60ych.net: did not receive HSTS header
 7kovrikov.ru: did not receive HSTS header
 808.lv: could not connect to host
 83i.net: could not connect to host
-88.to: did not receive HSTS header
 8ack.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]
 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
 a-plus.space: could not connect to host
 a9c.co: could not connect to host
 aaeblog.com: did not receive HSTS header
@@ -103,21 +101,21 @@ 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: did not receive HSTS header
 aether.pw: could not connect to host
 aevpn.net: could not connect to host
 affinitysync.com: could not connect to host
 aficionados.com.br: did not receive HSTS header
+aficotroceni.ro: could not connect to host
 afp548.tk: could not connect to host
 afrodigital.uk: could not connect to host
 agalaxyfarfaraway.co.uk: could not connect to host
 agbremen.de: did not receive HSTS header
-ageg.ca: could not connect to host
 agevio.com: could not connect to host
 agilebits.net: 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
 ahri.ovh: could not connect to host
 aidanwoods.com: did not receive HSTS header
@@ -141,16 +139,17 @@ 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
 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
+alessandroz.pro: could not connect to host
 alethearose.com: did not receive HSTS header
 alexandre.sh: did not receive HSTS header
 alexhaydock.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]
 alexisabarca.com: did not receive HSTS header
 alexismeza.com: could not connect to host
 alexismeza.com.mx: could not connect to host
 alexismeza.dk: could not connect to host
 alfredxing.com: did not receive HSTS header
@@ -200,18 +199,19 @@ animeday.ml: could not connect to host
 animesfusion.com.br: could not connect to host
 animesharp.com: could not connect to host
 animurecs.com: could not connect to host
 aniplus.cf: could not connect to host
 aniplus.gq: could not connect to host
 aniplus.ml: could not connect to host
 ankakaak.com: could not connect to host
 ankaraprofesyonelnakliyat.com: did not receive HSTS header
+ankaraprofesyonelnakliyat.com.tr: did not receive HSTS header
 annabellaw.com: max-age too low: 0
-anomaly.ws: did not receive HSTS header
+anomaly.ws: could not connect to host
 anonboards.com: did not receive HSTS header
 anook.com: max-age too low: 0
 ant.land: could not connect to host
 anthenor.co.uk: could not connect to host
 antimine.kr: could not connect to host
 antocom.com: did not receive HSTS header
 antoniomarques.eu: did not receive HSTS header
 antoniorequena.com.ve: could not connect to host
@@ -234,16 +234,17 @@ appart.ninja: could not connect to host
 appengine.google.com: did not receive HSTS header (error ignored - included regardless)
 applez.xyz: could not connect to host
 applic8.com: did not receive HSTS header
 appraisal-comps.com: could not connect to host
 appreciationkards.com: could not connect to host
 approlys.fr: did not receive HSTS header
 apps-for-fishing.com: could not connect to host
 appseccalifornia.org: did not receive HSTS header
+appson.co.uk: could not connect to host
 arabdigitalexpression.org: did not receive HSTS header
 aradulconteaza.ro: could not connect to host
 aran.me.uk: did not receive HSTS header
 arboineuropa.nl: did not receive HSTS header
 arbu.eu: max-age too low: 2419200
 argh.io: could not connect to host
 arlen.se: could not connect to host
 armory.consulting: could not connect to host
@@ -255,85 +256,89 @@ ars-design.net: could not connect to hos
 ars.toscana.it: max-age too low: 0
 artistnetwork.nl: did not receive HSTS header
 arturkohut.com: could not connect to host
 as.se: could not connect to host
 asasuou.pw: could not connect to host
 asc16.com: could not connect to host
 asdpress.cn: could not connect to host
 aserver.co: could not connect to host
+ashleymedway.com: could not connect to host
+asianodor.com: could not connect to host
+askfit.cz: did not receive HSTS header
 asmui.ga: could not connect to host
+asmui.ml: could not connect to host
 asrob.eu: could not connect to host
 ass.org.au: did not receive HSTS header
 assdecoeur.org: 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
 astromelody.com: could not connect to host
 atavio.at: could not connect to host
 atavio.ch: could not connect to host
 atavio.de: did not receive HSTS header
 atbeckett.com: did not receive HSTS header
 athaliasoft.com: did not receive HSTS header
 athenelive.com: could not connect to host
 athul.xyz: did not receive HSTS header
-atlantischild.hu: could not connect to host
 atlex.nl: did not receive HSTS header
 atomik.pro: could not connect to host
 atop.io: could not connect to host
-attilagyorffy.com: could not connect to host
 attimidesigns.com: did not receive HSTS header
 au.search.yahoo.com: max-age too low: 172800
 aubiosales.com: did not receive HSTS header
 aufmerksamkeitsstudie.com: could not connect to host
 aujapan.ru: could not connect to host
 aurainfosec.com.au: could not connect to host
 ausnah.me: could not connect to host
 ausoptic.com.au: max-age too low: 2592000
 auszeit.bio: did not receive HSTS header
 auth.mail.ru: did not receive HSTS header
 authentication.io: could not connect to host
-autimatisering.nl: could not connect to host
 auto-serwis.zgorzelec.pl: did not receive HSTS header
 auto4trade.nl: could not connect to host
 autojuhos.sk: did not receive HSTS header
 autokovrik-diskont.ru: did not receive HSTS header
 autotsum.com: could not connect to host
 autumnwindsagility.com: could not connect to host
 auverbox.ovh: did not receive HSTS header
-auxiliumincrementum.co.uk: could not connect to host
+auxiliumincrementum.co.uk: did not receive HSTS header
 av.de: did not receive HSTS header
 avec-ou-sans-ordonnance.fr: could not connect to host
 avinet.com: max-age too low: 0
 awg-mode.de: did not receive HSTS header
 axado.com.br: did not receive HSTS header
 axeny.com: did not receive HSTS header
 az.search.yahoo.com: did not receive HSTS header
 azprep.us: could not connect to host
 b3orion.com: max-age too low: 0
 babak.de: did not receive HSTS header
 baby-click.de: did not receive HSTS header
 babybic.hu: did not receive HSTS header
 babyhouse.xyz: could not connect to host
 babysaying.me: could not connect to host
 back-bone.nl: did not receive HSTS header
+backschues.net: could not connect to host
 badcronjob.com: could not connect to host
 baff.lu: did not receive HSTS header
 baiduaccount.com: could not connect to host
 baka.network: could not connect to host
+bakaweb.fr: could not connect to host
 bakkerdesignandbuild.com: did not receive HSTS header
 balcan-underground.net: could not connect to host
 baldwinkoo.com: could not connect to host
 bandb.xyz: could not connect to host
 bannisbierblog.de: could not connect to host
 banqingdiao.com: could not connect to host
 barely.sexy: did not receive HSTS header
 bashcode.ninja: could not connect to host
 basicsolutionsus.com: did not receive HSTS header
+basilisk.io: could not connect to host
 bassh.net: did not receive HSTS header
 baumstark.ca: did not receive HSTS header
 bazarstupava.sk: did not receive HSTS header
 bcbsmagentprofile.com: could not connect to host
 bccx.com: could not connect to host
 bckp.de: could not connect to host
 bcm.com.au: max-age too low: 0
 bcnx.de: max-age too low: 0
@@ -388,16 +393,17 @@ bigshinylock.minazo.net: could not conne
 bildiri.ci: did not receive HSTS header
 bildschirmflackern.de: did not receive HSTS header
 billin.net: could not connect to host
 billkiss.com: max-age too low: 300
 billninja.com: could not connect to host
 binderapp.net: could not connect to host
 biofam.ru: did not receive HSTS header
 biophysik-ssl.de: did not receive HSTS header
+bioshome.de: could not connect to host
 birkhoff.me: could not connect to host
 birkman.com: did not receive HSTS header
 bismarck.moe: did not receive HSTS header
 bitchan.it: could not connect to host
 bitcoinworld.me: could not connect to host
 bitf.ly: could not connect to host
 bitfactory.ws: could not connect to host
 bitfarm-archiv.com: did not receive HSTS header
@@ -420,31 +426,30 @@ bl4ckb0x.org: did not receive HSTS heade
 black-armada.com.pl: could not connect to host
 black-armada.pl: could not connect to host
 blackburn.link: did not receive HSTS header
 blacklane.com: did not receive HSTS header
 blackly.uk: could not connect to host
 blackpayment.ru: could not connect to host
 blackunicorn.wtf: could not connect to host
 blantik.net: could not connect to host
-blaudev.es: could not connect to host
 blenheimchalcot.com: did not receive HSTS header
 blha303.com.au: could not connect to host
 blindsexdate.nl: could not connect to host
 blocksatz-medien.de: did not receive HSTS header
 blog.cyveillance.com: did not receive HSTS header
 blog.lookout.com: did not receive HSTS header
 blubbablasen.de: could not connect to host
 blucas.org: did not receive HSTS header
 blueliv.com: did not receive HSTS header
 bluetenmeer.com: did not receive HSTS header
 bm-trading.nl: did not receive HSTS header
 bngsecure.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]
 bobiji.com: did not receive HSTS header
-bodyblog.nl: did not receive HSTS header
+bodyblog.nl: could not connect to host
 bodybuilding-legends.com: could not connect to host
 bodyweightsolution.com: did not receive HSTS header
 boensou.com: did not receive HSTS header
 bogosity.se: could not connect to host
 bohan.life: did not receive HSTS header
 boltdata.io: did not receive HSTS header
 bonapp.restaurant: could not connect to host
 bonfi.net: did not receive HSTS header
@@ -453,16 +458,17 @@ bonitabrazilian.co.nz: did not receive H
 bookcelerator.com: did not receive HSTS header
 booked.holiday: did not receive HSTS header
 boomerang.com: could not connect to host
 boosterlearnpro.com: did not receive HSTS header
 bootjp.me: did not receive HSTS header
 boringsecurity.net: could not connect to host
 boris.one: did not receive HSTS header
 botox.bz: did not receive HSTS header
+bougeret.fr: could not connect to host
 bouwbedrijfpurmerend.nl: did not receive HSTS header
 bowlroll.net: max-age too low: 0
 boxcryptor.com: did not receive HSTS header
 br3in.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]
 brain-e.co: could not connect to host
 braineet.com: did not receive HSTS header
 brainfork.ml: could not connect to host
 braintreegateway.com: did not receive HSTS header
@@ -470,29 +476,29 @@ braintreepayments.com: did not receive H
 brainvation.de: did not receive HSTS header
 bran.cc: could not connect to host
 branchtrack.com: did not receive HSTS header
 branchzero.com: did not receive HSTS header
 brandnewdays.nl: could not connect to host
 brandon.so: could not connect to host
 brandonwalker.me: could not connect to host
 brandred.net: did not receive HSTS header
+brandspray.com: did not receive HSTS header
 brianmwaters.net: could not connect to host
 brickoo.com: could not connect to host
 brideandgroomdirect.ie: did not receive HSTS header
 brks.xyz: could not connect to host
 broken-oak.com: could not connect to host
 brokenhands.io: did not receive HSTS header
 brookechase.com: did not receive HSTS header
 browserid.org: did not receive HSTS header
 brunix.net: did not receive HSTS header
 bsagan.fr: could not connect to host
 bsdtips.com: could not connect to host
 btcdlc.com: could not connect to host
-buch-cuber.de: could not connect to host
 buchheld.at: did not receive HSTS header
 budgetthostels.nl: did not receive HSTS header
 budskap.eu: could not connect to host
 bugtrack.io: did not receive HSTS header
 buhler.pro: did not receive HSTS header
 buildsaver.co.za: did not receive HSTS header
 built.by: did not receive HSTS header
 bulletpoint.cz: did not receive HSTS header
@@ -505,59 +511,59 @@ business.lookout.com: could not connect 
 businesshosting.nl: did not receive HSTS header
 busold.ws: could not connect to host
 bustimes.org: could not connect to host
 butchersworkshop.com: did not receive HSTS header
 buttercoin.com: could not connect to host
 buybaby.eu: did not receive HSTS header
 buyfox.de: did not receive HSTS header
 bvalle.com: did not receive HSTS header
-bwilkinson.co.uk: could not connect to host
 by4cqb.cn: could not connect to host
 bydisk.com: could not connect to host
 bypassed.press: could not connect to host
 bypro.xyz: could not connect to host
 bysymphony.com: max-age too low: 0
 bytepark.de: did not receive HSTS header
 c1yd3i.me: could not connect to host
 c3b.info: could not connect to host
 cabarave.com: could not connect to host
 cabusar.fr: could not connect to host
 caconnect.org: could not connect to host
 cadao.me: did not receive HSTS header
+cadmail.nl: could not connect to host
 cadusilva.com: did not receive HSTS header
 cafe-scientifique.org.ec: could not connect to host
 caim.cz: did not receive HSTS header
 cajapopcorn.com: did not receive HSTS header
 cake.care: could not connect to host
 calgaryconstructionjobs.com: could not connect to host
 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: could not connect to host
 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
+campbellsoftware.co.uk: 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
 candratech.com: could not connect to host
 candylion.rocks: could not connect to host
 cannyfoxx.me: could not connect to host
 canyonshoa.com: did not receive HSTS header
 capecycles.co.za: did not receive HSTS header
 captchatheprize.com: could not connect to host
 car-navi.ph: did not receive HSTS header
 carano-service.de: did not receive HSTS header
 caraudio69.cz: could not connect to host
 cardoni.net: did not receive HSTS header
 cardstream.com: did not receive HSTS header
 cardurl.com: did not receive HSTS header
 cargobay.net: could not connect to host
-carlgo11.com: could not connect to host
 carlolly.co.uk: could not connect to host
 carlosalves.info: could not connect to host
 carsforbackpackers.com: could not connect to host
 casa-due-pur.com: could not connect to host
 casedi.org: max-age too low: 0
 casinostest.com: did not receive HSTS header
 casioshop.eu: could not connect to host
 casovi.cf: could not connect to host
@@ -598,31 +604,33 @@ chaoslab.org: could not connect to host
 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]
 charnleyhouse.co.uk: max-age too low: 604800
 chartpen.com: did not receive HSTS header
 chartstoffarm.de: max-age too low: 10
 chatbot.me: did not receive HSTS header
 chateauconstellation.ch: 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
 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
 chejianer.cn: did not receive HSTS header
 cherysunzhang.com: max-age too low: 7776000
 chic-leather.com: could not connect to host
 chihiro.xyz: could not connect to host
 chijiokeindustries.co.uk: did not receive HSTS header
 childcaresolutionscny.org: did not receive HSTS header
 chirgui.eu: could not connect to host
 chm.vn: did not receive HSTS header
 chontalpa.pw: 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
 chriskyrouac.com: could not connect to host
 christiaandruif.nl: could not connect to host
 christianbro.gq: could not connect to host
 christophheich.me: did not receive HSTS header
 chrisupjohn.com: could not connect to host
 chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
 chrome.google.com: did not receive HSTS header (error ignored - included regardless)
 chroniclesofgeorge.com: did not receive HSTS header
@@ -636,17 +644,16 @@ citiagent.cz: could not connect to host
 cityoflaurel.org: did not receive HSTS header
 clara-baumert.de: could not connect to host
 classicsandexotics.com: did not receive HSTS header
 classicspublishing.com: could not connect to host
 clcleaningco.com: could not connect to host
 cleaningsquad.ca: max-age too low: 0
 clerkendweller.uk: could not connect to host
 clickandgo.com: did not receive HSTS header
-clickphish.com: could not connect to host
 clint.id.au: max-age too low: 0
 clintonbloodworth.com: could not connect to host
 clintonbloodworth.io: could not connect to host
 clintwilson.technology: max-age too low: 2592000
 cloud.wtf: could not connect to host
 cloudapi.vc: could not connect to host
 cloudcert.org: did not receive HSTS header
 cloudcy.net: could not connect to host
@@ -668,24 +675,24 @@ 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
 co50.com: did not receive HSTS header
 coam.co: did not receive HSTS header
 cocaine-import.agency: could not connect to host
-cocoaheads.at: 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
 codeforce.io: did not receive HSTS header
 codeforhakodate.org: could not connect to host
+codepult.com: could not connect to host
 codepx.com: did not receive HSTS header
 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
 coldlostsick.net: could not connect to host
 colisfrais.com: did not receive HSTS header
@@ -700,16 +707,17 @@ comfortticket.de: did not receive HSTS h
 comicspines.com: could not connect to host
 compalytics.com: could not connect to host
 comparejewelleryprices.co.uk: could not connect to host
 completionist.audio: could not connect to host
 computeremergency.com.au: did not receive HSTS header
 concord-group.co.jp: did not receive HSTS header
 condesaelectronics.com: max-age too low: 0
 confirm365.com: could not connect to host
+confiwall.de: could not connect to host
 conformal.com: could not connect to host
 conrad-kostecki.de: 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
 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
@@ -771,24 +779,24 @@ 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
 csohack.tk: could not connect to host
+csokolade.hu: could not connect to host
 cspbuilder.info: 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
-cupi.co: did not receive HSTS header
 cupidmentor.com: did not receive HSTS header
 curroapp.com: could not connect to host
 custe.rs: could not connect to host
 cuvva.insure: did not receive HSTS header
 cyanogenmod.xxx: 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
@@ -811,17 +819,16 @@ daolerp.xyz: could not connect to host
 dargasia.is: could not connect to host
 dario.im: could not connect to host
 dark-x.cf: could not connect to host
 darkag.ovh: could not connect to host
 darkengine.io: could not connect to host
 darkhole.cn: could not connect to host
 darknebula.space: could not connect to host
 darkpony.ru: could not connect to host
-darrenellis.xyz: did not receive HSTS header
 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
 datarank.com: max-age too low: 0
@@ -832,26 +839,26 @@ dateno1.com: max-age too low: 2592000
 datenreiter.cf: could not connect to host
 datenreiter.gq: could not connect to host
 datenreiter.ml: could not connect to host
 datenreiter.tk: could not connect to host
 datewon.net: did not receive HSTS header
 david-schiffmann.de: did not receive HSTS header
 davidglidden.eu: could not connect to host
 davidhunter.scot: did not receive HSTS header
+davidmessenger.co.uk: could not connect to host
 davidreinhardt.de: could not connect to host
 davidscherzer.at: could not connect to host
 daylightcompany.com: did not receive HSTS header
 db.gy: did not receive HSTS header
 dbx.ovh: did not receive HSTS header
 dccode.gov: could not connect to host
 dcurt.is: did not receive HSTS header
 ddatsh.com: did not receive HSTS header
 dden.ca: could not connect to host
-deamuseum.org: did not receive HSTS header
 debank.tv: did not receive HSTS header
 debatch.se: could not connect to host
 debtkit.co.uk: did not receive HSTS header
 decafu.co: could not connect to host
 decibelios.li: could not connect to host
 deco.me: could not connect to host
 dedicatutiempo.es: could not connect to host
 deepcovelabs.net: could not connect to host
@@ -864,22 +871,24 @@ deliverance.co.uk: could not connect to 
 deltaconcepts.de: did not receive HSTS header
 deltanet-production.de: did not receive HSTS header
 demilitarized.ninja: could not connect to host
 democracychronicles.com: did not receive HSTS header
 denh.am: did not receive HSTS header
 denisjean.fr: could not connect to host
 dentaldomain.org: did not receive HSTS header
 dentaldomain.ph: did not receive HSTS header
+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
 derwolfe.net: did not receive HSTS header
 desiccantpackets.com: did not receive HSTS header
+designpilot.ch: did not receive HSTS header
 destinationbijoux.fr: could not connect to host
 detector.exposed: could not connect to host
 deux.solutions: could not connect to host
 deuxsol.com: could not connect to host
 deuxsolutions.com: could not connect to host
 devcu.net: did not receive HSTS header
 devh.de: did not receive HSTS header
 devincrow.me: could not connect to host
@@ -890,16 +899,17 @@ devuan.org: did not receive HSTS header
 diablotine.rocks: could not connect to host
 diarbag.us: did not receive HSTS header
 diasp.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]
 diedrich.co: could not connect to host
 digitaldaddy.net: could not connect to host
 digitalriver.tk: could not connect to host
 digitalskillswap.com: could not connect to host
 dinamoelektrik.com: max-age too low: 0
+dinepont.fr: could not connect to host
 dinkum.online: could not connect to host
 dirk-weise.de: could not connect to host
 discoveringdocker.com: did not receive HSTS header
 discovery.lookout.com: did not receive HSTS header
 dislocated.de: did not receive HSTS header
 dissimulo.me: could not connect to host
 dittvertshus.no: could not connect to host
 dizihocasi.com: did not receive HSTS header
@@ -924,16 +934,17 @@ dollywiki.co.uk: could not connect to ho
 dolphin-cloud.com: could not connect to host
 dolphincorp.co.uk: could not connect to host
 domaris.de: did not receive HSTS header
 dominique-mueller.de: did not receive HSTS header
 donttrustrobots.nl: could not connect to host
 donzelot.co.uk: max-age too low: 3600
 doomleika.com: could not connect to host
 dopost.it: could not connect to host
+dorianmuthig.com: could not connect to host
 doridian.com: could not connect to host
 doridian.de: could not connect to host
 doridian.net: did not receive HSTS header
 doridian.org: could not connect to host
 dossplumbing.co.za: did not receive HSTS header
 dotadata.me: could not connect to host
 dougferris.id.au: could not connect to host
 download.jitsi.org: did not receive HSTS header
@@ -956,24 +967,25 @@ driving-lessons.co.uk: did not receive H
 droidboss.com: could not connect to host
 dropcam.com: did not receive HSTS header
 drtroyhendrickson.com: could not connect to host
 drumbandesperanto.nl: could not connect to host
 dshiv.io: could not connect to host
 dubrovskiy.net: could not connect to host
 dubrovskiy.pro: could not connect to host
 duch.cloud: could not connect to host
+duckasylum.com: could not connect to host
 duesee.org: could not connect to host
-dullsir.com: could not connect to host
+dullsir.com: did not receive HSTS header
 duria.de: max-age too low: 3600
 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
+dynamicsnetwork.net: could not connect to host
 dynamize.solutions: could not connect to host
 dzimejl.sk: did not receive HSTS header
 dzlibs.io: could not connect to host
 e-aut.net: could not connect to host
 e-deca2.org: 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
@@ -1009,17 +1021,19 @@ ego-world.org: could not connect to host
 ehrenamt-skpfcw.de: could not connect to host
 eicfood.com: could not connect to host
 eidolonhost.com: could not connect to host
 ekbanden.nl: could not connect to host
 ekostecki.de: did not receive HSTS header
 el-soul.com: did not receive HSTS header
 elaintehtaat.fi: did not receive HSTS header
 elanguest.pl: could not connect to host
+elars.de: could not connect to host
 elbetech.net: could not connect to host
+eldinhadzic.com: could not connect to host
 electricianforum.co.uk: could not connect to host
 electromc.com: could not connect to host
 elemprendedor.com.ve: could not connect to host
 elenag.ga: could not connect to host
 elenoon.ir: did not receive HSTS header
 elgacien.de: could not connect to host
 elimdengelen.com: did not receive HSTS header
 elisabeth-kostecki.de: did not receive HSTS header
@@ -1040,16 +1054,17 @@ enargia.jp: max-age too low: 0
 encode.space: did not receive HSTS header
 encoder.pw: could not connect to host
 encrypted.google.com: did not receive HSTS header (error ignored - included regardless)
 endohaus.ca: could not connect to host
 endohaus.com: could not connect to host
 endohaus.eu: could not connect to host
 endohaus.us: could not connect to host
 endzeit-architekten.com: did not receive HSTS header
+energydrinkblog.de: could not connect to host
 engelwerbung.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]
 englishforums.com: could not connect to host
 enigmacpt.com: did not receive HSTS header
 enigmail.net: did not receive HSTS header
 enteente.club: could not connect to host
 enteente.space: could not connect to host
 enteente.xyz: could not connect to host
 enterdev.co: did not receive HSTS header
@@ -1098,17 +1113,16 @@ euanbaines.com: did not receive HSTS hea
 eucl3d.com: did not receive HSTS header
 euph.eu: could not connect to host
 euren.se: could not connect to host
 euroshop24.net: 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
 everylab.org: could not connect to host
-evi.be: did not receive HSTS header
 evin.ml: could not connect to host
 evomon.com: could not connect to host
 evossd.tk: could not connect to host
 exceltobarcode.com: 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
@@ -1136,16 +1150,17 @@ fail4free.de: did not receive HSTS heade
 fairlyoddtreasures.com: did not receive HSTS header
 faizan.net: did not receive HSTS header
 faizan.xyz: could not connect to host
 fakeletters.org: did not receive HSTS header
 falconfrag.com: could not connect to host
 falkena.net: max-age too low: 5184000
 falkp.no: did not receive HSTS header
 familie-zimmermann.at: could not connect to host
+fanjoe.be: could not connect to host
 fanyl.cn: could not connect to host
 fashioncare.cz: did not receive HSTS header
 fasset.jp: could not connect to host
 fastopen.ml: could not connect to host
 fatgeekflix.net: could not connect to host
 fatherhood.gov: did not receive HSTS header
 fatlossguide.xyz: could not connect to host
 fatox.de: could not connect to host
@@ -1190,16 +1205,17 @@ fivestarsitters.com: did not receive HST
 fixate.ru: did not receive HSTS header
 fixatom.com: did not receive HSTS header
 fixingdns.com: did not receive HSTS header
 fizz.buzz: could not connect to host
 fj.search.yahoo.com: did not receive HSTS header
 flags.ninja: could not connect to host
 flamewall.net: could not connect to host
 flawcheck.com: did not receive HSTS header
+fleximus.org: could not connect to host
 fliexer.com: did not receive HSTS header
 floless.co.uk: did not receive HSTS header
 florian-lillpopp.de: max-age too low: 10
 florianlillpopp.de: max-age too low: 10
 floridaescapes.co.uk: did not receive HSTS header
 flouartistique.ch: could not connect to host
 flow.pe: could not connect to host
 flow.su: could not connect to host
@@ -1217,17 +1233,16 @@ foraje-profesionale.ro: did not receive 
 forbook.net: could not connect to host
 foreignexchangeresource.com: did not receive HSTS header
 foreveralone.io: could not connect to host
 forex-dan.com: did not receive HSTS header
 formbetter.com: could not connect to host
 formini.dz: did not receive HSTS header
 formula.cf: could not connect to host
 forodeespanol.com: could not connect to host
-fortesanshop.it: could not connect to host
 fotiu.com: could not connect to host
 fotm.net: did not receive HSTS header
 fotocerita.net: could not connect to host
 fotografosexpertos.com: did not receive HSTS header
 fotopasja.info: could not connect to host
 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]
 foxtrot.pw: could not connect to host
@@ -1275,60 +1290,62 @@ fysiohaenraets.nl: did not receive HSTS 
 fzn.io: 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)
 gabber.scot: could not connect to host
 gaelleetarnaud.com: did not receive HSTS header
 gaestehaus-monika.com: could not connect to host
 gafachi.com: could not connect to host
-gaichon.com: could not connect to host
 gakkainavi4.com: could not connect to host
 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.yt: could not connect to host
 gamecave.de: could not connect to host
 gamechasm.com: could not connect to host
 gamehacks.me: could not connect to host
 gameink.net: max-age too low: 0
 gamenected.com: could not connect to host
 gamenected.de: could not connect to host
 gameparade.de: could not connect to host
 gamepiece.com: could not connect to host
+gamers-life.fr: could not connect to host
 gamerslair.org: did not receive HSTS header
 gamesdepartment.co.uk: max-age too low: 0
 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
 gatilagata.com.br: did not receive HSTS header
+gchq.wtf: could not connect to host
 gdpventure.com: max-age too low: 0
 gedankenbude.info: did not receive HSTS header
 geekbundle.org: did not receive HSTS header
 geekcast.co.uk: did not receive HSTS header
 geli-graphics.com: did not receive HSTS header
 gem-indonesia.net: could not connect to host
 genuu.com: could not connect to host
 genuxation.com: could not connect to host
-genuxtsg.com: could not connect to host
 genyaa.com: could not connect to host
 gerencianet.com.br: did not receive HSTS header
 get.zenpayroll.com: did not receive HSTS header
 getable.com: did not receive HSTS header
 getblys.com.au: did not receive HSTS header
 getbooks.co.il: did not receive HSTS header
 getcarefirst.com: did not receive HSTS header
 getcolor.com: did not receive HSTS header
 getinternet.de: max-age too low: 0
 getlantern.org: did not receive HSTS header
 getlifti.com: did not receive HSTS header
 getlolaccount.com: could not connect to host
 getmassage.com.ng: did not receive HSTS header
 getsello.com: did not receive HSTS header
+getspire.com: could not connect to host
 getwashdaddy.com: did not receive HSTS header
 gfhgiro.nl: max-age too low: 604800
 gfm.tech: could not connect to host
 gfournier.ca: could not connect to host
 gfwsb.ml: could not connect to host
 gh16.com.ar: could not connect to host
 gheorghesarcov.ga: could not connect to host
 gheorghesarcov.tk: could not connect to host
@@ -1369,25 +1386,24 @@ goben.ch: could not connect to host
 goerner.me: did not receive HSTS header
 goge.site: could not connect to host
 gogenenglish.com: could not connect to host
 gogetssl.com: did not receive HSTS header
 gogold-g.com: could not connect to host
 gold24.in: did not receive HSTS header
 goldendata.io: could not connect to host
 goldminer.ga: could not connect to host
-goldpros.com: did not receive HSTS header
 golocal-media.de: did not receive HSTS header
 gonzalosanchez.mx: did not receive HSTS header
 goodenough.nz: did not receive HSTS header
 goodwin43.ru: did not receive HSTS header
 google: could not connect to host (error ignored - included regardless)
 googlemail.com: did not receive HSTS header (error ignored - included regardless)
 googleplex.com: did not receive HSTS header (error ignored - included regardless)
-goolok.com: could not connect to host
+goolok.com: did not receive HSTS header
 gorilla-gym.site: could not connect to host
 goto.google.com: did not receive HSTS header (error ignored - included regardless)
 gottcode.org: did not receive HSTS header
 govillemo.ca: did not receive HSTS header
 gowe.wang: could not connect to host
 gparent.org: did not receive HSTS header
 gpsfix.cz: could not connect to host
 gpstuner.com: did not receive HSTS header
@@ -1413,18 +1429,16 @@ gryffin.ga: could not connect to host
 gryffin.ml: could not connect to host
 gryffin.tk: could not connect to host
 gsm-map.com: could not connect to host
 gtanda.tk: could not connect to host
 gtlfsonlinepay.com: did not receive HSTS header
 gtraxapp.com: could not connect to host
 guava.studio: did not receive HSTS header
 guilde-vindicta.fr: did not receive HSTS header
-gunnaro.com: could not connect to host
-guoqiang.info: could not connect to host
 gurusupe.com: could not connect to host
 gussi.is: could not connect to host
 gvt2.com: could not connect to host (error ignored - included regardless)
 gvt3.com: could not connect to host (error ignored - included regardless)
 gwijaya.com: could not connect to host
 gwtest.us: could not connect to host
 gxlrx.net: could not connect to host
 gyboche.com: could not connect to host
@@ -1457,17 +1471,16 @@ hancc.net: did not receive HSTS header
 hanfu.la: could not connect to host
 hang333.pw: could not connect to host
 hannover-banditen.de: did not receive HSTS header
 hao2taiwan.com: max-age too low: 0
 haozi.me: could not connect to host
 happyfabric.me: did not receive HSTS header
 happygadget.me: could not connect to host
 harabuhouse.com: did not receive HSTS header
-harbor-light.net: did not receive HSTS header
 harmonycosmetic.com: max-age too low: 300
 harristony.com: could not connect to host
 hartmancpa.com: did not receive HSTS header
 harvestapp.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]
 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
@@ -1481,21 +1494,21 @@ haurumcraft.net: could not connect to ho
 haveeruexaminer.com: could not connect to host
 havellab.de: could not connect to host
 haydenhill.us: could not connect to host
 hazcod.com: could not connect to host
 hcie.pl: could not connect to host
 hdm.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]
 hduin.xyz: did not receive HSTS header
 hdwallpapers.net: did not receive HSTS header
-healtious.com: did not receive HSTS header
+healtious.com: could not connect to host
 heart.ge: did not receive HSTS header
 heartlandrentals.com: did not receive HSTS header
 heftkaufen.de: did not receive HSTS header
-hellenicaward.com: did not receive HSTS header
+hellenicaward.com: could not connect to host
 helloworldhost.com: did not receive HSTS header
 helpadmin.net: could not connect to host
 helpium.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]
 helpmebuild.com: did not receive HSTS header
 hemdal.se: could not connect to host
 hencagon.com: could not connect to host
 henriknoerr.com: could not connect to host
 hepteract.us: did not receive HSTS header
@@ -1526,17 +1539,17 @@ holymoly.lu: did not receive HSTS header
 homa.website: 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
 horosho.in: could not connect to host
 horseboners.xxx: did not receive HSTS header
 hortifarm.ro: did not receive HSTS header
-hosted-service.com: did not receive HSTS header
+hosted-service.com: could not connect to host
 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
 hostisan.com: did not receive HSTS header
 hotchillibox.com: max-age too low: 0
 hotchoc.io: did not receive HSTS header
 hotting.nl: could not connect to host
 houkago-step.com: did not receive HSTS header
@@ -1551,16 +1564,17 @@ http418.xyz: could not connect to host
 httpstatuscode418.xyz: could not connect to host
 hu.search.yahoo.com: did not receive HSTS header
 huarongdao.com: did not receive HSTS header
 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]
+hupp.se: could not connect to host
 hurricanelabs.com: did not receive HSTS header
 hydra.ws: could not connect to host
 hyper69.com: did not receive HSTS header
 hzsh.xyz: max-age too low: 0
 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
@@ -1573,17 +1587,17 @@ icreative.nl: did not receive HSTS heade
 ictual.com: max-age too low: 0
 icusignature.com: did not receive HSTS header
 id-co.in: could not connect to host
 id-conf.com: could not connect to host
 idacmedia.com: max-age too low: 5184000
 ideadozz.hu: did not receive HSTS header
 ideal-envelopes.co.uk: did not receive HSTS header
 ideasmeetingpoint.com: could not connect to host
-ideation-inc.co.jp: could not connect to host
+ideation-inc.co.jp: did not receive HSTS header
 identitylabs.uk: did not receive HSTS header
 idgsupply.com: could not connect to host
 idlekernel.com: could not connect to host
 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
@@ -1665,16 +1679,17 @@ inverselink-user-content.com: could not 
 inverselink.com: could not connect to host
 inwesttitle.com: max-age too low: 0
 iomstamps.com: could not connect to host
 ionx.co.uk: did not receive HSTS header
 iop.intuit.com: max-age too low: 86400
 iosmods.com: could not connect to host
 iostips.ru: could not connect to host
 iotsms.io: could not connect to host
+ip-life.net: could not connect to host
 ip6.im: did not receive HSTS header
 ipmimagazine.com: did not receive HSTS header
 iptel.by: max-age too low: 0
 iptel.ro: could not connect to host
 ipv6cloud.club: could not connect to host
 iqcn.co: max-age too low: 2592000
 iqualtech.com: did not receive HSTS header
 iranianlawschool.com: could not connect to host
@@ -1710,16 +1725,17 @@ izoox.com: did not receive HSTS header
 izzzorgconcerten.nl: could not connect to host
 ja-publications.com: did not receive HSTS header
 jaba.hosting: max-age too low: 0
 jabbari.io: did not receive HSTS header
 jackalworks.com: could not connect to host
 jacobparry.ca: did not receive HSTS header
 jahliveradio.com: could not connect to host
 jakenbake.com: did not receive HSTS header
+jaksi.io: could not connect to host
 jakubtopic.cz: could not connect to host
 jamesbradach.com: did not receive HSTS header
 jamesburton.london: could not connect to host
 jamesbywater.me: could not connect to host
 jamesbywater.me.uk: could not connect to host
 jamesconroyfinn.com: did not receive HSTS header
 jamesdoell.com: could not connect to host
 jamesdoylephoto.com: did not receive HSTS header
@@ -1779,34 +1795,33 @@ jimmycai.org: max-age too low: 10368000
 jinbo123.com: did not receive HSTS header
 jkb.pics: could not connect to host
 jkbuster.com: could not connect to host
 jmdekker.it: could not connect to host
 joakimalgroy.com: could not connect to host
 jobmedic.com: did not receive HSTS header
 joedavison.me: could not connect to host
 jogi-server.de: did not receive HSTS header
-johnbrownphotography.ch: did not receive HSTS header
 johners.me: could not connect to host
 johners.tech: did not receive HSTS header
 johnhgaunt.com: did not receive HSTS header
 johnrom.com: did not receive HSTS header
 jonas-keidel.de: did not receive HSTS header
 jonasgroth.se: max-age too low: 2592000
 jonathan.ir: could not connect to host
 jonathancarter.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]
 jonn.me: could not connect to host
+jonnichols.info: could not connect to host
 joostbovee.nl: did not receive HSTS header
 jordanhamilton.me: could not connect to host
 joretapo.fr: could not connect to host
 josahrens.me: could not connect to host
 joshstroup.me: could not connect to host
 jottit.com: could not connect to host
 jpbike.cz: could not connect to host
-jpeaches.xyz: could not connect to host
 jrc9.ca: did not receive HSTS header
 jrgold.me: could not connect to host
 jrvar.com: did not receive HSTS header
 jsanders.us: did not receive HSTS header
 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: did not receive HSTS header
@@ -1825,43 +1840,43 @@ jxm.in: could not connect to host
 k-dev.de: could not connect to host
 ka-clan.com: could not connect to host
 kabuabc.com: did not receive HSTS header
 kadioglumakina.com.tr: did not receive HSTS header
 kahopoon.net: could not connect to host
 kaisers.de: did not receive HSTS header
 kalami.nl: did not receive HSTS header
 kamikano.com: could not connect to host
+kamikatse.net: could not connect to host
 kaplatz.is: could not connect to host
 kapucini.si: max-age too low: 0
 karaoketonight.com: could not connect to host
-kasilag.me: could not connect to host
 katiaetdavid.fr: could not connect to host
 katproxy.online: could not connect to host
 katproxy.site: could not connect to host
 katproxy.tech: could not connect to host
 kaufkraftkiel.de: could not connect to host
 kausch.at: could not connect to host
 kawaii.io: could not connect to host
 kawaiiku.com: could not connect to host
 kawaiiku.de: could not connect to host
 kayon.cf: could not connect to host
 kdata.it: did not receive HSTS header
 kdm-online.de: did not receive HSTS header
 keeley.gq: could not connect to host
 keeley.ml: could not connect to host
 keeleysam.me: could not connect to host
 keepclean.me: could not connect to host
-kenderbeton-magyarorszag.hu: did not receive HSTS header
 kerangalam.com: did not receive HSTS header
 kerksanders.nl: did not receive HSTS header
 kermadec.net: could not connect to host
 kernl.us: did not receive HSTS header
 kevinapease.com: could not connect to host
 keymaster.lookout.com: did not receive HSTS header
+kfz-hantschel.de: did not receive HSTS header
 kg-rating.com: did not receive HSTS header
 kgxtech.com: max-age too low: 2592000
 kickass.al: could not connect to host
 kid-dachau.de: did not receive HSTS header
 kiel-media.de: did not receive HSTS header
 kimpost.org: could not connect to host
 kinderwagen-test24.de: could not connect to host
 kingmanhall.org: could not connect to host
@@ -1871,16 +1886,17 @@ kionetworks.com: did not receive HSTS he
 kipira.com: could not connect to host
 kirkforcongress.com: could not connect to host
 kirkforsenate.com: did not receive HSTS header
 kirkpatrickdavis.com: could not connect to host
 kisa.io: could not connect to host
 kisalt.im: did not receive HSTS header
 kissart.net: could not connect to host
 kissflow.com: did not receive HSTS header
+kisun.co.jp: could not connect to host
 kitakemon.com: could not connect to host
 kitchenpunx.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]
 kitk.at: could not connect to host
 kitsta.com: could not connect to host
 kiwiirc.com: max-age too low: 5256000
 kizil.net: could not connect to host
 kjaermaxi.me: did not receive HSTS header
 klauwd.com: did not receive HSTS header
@@ -1892,20 +1908,21 @@ kletterkater.com: did not receive HSTS h
 klicktojob.de: could not connect to host
 kmartin.io: did not receive HSTS header
 knccloud.com: could not connect to host
 kodokushi.fr: could not connect to host
 kolaykaydet.com: did not receive HSTS header
 kollabria.com: max-age too low: 0
 komikito.com: could not connect to host
 kompetenzwerft.de: did not receive HSTS header
+konata.us: could not connect to host
 kontaxis.network: could not connect to host
 kontorhaus-schlachte.de: could not connect to host
 koop-bremen.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]
-koophetlokaal.nl: did not receive HSTS header
+koophetlokaal.nl: max-age too low: 300
 koordinate.net: could not connect to host
 korni22.org: did not receive HSTS header
 korsanparti.org: could not connect to host
 kotonehoko.net: could not connect to host
 kotovstyle.ru: could not connect to host
 kr.search.yahoo.com: did not receive HSTS header
 kraynik.com: could not connect to host
 kredite.sale: could not connect to host
@@ -1950,16 +1967,17 @@ langhun.me: did not receive HSTS header
 laozhu.me: 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
 latus.xyz: could not connect to host
 lauftrainer-ausbildung.com: did not receive HSTS header
 lavabit.no: could not connect to host
 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
 lbrt.xyz: could not connect to host
 ldarby.me.uk: could not connect to host
 leadership9.com: could not connect to host
 leardev.de: did not receive HSTS header
 learnfrenchfluently.com: did not receive HSTS header
 learningorder.com: could not connect to host
@@ -1975,17 +1993,17 @@ lemp.io: did not receive HSTS header
 lenovogaming.com: did not receive HSTS header
 lentri.com: did not receive HSTS header
 leolana.com: could not connect to host
 leon-jaekel.com: could not connect to host
 leopold.email: could not connect to host
 leopoldina.net: did not receive HSTS header
 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]
-lerasenglish.com: did not receive HSTS header
+leppis-it.de: 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
 letras.mus.br: did not receive HSTS header
 letsmultiplayerplay.com: did not receive HSTS header
 letustravel.tk: could not connect to host
 lfullerdesign.com: did not receive HSTS header
 lgiswa.com.au: did not receive HSTS header
@@ -2019,36 +2037,38 @@ limalama.eu: max-age too low: 1
 limiteddata.co.uk: could not connect to host
 limpido.it: could not connect to host
 lindberg.io: did not receive HSTS header
 lingros-test.tk: could not connect to host
 linguaquote.com: did not receive HSTS header
 linkages.org: could not connect to host
 linmi.cc: did not receive HSTS header
 linorman1997.me: could not connect to host
+linux.fi: could not connect to host
 linuxeyecandy.com: could not connect to host
 linuxfixed.it: could not connect to host
 linuxgeek.ro: could not connect to host
 liquorsanthe.in: could not connect to host
 listafirmelor.com: could not connect to host
 litespeed.io: could not connect to host
-liud.im: 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
 lmerza.com: could not connect to host
+loadingdeck.com: did not receive HSTS header
 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)
 login.gov: could not connect to host
 loginseite.com: could not connect to host
 loli.bz: could not connect to host
 lolicore.ch: could not connect to host
 lonal.com: could not connect to host
+londonlanguageexchange.com: could not connect to host
 lookastic.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]
 lookastic.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]
 lookastic.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]
 lookastic.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]
 lookastic.fr: [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]
 lookastic.mx: [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]
 lookastic.ru: [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]
 lookout.com: did not receive HSTS header
@@ -2098,16 +2118,17 @@ m.nu: did not receive HSTS header
 m3-gmbh.de: did not receive HSTS header
 m82labs.com: did not receive HSTS header
 maarten.nyc: did not receive HSTS header
 maartenvandekamp.nl: did not receive HSTS header
 macbolo.com: could not connect to host
 macchaberrycream.com: could not connect to host
 macchedil.com: did not receive HSTS header
 macgeneral.de: did not receive HSTS header
+machon.biz: could not connect to host
 madars.org: did not receive HSTS header
 maddin.ga: could not connect to host
 madebymagnitude.com: did not receive HSTS header
 maderwin.com: did not receive HSTS header
 madusecurity.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
@@ -2139,16 +2160,17 @@ market.android.com: did not receive HSTS
 markrego.com: could not connect to host
 markus-dev.com: did not receive HSTS header
 markusweimar.de: did not receive HSTS header
 marleyresort.com: did not receive HSTS header
 marshut.net: could not connect to host
 martiert.com: could not connect to host
 martijnvhoof.nl: could not connect to host
 martinsfamilyappliance.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]
+marumagic.com: did not receive HSTS header
 masjidtawheed.net: did not receive HSTS header
 massotherapeutique.com: did not receive HSTS header
 matatall.com: did not receive HSTS header
 matchneedle.com: could not connect to host
 matrip.de: could not connect to host
 matrix.ac: did not receive HSTS header
 matsuz.com: could not connect to host
 mattberryman.com: did not receive HSTS header
@@ -2203,16 +2225,17 @@ mesmoque.com: did not receive HSTS heade
 metagrader.com: could not connect to host
 metebalci.com: could not connect to host
 meteosherbrooke.com: 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
 mhealthdemocamp.com: could not connect to host
 mhict.nl: max-age too low: 0
 mia.to: could not connect to host
 michaelfitzpatrickruth.com: could not connect to host
 michal-kral.cz: could not connect to host
 michalborka.cz: could not connect to host
 micro-dv.ru: could not connect to host
@@ -2223,41 +2246,41 @@ midwestwomenworkers.org: did not receive
 mightydicks.io: could not connect to host
 mightydicks.tech: could not connect to host
 mightysounds.cz: max-age too low: 0
 mijcorijneveld.nl: did not receive HSTS header
 mijn-email.org: could not connect to host
 mikaelemilsson.net: did not receive HSTS header
 mikeburns.com: could not connect to host
 mikeg.de: did not receive HSTS header
-mikek.work: did not receive HSTS header
 mikeology.org: could not connect to host
 mikonmaa.fi: could not connect to host
 miku.be: could not connect to host
 miku.hatsune.my: max-age too low: 5184000
 milesgeek.com: did not receive HSTS header
+mind-moves.es: 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
 minikneet.nl: did not receive HSTS header
 minnesotadata.com: could not connect to host
 mirindadomo.ru: did not receive HSTS header
+mirodasilva.be: could not connect to host
 mironized.com: did not receive HSTS header
 mirrorx.com: did not receive HSTS header
 misskey.xyz: could not connect to host
 missrain.tw: could not connect to host
 mister.hosting: could not connect to host
 mitchellrenouf.ca: could not connect to host
 mittenhacks.com: could not connect to host
 mivcon.net: could not connect to host
 miyoshi-kikaku.co.jp: did not receive HSTS header
 miyoshi-kikaku.com: did not receive HSTS header
 mizd.at: could not connect to host
 mizi.name: did not receive HSTS header
-mlcdn.co: could not connect to host
 mlpepilepsy.org: could not connect to host
 mmgazhomeloans.com: did not receive HSTS header
 mnemotiv.com: could not connect to host
 mnetworkingsolutions.co.uk: did not receive HSTS header
 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
@@ -2363,17 +2386,17 @@ nargileh.nl: could not connect to host
 natalia.io: could not connect to host
 natalt.org: did not receive HSTS header
 nathanmfarrugia.com: did not receive HSTS header
 naturesystems.cz: max-age too low: 0
 natuurbehangnederland.nl: could not connect to host
 nauck.org: did not receive HSTS header
 nav.jobs: could not connect to host
 naval.tf: could not connect to host
-navenlle.com: could not connect to host
+navenlle.com: did not receive HSTS header
 navigate-it-services.de: max-age too low: 0
 navjobs.com: did not receive HSTS header
 nbb.io: could not connect to host
 nbg-ha.de: could not connect to host
 ncc60205.info: could not connect to host
 ncpc.gov: could not connect to host
 nct.org.uk: max-age too low: 1
 nctx.co.uk: did not receive HSTS header
@@ -2391,19 +2414,19 @@ nellafw.org: could not connect to host
 nemno.de: could not connect to host
 nemovement.org: did not receive HSTS header
 neonisi.com: could not connect to host
 nepustil.net: did not receive HSTS header
 neris.io: could not connect to host
 nerven.se: could not connect to host
 nestedquotes.ca: could not connect to host
 netbox.cc: could not connect to host
-netfxharmonics.com: did not receive HSTS header
 netherwind.eu: did not receive HSTS header
 netlilo.com: did not receive HSTS header
+netmagik.com: did not receive HSTS header
 netsight.org: could not connect to host
 netzbit.de: could not connect to host
 netzpolitik.org: did not receive HSTS header
 netztest.at: did not receive HSTS header
 neueonlinecasino2016.com: could not connect to host
 neuralgic.net: could not connect to host
 neutralox.com: max-age too low: 3600
 neveta.com: could not connect to host
@@ -2419,32 +2442,32 @@ ng-security.com: could not connect to ho
 ngine.ch: did not receive HSTS header
 nginxnudes.com: could not connect to host
 ni.search.yahoo.com: did not receive HSTS header
 nibiisclaim.com: could not connect to host
 nicestresser.fr: could not connect to host
 nicky.io: did not receive HSTS header
 nicolasbettag.me: could not connect to host
 niconiconi.xyz: could not connect to host
-niconode.com: did not receive HSTS header
+niconode.com: could not connect to host
 nien.chat: could not connect to host
 nightx.uk: could not connect to host
 niho.jp: [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]
 nikomo.fi: could not connect to host
 nilrem.org: could not connect to host
 ninchisho-online.com: did not receive HSTS header
 ninhs.org: could not connect to host
 nippler.org: did not receive HSTS header
 nippombashi.net: did not receive HSTS header
 nipponcareers.com: did not receive HSTS header
-nixien.fr: could not connect to host
 nkinka.de: did not receive HSTS header
 nmctest.net: could not connect to host
 nnya.cat: did not receive HSTS header
 no17sifangjie.cc: could not connect to host
+nobly.de: could not connect to host
 nocallaghan.com: could not connect to host
 nocs.cn: did not receive HSTS header
 noctinus.tk: could not connect to host
 nodari.com.ar: did not receive HSTS header
 nodebrewery.com: could not connect to host
 nodetemple.com: could not connect to host
 noexpect.org: could not connect to host
 noima.com: did not receive HSTS header
@@ -2575,22 +2598,24 @@ orbitcom.de: max-age too low: 0
 orbograph-hrcm.com: did not receive HSTS header
 orionfcu.com: did not receive HSTS header
 orleika.ml: could not connect to host
 osaiyuwu.com: could not connect to host
 oslfoundation.org: could not connect to host
 ossan-kobe-gourmet.com: did not receive HSTS header
 ossbinaries.com: could not connect to host
 osteammate.com: did not receive HSTS header
+osticketawesome.com: did not receive HSTS header
 otakuworld.de: could not connect to host
 othercode.nl: could not connect to host
 othermedia.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]
 otherstuff.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]
 otichi.com: did not receive HSTS header
 ottospora.nl: could not connect to host
+otvaracie-hodiny.sk: could not connect to host
 ourbank.com: did not receive HSTS header
 outdoorproducts.com: did not receive HSTS header
 outetc.com: could not connect to host
 outreachbuddy.com: could not connect to host
 outsider.im: could not connect to host
 ouvirmusica.com.br: did not receive HSTS header
 ovenapp.io: did not receive HSTS header
 overclockers.ge: could not connect to host
@@ -2607,44 +2632,41 @@ packlane.com: did not receive HSTS heade
 pader-deko.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]
 paestbin.com: could not connect to host
 pagerate.io: did not receive HSTS header
 pagetoimage.com: could not connect to host
 paisaone.com: did not receive HSTS header
 paku.me: could not connect to host
 pamsoft.pl: max-age too low: 0
 panaceallc.net: could not connect to host
-panelomix.net: could not connect to host
 pants-off.xyz: could not connect to host
 pantsu.cat: did not receive HSTS header
 papeda.net: could not connect to host
 papercard.co.uk: did not receive HSTS header
 papierniak.net: could not connect to host
 parent5446.us: could not connect to host
 parentmail.co.uk: did not receive HSTS header
 parodybit.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]
 parpaing-paillette.net: could not connect to host
 particonpsplus.it: could not connect to host
 partijtjevoordevrijheid.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]
-partirkyoto.jp: did not receive HSTS header
 partyvan.it: could not connect to host
 partyvan.moe: could not connect to host
 partyvan.nl: could not connect to host
 partyvan.se: could not connect to host
 passwordbox.com: did not receive HSTS header
 passwordrevelator.net: did not receive HSTS header
 passwords.google.com: did not receive HSTS header (error ignored - included regardless)
 pastaf.com: could not connect to host
 paste.fedoraproject.org: did not receive HSTS header
 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
 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
 paulchen.at: did not receive HSTS header
 paulyang.cn: did not receive HSTS header
 paxwinkel.nl: did not receive HSTS header
 pay.gigahost.dk: did not receive HSTS header
 payments.google.com: did not receive HSTS header (error ignored - included regardless)
 payroll.ch: did not receive HSTS header
@@ -2654,36 +2676,37 @@ pc-nf.de: could not connect to host
 pcfun.net: did not receive HSTS header
 pchax.net: did not receive HSTS header
 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: could not connect to host
 pekkarik.ru: could not connect to host
 penguinclientsystem.com: did not receive HSTS header
 pensacolawinterfest.org: could not connect to host
 pentagram.me: could not connect to host
+pepchid.com: did not receive HSTS header
 pepperhead.com: could not connect to host
 pepperworldhotshop.de: did not receive HSTS header
 perfectionis.me: could not connect to host
 performous.org: could not connect to host
 perlwork.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]
 perplex.nl: did not receive HSTS header
 perroud.pro: max-age too low: 2592000
 personaldatabasen.no: could not connect to host
 personalinjurylist.com: did not receive HSTS header
+persson.im: 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: did not receive HSTS header
 petravdbos.nl: did not receive HSTS header
 petrolplus.ru: did not receive HSTS header
 pettsy.com: could not connect to host
 pewboards.com: could not connect to host
 pgpm.io: could not connect to host
-phantasie.cc: could not connect to host
 phillprice.com: could not connect to host
 phonenumberinfo.co.uk: could not connect to host
 phongmay24h.com: could not connect to host
 phurl.de: could not connect to host
 pickr.co: could not connect to host
 picotronic.biz: could not connect to host
 picscare.co.uk: did not receive HSTS header
 pijuice.com: could not connect to host
@@ -2705,22 +2728,22 @@ pixel.google.com: did not receive HSTS h
 pixelcode.com.au: max-age too low: 0
 pixelhero.co.uk: did not receive HSTS header
 pixi.me: could not connect to host
 pj83.duckdns.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]
 pk.search.yahoo.com: did not receive HSTS header
 placefade.com: could not connect to host
 placollection.org: could not connect to host
 plaettliaktion.ch: did not receive HSTS header
-plaintech.net.au: could not connect to host
 platform.lookout.com: could not connect to host
 play.google.com: did not receive HSTS header (error ignored - included regardless)
 playkh.com: did not receive HSTS header
 playmaker.io: could not connect to host
 playnation.io: did not receive HSTS header
+playsoundevents.be: could not connect to host
 plixer.com: did not receive HSTS header
 plogable.co: could not connect to host
 plothost.com: did not receive HSTS header
 ploup.net: could not connect to host
 pmnts.io: could not connect to host
 po.gl: did not receive HSTS header
 poiema.com.sg: did not receive HSTS header
 pol.in.th: could not connect to host
@@ -2741,19 +2764,20 @@ postcodewise.co.uk: did not receive HSTS
 posterspy.com: did not receive HSTS header
 postscheduler.org: could not connect to host
 posylka.de: did not receive HSTS header
 potatofrom.space: could not connect to host
 poussinooz.fr: could not connect to host
 povitria.net: could not connect to host
 power-of-interest.com: did not receive HSTS header
 power99press.com: did not receive HSTS header
-powerplannerapp.com: could not connect to host
+powerplannerapp.com: did not receive HSTS header
 powerxequality.com: could not connect to host
 ppr-truby.ru: could not connect to host
+ppy3.com: did not receive HSTS header
 pr.search.yahoo.com: did not receive HSTS header
 prefontaine.name: could not connect to host
 prego-shop.de: did not receive HSTS header
 preissler.co.uk: could not connect to host
 prelist.org: did not receive HSTS header
 pressfreedomfoundation.org: did not receive HSTS header
 preworkout.me: could not connect to host
 prezola.com: did not receive HSTS header
@@ -2776,17 +2800,16 @@ prontolight.com: did not receive HSTS he
 prosocialmachines.com: could not connect to host
 prosoft.sk: max-age too low: 0
 prosperident.com: did not receive HSTS header
 prowhisky.de: did not receive HSTS header
 proximato.com: could not connect to host
 proxybay.al: could not connect to host
 proxybay.club: could not connect to host
 proxybay.info: did not receive HSTS header
-prxio.date: could not connect to host
 prxio.site: did not receive HSTS header
 prytkov.com: did not receive HSTS header
 psw.academy: did not receive HSTS header
 psw.consulting: did not receive HSTS header
 ptn.moscow: could not connect to host
 ptonet.com: did not receive HSTS header
 pubkey.is: could not connect to host
 puiterwijk.org: could not connect to host
@@ -2813,27 +2836,28 @@ qrlending.com: did not receive HSTS head
 quail.solutions: could not connect to host
 quantacloud.ch: could not connect to host
 quantenteranik.eu: could not connect to host
 quantumcourse.org: did not receive HSTS header
 queercoders.com: did not receive HSTS header
 quemmeliga.com: could not connect to host
 questsandrewards.com: could not connect to host
 quranserver.net: could not connect to host
-qvi.st: did not receive HSTS header
+qvi.st: could not connect to host
 qwaser.fr: could not connect to host
 qwilink.me: did not receive HSTS header
 r10n.com: did not receive HSTS header
 r15.me: could not connect to host
 r3bl.me: did not receive HSTS header
 raajheshkannaa.com: could not connect to host
 radicaleducation.net: could not connect to host
 radiormi.com: did not receive HSTS header
 rafaelcz.de: could not connect to host
 rainbowbarracuda.com: could not connect to host
+raissarobles.com: could not connect to host
 ramonj.nl: could not connect to host
 randomcage.com: did not receive HSTS header
 rankthespot.com: 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
 ratajczak.fr: could not connect to host
 raulfraile.net: could not connect to host
@@ -2848,16 +2872,17 @@ re-customer.net: could not connect to ho
 readr.pw: could not connect to host
 realmic.net: could not connect to host
 realmofespionage.com: could not connect to host
 reardenporn.com: could not connect to host
 recommended.reviews: could not connect to host
 redar.xyz: did not receive HSTS header
 reddiseals.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]
 reddit.com: did not receive HSTS header
+rede.ca: did not receive HSTS header
 redicabo.de: could not connect to host
 redlatam.org: did not receive HSTS header
 redmbk.com: could not connect to host
 regaloaks.com: did not receive HSTS header
 regalpalms.com: did not receive HSTS header
 regenbogenwald.de: did not receive HSTS header
 regenerescence.com: did not receive HSTS header
 reggae-cdmx.com: did not receive HSTS header
@@ -2906,35 +2931,35 @@ rippleunion.com: could not connect to ho
 riskmgt.com.au: could not connect to host
 rj.gg: could not connect to host
 rk6.cz: could not connect to host
 rkmantpur.org: did not receive HSTS header
 rme.li: did not receive HSTS header
 roan24.pl: did not receive HSTS header
 robertglastra.com: could not connect to host
 robigalia.org: did not receive HSTS header
-robin.info: could not connect to host
-robjager-fotografie.nl: could not connect to host
 robtex.net: did not receive HSTS header
 robtex.org: did not receive HSTS header
 rochman.id: could not connect to host
 rocksberg.net: did not receive HSTS header
 roddis.net: did not receive HSTS header
 rodney.id.au: did not receive HSTS header
 rodosto.com: did not receive HSTS header
 roeper.party: could not connect to host
 romans-place.me.uk: did not receive HSTS header
 ronvandordt.info: did not receive HSTS header
 ronwo.de: max-age too low: 1
 room-checkin24.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]
 rootforum.org: did not receive HSTS header
+roots-example-project.com: could not connect to host
 rootservice.org: did not receive HSTS header
 rootwpn.com: could not connect to host
 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
 rr.in.th: could not connect to host
 rrke.cc: did not receive HSTS header
 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
@@ -2977,23 +3002,21 @@ salud.top: did not receive HSTS header
 saml2.com: could not connect to host
 sampoznay.ru: did not receive HSTS header
 samraskauskas.com: could not connect to host
 samsen.club: did not receive HSTS header
 sandviks.com: did not receive HSTS header
 sansemea.com: could not connect to host
 sapk.fr: could not connect to host
 sarah-beckett-harpist.com: did not receive HSTS header
-sarahsweetlife.com: could not connect to host
 sarisonproductions.com: did not receive HSTS header
 saruwebshop.co.za: did not receive HSTS header
 satmep.com: did not receive HSTS header
 satriyowibowo.my.id: did not receive HSTS header
 satsukii.moe: did not receive HSTS header
-saturne.tk: could not connect to host
 saturngames.co.uk: did not receive HSTS header
 saucyfox.net: did not receive HSTS header
 saunasandstuff.ca: did not receive HSTS header
 saunasandstuff.com: did not receive HSTS header
 save.gov: could not connect to host
 saveaward.gov: could not connect to host
 saveyour.biz: did not receive HSTS header
 sawamura-rental.com: did not receive HSTS header
@@ -3007,27 +3030,29 @@ schreiber-netzwerk.eu: did not receive H
 schrodinger.io: 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
 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
+screenlight.tv: did not receive HSTS header
 screenresolution.space: could not connect to host
 scribe.systems: could not connect to host
 script.google.com: did not receive HSTS header (error ignored - included regardless)
 scriptict.nl: could not connect to host
 sdmoscow.ru: could not connect to host
 sdrobs.com: did not receive HSTS header
 sdsl-speedtest.de: could not connect to host
 search-one.de: did not receive HSTS header
 sebastian-lutsch.de: could not connect to host
 sebster.com: did not receive HSTS header
 secandtech.com: could not connect to host
+secpatrol.de: could not connect to host
 sectia22.ro: could not connect to host
 sectun.com: did not receive HSTS header
 secure-games.us: could not connect to host
 secureradio.net: could not connect to host
 securesuisse.ch: could not connect to host
 security-carpet.com: could not connect to host
 security.google.com: did not receive HSTS header (error ignored - included regardless)
 securityinet.biz: did not receive HSTS header
@@ -3059,31 +3084,32 @@ seon.me: did not receive HSTS header
 seowarp.net: did not receive HSTS header
 seq.tf: 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
 seryo.moe: could not connect to host
-sesha.co.za: could not connect to host
+seryovpn.com: could not connect to host
 setphaserstostun.org: could not connect to host
 setuid.de: could not connect to host
 setuid.io: did not receive HSTS header
 seyahatsagliksigortalari.com: could not connect to host
 shadoom.com: did not receive HSTS header
 shadowmorph.info: did not receive HSTS header
 shadowsocks.net: could not connect to host
 shakepeers.org: did not receive HSTS header
 shakespearesolutions.com.au: did not receive HSTS header
 shanesage.com: could not connect to host
 shanewadleigh.com: could not connect to host
 shaobin.wang: could not connect to host
 sharepass.pw: could not connect to host
 sharescope.co.uk: max-age too low: 14400
+sharevari.com: did not receive HSTS header
 shareworx.net: could not connect to host
 shauncrowley.co.uk: could not connect to host
 shaunwheelhou.se: could not connect to host
 shawnh.net: could not connect to host
 shellsec.pw: did not receive HSTS header
 shibe.club: could not connect to host
 shiftins.com: did not receive HSTS header
 shiinko.com: could not connect to host
@@ -3156,42 +3182,43 @@ smusg.com: did not receive HSTS header
 snailing.org: could not connect to host
 snapappointments.com: did not receive HSTS header
 snapappts.com: could not connect to host
 snapworks.net: did not receive HSTS header
 sneberger.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]
 snel4u.nl: could not connect to host
 snelwerk.be: did not receive HSTS header
 sng.my: could not connect to host
+sniderman.eu.org: could not connect to host
 snoqualmiefiber.org: did not receive HSTS header
 sobabox.ru: could not connect to host
 sobie.ch: could not connect to host
 sobotkama.eu: did not receive HSTS header
 soccergif.com: could not connect to host
 soci.ml: did not receive HSTS header
 socialbillboard.com: could not connect to host
-socialdevelop.biz: did not receive HSTS header
+socialdevelop.biz: could not connect to host
 socialhams.net: did not receive HSTS header
 socialhead.io: could not connect to host
 socialspirit.com.br: did not receive HSTS header
 sockeye.cc: could not connect to host
 socomponents.co.uk: did not receive HSTS header
-sodiao.cc: could not connect to host
 sogeek.me: did not receive HSTS header
 solidfuelappliancespares.co.uk: did not receive HSTS header
 solinter.com.br: 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: did not receive HSTS header
 songzhuolun.com: did not receive HSTS header
 sonic.sk: max-age too low: 0
 sonicrainboom.rocks: did not receive HSTS header
+sosaka.ml: could not connect to host
 sotar.us: [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]
-sotiran.com: could not connect to host
+sotiran.com: did not receive HSTS header
 sotor.de: did not receive HSTS header
 soulboy.io: 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
 sourceway.de: could not connect to host
 southside-crew.club: could not connect to host
 southworcestershiregpservices.co.uk: could not connect to host
@@ -3236,16 +3263,17 @@ srevilak.net: did not receive HSTS heade
 srna.sk: could not connect to host
 srrr.ca: could not connect to host
 ss.wtf: did not receive HSTS header
 ssersay.com: max-age too low: 0
 ssl.panoramio.com: did not receive HSTS header
 ssl.rip: could not connect to host
 ssmato.me: could not connect to host
 ssnc.org: max-age too low: 300
+sss3s.com: did not receive HSTS header
 stabletoken.com: could not connect to host
 stadjerspasonline.nl: could not connect to host
 stahl.xyz: could not connect to host
 stateofexception.io: could not connect to host
 static.or.at: did not receive HSTS header
 staticanime.net: could not connect to host
 stationaryjourney.com: did not receive HSTS header
 stationnementdenuit.ca: did not receive HSTS header
@@ -3283,25 +3311,25 @@ stuartbaxter.co: could not connect to ho
 student-scientist.org: did not receive HSTS header
 studentresearcher.org: did not receive HSTS header
 studentrightsadvocate.org: could not connect to host
 studentskydenik.cz: could not connect to host
 studenttravel.cz: did not receive HSTS header
 studybay.com: did not receive HSTS header
 studydrive.net: did not receive HSTS header
 stugb.de: did not receive HSTS header
-stupendous.net: could not connect to host
+sturbock.me: could not connect to host
 stw-group.at: could not connect to host
 subbing.work: could not connect to host
 subdimension.org: did not receive HSTS header
 subrosa.io: could not connect to host
 subtitle.rip: could not connect to host
 sudo.li: did not receive HSTS header
+suian.or.jp: max-age too low: 0
 suite73.org: could not connect to host
-suki.moe: 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
 sunshinepress.org: could not connect to host
 superbabysitting.ch: could not connect to host
 supereight.net: did not receive HSTS header
@@ -3326,35 +3354,32 @@ sylvanorder.com: could not connect to ho
 synackr.com: could not connect to host
 syncer.jp: did not receive HSTS header
 syncserve.net: did not receive HSTS header
 syneic.com: did not receive HSTS header
 syno.gq: could not connect to host
 sysadmin.xyz: could not connect to host
 syso.name: could not connect to host
 szaszm.tk: max-age too low: 0
-t-point.eu: could not connect to host
 t.facebook.com: did not receive HSTS header
-taabe.xyz: did not receive HSTS header
+taabe.xyz: could not connect to host
 tablet.facebook.com: did not receive HSTS header
-tacomafia.net: could not connect to host
+tacomafia.net: did not receive HSTS header
 tadigitalstore.com: could not connect to host
 tafoma.com: did not receive HSTS header
 tageau.com: could not connect to host
 taglondon.org: did not receive HSTS header
-tails.com.ar: could not connect to host
 talk.google.com: did not receive HSTS header (error ignored - included regardless)
 talktwincities.com: could not connect to host
 tallr.se: could not connect to host
 tallshoe.com: could not connect to host
 tandarts-haarlem.nl: did not receive HSTS header
 tanzhijun.com: did not receive HSTS header
 tapfinder.ca: could not connect to host
 tapka.cz: did not receive HSTS header
-taranis.re: could not connect to host
 taravancil.com: did not receive HSTS header
 tarhauskielto.fi: did not receive HSTS header
 tartaros.fi: could not connect to host
 taskstats.com: could not connect to host
 taskulu.ir: could not connect to host
 tasmansecurity.com: could not connect to host
 tastyyy.co: could not connect to host
 tauchkater.de: could not connect to host
@@ -3480,19 +3505,19 @@ tobiasofficial.at: could not connect to 
 todo.is: did not receive HSTS header
 todobazar.es: could not connect to host
 tokyopopline.com: did not receive HSTS header
 tollmanz.com: did not receive HSTS header
 tomberek.info: could not connect to host
 tomeara.net: could not connect to host
 tomharling.co.uk: max-age too low: 86400
 tomharling.uk: max-age too low: 86400
+tomharris.tech: could not connect to host
 tomlankhorst.nl: did not receive HSTS header
 tommsy.com: did not receive HSTS header
-tommyads.com: could not connect to host
 tonburi.jp: [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]
 tonyfantjr.com: could not connect to host
 toomanypillows.com: could not connect to host
 topbargains.com.au: did not receive HSTS header
 topdevbox.net: could not connect to host
 topmarine.se: could not connect to host
 topnewstoday.org: could not connect to host
 topshelfguild.com: could not connect to host
@@ -3514,25 +3539,27 @@ traeningsprojekt.dk: did not receive HST
 traindb.nl: could not connect to host
 translate.googleapis.com: did not receive HSTS header (error ignored - included regardless)
 transportal.sk: did not receive HSTS header
 treeby.net: could not connect to host
 trendberry.ru: could not connect to host
 trinityaffirmations.com: max-age too low: 0
 trinitycore.org: max-age too low: 2592000
 tripdelta.com: did not receive HSTS header
+triple-mmm.de: could not connect to host
 trixies-wish.nz: could not connect to host
 trusitio.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]
 trustmeimfancy.com: could not connect to host
 trybind.com: could not connect to host
 ts2.se: did not receive HSTS header
 tsecy.com: did not receive HSTS header
 tsgoc.com: did not receive HSTS header
 tssouthernpower.com: max-age too low: 0
 tuingereedschappen.net: could not connect to host
+tunai.id: could not connect to host
 tuningblog.eu: did not receive HSTS header
 turnik-67.ru: could not connect to host
 tuturulianda.com: could not connect to host
 tuvalie.com: could not connect to host
 tuxcall.de: could not connect to host
 tv.search.yahoo.com: could not connect to host
 tvtubeflix.com: did not receive HSTS header
 tvz-materijali.com: could not connect to host
@@ -3556,33 +3583,33 @@ tyrelius.com: did not receive HSTS heade
 tyroproducts.eu: did not receive HSTS header
 tzappa.net: could not connect to host
 u-blox.com: did not receive HSTS header
 ua.search.yahoo.com: did not receive HSTS header
 ubicloud.de: could not connect to host
 ublox.com: did not receive HSTS header
 ubuntuhot.com: did not receive HSTS header
 uega.net: did not receive HSTS header
+ueu.me: could not connect to host
 ufgaming.com: did not receive HSTS header
 ufotable.uk: could not connect to host
 ui8.net: max-age too low: 86400
 ukas.com: did not receive HSTS header
 ukdropshipment.co.uk: did not receive HSTS header
 ukdropshipment.com: did not receive HSTS header
 ukrgadget.com: could not connect to host
 ulmo.dk: could not connect to host
 ultros.io: did not receive HSTS header
 umidev.com: could not connect to host
 umie.cc: did not receive HSTS header
 unbanthe.net: could not connect to host
 unblocked.host: could not connect to host
 unblocked.win: could not connect to host
 unccdesign.club: could not connect to host
 undernet.uy: did not receive HSTS header
-underskatten.tk: could not connect to host
 unfiltered.nyc: did not receive HSTS header
 uni-games.com: could not connect to host
 unicooo.com: did not receive HSTS header
 unison.com: could not connect to host
 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]
 unitel2000.de: could not connect to host
 university4industry.com: did not receive HSTS header
 univz.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]
@@ -3600,16 +3627,17 @@ upldr.pw: could not connect to host
 upr.com.ua: could not connect to host
 uprotect.it: could not connect to host
 upstats.eu: could not connect to host
 urandom.eu.org: did not receive HSTS header
 url.rw: could not connect to host
 urphp.com: could not connect to host
 us-immigration.com: did not receive HSTS header
 usaa.com: did not receive HSTS header
+usaab.org: could not connect to host
 uscitizenship.info: did not receive HSTS header
 used-in.jp: did not receive HSTS header
 usercare.com: did not receive HSTS header
 userify.com: did not receive HSTS header
 ustr.gov: max-age too low: 86400
 utumno.ch: could not connect to host
 uvarov.pw: did not receive HSTS header
 uy.search.yahoo.com: did not receive HSTS header
@@ -3639,47 +3667,47 @@ vcr.re: could not connect to host
 veblen.com: could not connect to host
 vechkasov.ru: did not receive HSTS header
 vemokin.net: could not connect to host
 venixplays-stream.ml: could not connect to host
 verifikatorindonesia.com: could not connect to host
 vermontcareergateway.org: could not connect to host
 versia.ru: did not receive HSTS header
 veryhax.de: could not connect to host
-vestacp.top: could not connect to host
 vetmgmt.com: could not connect to host
 vfree.org: could not connect to host
 vglimg.com: could not connect to host
 vhost.co.id: could not connect to host
 viadeux.com: could not connect to host
 videnskabsklubben.dk: did not receive HSTS header
 videomuz.com: did not receive HSTS header
 vidz.ga: could not connect to host
 vieaw.com: could not connect to host
+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]
 viktorsvantesson.net: did not receive HSTS header
 villenvinkit.com: could not connect to host
 vincentkooijman.at: did not receive HSTS header
 vincentkooijman.nl: did not receive HSTS header
 vintageheartcoffee.com: did not receive HSTS header
 vio.no: did not receive HSTS header
 viperdns.com: could not connect to host
 vipmusic.ga: could not connect to host
 vipnettikasinoklubi.com: could not connect to host
+visiontree-beta.eu: could not connect to host
 visitbroadstairs.com: could not connect to host
 vissanum.com: did not receive HSTS header
 vistarait.com: did not receive HSTS header
 vitalorange.com: did not receive HSTS header
 viva-french.com: did not receive HSTS header
 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
 voicesuk.co.uk: did not receive HSTS header
-voidi.ca: could not connect to host
 volcrado.com: could not connect to host
 voliere-info.nl: did not receive HSTS header
 vortexhobbies.com: did not receive HSTS header
 votocek.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]
 votockova.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]
 vox.vg: did not receive HSTS header
 vpl.me: did not receive HSTS header
 vpn-byen.dk: did not receive HSTS header
@@ -3688,32 +3716,32 @@ vrtak-cz.net: could not connect to host
 vvl.me: could not connect to host
 vxstream-sandbox.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]
 vyncke.org: max-age too low: 2678400
 vyskocil.eu: did not receive HSTS header
 vzk.io: could not connect to host
 w4a.fr: max-age too low: 0
 w4xzr.top: could not connect to host
 w4xzr.xyz: could not connect to host
-wait.jp: could not connect to host
 wait.moe: could not connect to host
-waixingrenfuli.vip: did not receive HSTS header
 wakapp.de: could not connect to host
 walkeryoung.ca: could not connect to host
 wallet.google.com: did not receive HSTS header (error ignored - included regardless)
 wallsblog.dk: could not connect to host
 walnutgaming.co.uk: could not connect to host
+wan.pp.ua: could not connect to host
 wanban.io: could not connect to host
 wangqiliang.xn--fiqs8s: could not connect to host
 wangzuan168.cc: did not receive HSTS header
 wapjt.cn: could not connect to host
 warandpeace.xyz: could not connect to host
 warhistoryonline.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]
 warmlyyours.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]
 warped.com: did not receive HSTS header
+waschpark-hantschel.de: did not receive HSTS header
 watchium.com: did not receive HSTS header
 watsonhall.uk: could not connect to host
 wave.is: could not connect to host
 wavefrontsystemstech.com: could not connect to host
 wealthfactory.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]
 wear2work.nl: did not receive HSTS header
 wearandcare.net: could not connect to host
 weaverhairextensions.nl: did not receive HSTS header
@@ -3736,16 +3764,17 @@ webwork.pw: could not connect to host
 weddingenvelopes.co.uk: did not receive HSTS header
 weddingibiza.nl: could not connect to host
 weekly.fyi: could not connect to host
 wegenaer.nl: could not connect to host
 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]
 weltmeisterschaft.net: could not connect to host
 weme.eu: could not connect to host
 wendalyncheng.com: could not connect to host
+wer-kommt-her.de: could not connect to host
 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
 wesleyharris.ca: did not receive HSTS header
 westendzone.com: max-age too low: 0
 westerhoud.nl: did not receive HSTS header
 wettbuero.de: did not receive HSTS header
@@ -3851,16 +3880,17 @@ xellos.ml: could not connect to host
 xendo.net: did not receive HSTS header
 xenesisziarovky.sk: could not connect to host
 xett.com: did not receive HSTS header
 xf-liam.com: could not connect to host
 xfive.de: did not receive HSTS header
 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
 xn--3lqp21gwna.xn--fiqs8s: could not connect to host
 xn--3lqp21gwna.xn--fiqz9s: could not connect to host
 xn--3lqt7ir4md4tzwa.xn--fiqs8s: could not connect to host
 xn--4dbjwf8c.cf: could not connect to host
 xn--4dbjwf8c.ga: could not connect to host
 xn--4dbjwf8c.gq: could not connect to host
@@ -3873,16 +3903,17 @@ xn--lgb3a8bcpn.cf: could not connect to 
 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--maraa-rta.org: could not connect to host
 xn--mgbbh2a9fub.xn--ngbc5azd: did not receive HSTS header
 xn--neb-tma3u8u.xyz: could not connect to host
 xng.io: did not receive HSTS header
+xobox.me: could not connect to host
 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
 xplore-dna.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]
 xsmobile.de: could not connect to host
 xtream-hosting.com: could not connect to host
 xtream-hosting.de: could not connect to host
 xtream-hosting.eu: could not connect to host
 xtreamhosting.eu: could not connect to host
@@ -3915,16 +3946,17 @@ ynsn.nl: did not receive HSTS header
 yokeepo.com: max-age too low: 0
 yoloboatrentals.com: did not receive HSTS header
 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
 yourstrongbox.com: could not connect to host
 yout.com: max-age too low: 60000
+ys-shop.biz: 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
 yukontec.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]
 yunzhu.li: did not receive HSTS header
 yunzhu.org: could not connect to host
 yux.io: did not receive HSTS header
@@ -3940,38 +3972,39 @@ zarooba.com: did not receive HSTS header
 zary.me: 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
 zebry.nl: could not connect to host
 zefiris.org: did not receive HSTS header
 zefu.ca: could not connect to host
 zeitpunkt-kulturmagazin.de: did not receive HSTS header
-zeitzer-turngala.de: could not connect to host
 zelezny.uk: did not receive HSTS header
 zelfstandigemakelaars.net: did not receive HSTS header
 zenlogic.com: could not connect to host
 zenpayroll.com: did not receive HSTS header
 zentraler-kreditausschuss.de: did not receive HSTS header
 zentralwolke.de: did not receive HSTS header
 zera.com.au: could not connect to host
 zett4.me: could not connect to host
 zeytin.pro: could not connect to host
 zh.search.yahoo.com: did not receive HSTS header
 zhaojin97.cn: did not receive HSTS header
 zhendingresources.com: max-age too low: 0
 zigcore.com.br: could not connect to host
 zirtue.io: could not connect to host
+ziyuanabc.xyz: could not connect to host
 zking.ga: could not connect to host
 zocken.com: could not connect to host
 zomerschoen.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]
 zoneminder.com: did not receive HSTS header
 zoo24.de: did not receive HSTS header
 zoomingin.net: max-age too low: 2592000
+zorgclustertool.nl: could not connect to host
 zortium.report: could not connect to host
 zoznamrealit.sk: did not receive HSTS header
 zqhong.com: could not connect to host
 zrn.in: did not receive HSTS header
 ztan.tk: could not connect to host
 zten.org: could not connect to host
-zulu7.com: could not connect to host
 zvncloud.com: did not receive HSTS header
+zwy.me: did not receive HSTS header
 zyf.pw: 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(1491056514003000);
+const PRTime gPreloadListExpirationTime = INT64_C(1491229264259000);
 
 static const char kSTSHostTable[] = {
   /* "007-preisvergleich.de", true */ '0', '0', '7', '-', 'p', 'r', 'e', 'i', 's', 'v', 'e', 'r', 'g', 'l', 'e', 'i', 'c', 'h', '.', 'd', 'e', '\0',
   /* "007sascha.de", true */ '0', '0', '7', 's', 'a', 's', 'c', 'h', 'a', '.', 'd', 'e', '\0',
   /* "00f.net", true */ '0', '0', 'f', '.', 'n', 'e', 't', '\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',
   /* "050media.nl", true */ '0', '5', '0', 'm', 'e', 'd', 'i', 'a', '.', 'n', 'l', '\0',
@@ -150,16 +150,17 @@ static const char kSTSHostTable[] = {
   /* "3r.org.uk", true */ '3', 'r', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "3s-hosting.de", true */ '3', 's', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'e', '\0',
   /* "3sreporting.com", true */ '3', 's', 'r', 'e', 'p', 'o', 'r', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "3timegear.com", true */ '3', 't', 'i', 'm', 'e', 'g', 'e', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "3yearloans.com", true */ '3', 'y', 'e', 'a', 'r', 'l', 'o', 'a', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "4-1-where.com", true */ '4', '-', '1', '-', 'w', 'h', 'e', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "4-it.de", true */ '4', '-', 'i', 't', '.', 'd', 'e', '\0',
   /* "403.ch", true */ '4', '0', '3', '.', 'c', 'h', '\0',
+  /* "404.sh", true */ '4', '0', '4', '.', 's', 'h', '\0',
   /* "404404.info", true */ '4', '0', '4', '4', '0', '4', '.', 'i', 'n', 'f', 'o', '\0',
   /* "4096bit.de", true */ '4', '0', '9', '6', 'b', 'i', 't', '.', 'd', 'e', '\0',
   /* "41-where.com", true */ '4', '1', '-', 'w', 'h', 'e', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "41844.de", true */ '4', '1', '8', '4', '4', '.', 'd', 'e', '\0',
   /* "41where.com", true */ '4', '1', 'w', 'h', 'e', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "4500.co.il", true */ '4', '5', '0', '0', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "4azino777.ru", true */ '4', 'a', 'z', 'i', 'n', 'o', '7', '7', '7', '.', 'r', 'u', '\0',
   /* "4cclothing.com", true */ '4', 'c', 'c', 'l', 'o', 't', 'h', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
@@ -190,16 +191,17 @@ static const char kSTSHostTable[] = {
   /* "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',
   /* "7thcircledesigns.com", true */ '7', 't', 'h', 'c', 'i', 'r', 'c', 'l', 'e', 'd', 'e', 's', 'i', 'g', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "7thheavenrestaurant.com", true */ '7', 't', 'h', 'h', 'e', 'a', 'v', 'e', 'n', 'r', 'e', 's', 't', 'a', 'u', 'r', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "7x24servis.com", true */ '7', 'x', '2', '4', 's', 'e', 'r', 'v', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "86metro.ru", true */ '8', '6', 'm', 'e', 't', 'r', 'o', '.', 'r', 'u', '\0',
+  /* "88.to", true */ '8', '8', '.', 't', 'o', '\0',
   /* "888azino.com", true */ '8', '8', '8', 'a', 'z', 'i', 'n', 'o', '.', 'c', 'o', 'm', '\0',
   /* "888sport.dk", true */ '8', '8', '8', 's', 'p', 'o', 'r', 't', '.', 'd', 'k', '\0',
   /* "888sport.it", true */ '8', '8', '8', 's', 'p', 'o', 'r', 't', '.', 'i', 't', '\0',
   /* "8mpay.com", true */ '8', 'm', 'p', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "8pecxstudios.com", true */ '8', 'p', 'e', 'c', 'x', 's', 't', 'u', 'd', 'i', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "8t8.eu", true */ '8', 't', '8', '.', 'e', 'u', '\0',
   /* "8t88.biz", true */ '8', 't', '8', '8', '.', 'b', 'i', 'z', '\0',
   /* "8thportsmouth.org.uk", true */ '8', 't', 'h', 'p', 'o', 'r', 't', 's', 'm', 'o', 'u', 't', 'h', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
@@ -387,26 +389,26 @@ static const char kSTSHostTable[] = {
   /* "aerelon.de", true */ 'a', 'e', 'r', 'e', 'l', 'o', 'n', '.', 'd', 'e', '\0',
   /* "aerolog.co", true */ 'a', 'e', 'r', 'o', 'l', 'o', 'g', '.', 'c', 'o', '\0',
   /* "aeyoun.com", true */ 'a', 'e', 'y', 'o', 'u', 'n', '.', 'c', 'o', 'm', '\0',
   /* "afb24.de", true */ 'a', 'f', 'b', '2', '4', '.', 'd', 'e', '\0',
   /* "affiliateroyale.com", true */ 'a', 'f', 'f', 'i', 'l', 'i', 'a', 't', 'e', 'r', 'o', 'y', 'a', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "affilie.de", true */ 'a', 'f', 'f', 'i', 'l', 'i', 'e', '.', 'd', 'e', '\0',
   /* "affordableazdivorce.com", true */ 'a', 'f', 'f', 'o', 'r', 'd', 'a', 'b', 'l', 'e', 'a', 'z', 'd', 'i', 'v', 'o', 'r', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "afghan.dating", true */ 'a', 'f', 'g', 'h', 'a', 'n', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
-  /* "aficotroceni.ro", true */ 'a', 'f', 'i', 'c', 'o', 't', 'r', 'o', 'c', 'e', 'n', 'i', '.', 'r', 'o', '\0',
   /* "aflattr.com", true */ 'a', 'f', 'l', 'a', 't', 't', 'r', '.', 'c', 'o', 'm', '\0',
   /* "afmchandler.com", true */ 'a', 'f', 'm', 'c', 'h', 'a', 'n', 'd', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "afp548.com", true */ 'a', 'f', 'p', '5', '4', '8', '.', 'c', 'o', 'm', '\0',
   /* "africa.dating", true */ 'a', 'f', 'r', 'i', 'c', 'a', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "africatravel.de", true */ 'a', 'f', 'r', 'i', 'c', 'a', 't', 'r', 'a', 'v', 'e', 'l', '.', 'd', 'e', '\0',
   /* "afuh.de", true */ 'a', 'f', 'u', 'h', '.', 'd', 'e', '\0',
   /* "afvallendoeje.nu", true */ 'a', 'f', 'v', 'a', 'l', 'l', 'e', 'n', 'd', 'o', 'e', 'j', 'e', '.', 'n', 'u', '\0',
   /* "afyou.co.kr", true */ 'a', 'f', 'y', 'o', 'u', '.', 'c', 'o', '.', 'k', 'r', '\0',
   /* "agdalieso.com.ba", true */ 'a', 'g', 'd', 'a', 'l', 'i', 'e', 's', 'o', '.', 'c', 'o', 'm', '.', 'b', 'a', '\0',
+  /* "ageg.ca", true */ 'a', 'g', 'e', 'g', '.', 'c', 'a', '\0',
   /* "agenda-loto.net", false */ 'a', 'g', 'e', 'n', 'd', 'a', '-', 'l', 'o', 't', 'o', '.', 'n', 'e', 't', '\0',
   /* "aggr.pw", true */ 'a', 'g', 'g', 'r', '.', 'p', 'w', '\0',
   /* "agilebits.com", true */ 'a', 'g', 'i', 'l', 'e', 'b', 'i', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "agileui.com", true */ 'a', 'g', 'i', 'l', 'e', 'u', 'i', '.', 'c', 'o', 'm', '\0',
   /* "agonswim.com", false */ 'a', 'g', 'o', 'n', 's', 'w', 'i', 'm', '.', 'c', 'o', 'm', '\0',
   /* "agotnes.com", true */ 'a', 'g', 'o', 't', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "agowa338.de", true */ 'a', 'g', 'o', 'w', 'a', '3', '3', '8', '.', 'd', 'e', '\0',
   /* "agrias.com.br", true */ 'a', 'g', 'r', 'i', 'a', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
@@ -487,17 +489,16 @@ static const char kSTSHostTable[] = {
   /* "aleax.me", true */ 'a', 'l', 'e', 'a', 'x', '.', 'm', 'e', '\0',
   /* "alecpap.com", true */ 'a', 'l', 'e', 'c', 'p', 'a', 'p', '.', 'c', 'o', 'm', '\0',
   /* "alecpapierniak.com", true */ 'a', 'l', 'e', 'c', 'p', 'a', 'p', 'i', 'e', 'r', 'n', 'i', 'a', 'k', '.', 'c', 'o', 'm', '\0',
   /* "alecrust.com", true */ 'a', 'l', 'e', 'c', 'r', 'u', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "aleksib.fi", true */ 'a', 'l', 'e', 'k', 's', 'i', 'b', '.', 'f', 'i', '\0',
   /* "alela.fr", true */ 'a', 'l', 'e', 'l', 'a', '.', 'f', 'r', '\0',
   /* "alertboxx.com", true */ 'a', 'l', 'e', 'r', 't', 'b', 'o', 'x', 'x', '.', 'c', 'o', 'm', '\0',
   /* "alertwire.com", true */ 'a', 'l', 'e', 'r', 't', 'w', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "alessandroz.pro", true */ 'a', 'l', 'e', 's', 's', 'a', 'n', 'd', 'r', 'o', 'z', '.', 'p', 'r', 'o', '\0',
   /* "alex-ross.co.uk", true */ 'a', 'l', 'e', 'x', '-', 'r', 'o', 's', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "alexanderschimpf.de", true */ 'a', 'l', 'e', 'x', 'a', 'n', 'd', 'e', 'r', 's', 'c', 'h', 'i', 'm', 'p', 'f', '.', 'd', 'e', '\0',
   /* "alexandra-schulze.de", true */ 'a', 'l', 'e', 'x', 'a', 'n', 'd', 'r', 'a', '-', 's', 'c', 'h', 'u', 'l', 'z', 'e', '.', 'd', 'e', '\0',
   /* "alexbaker.org", true */ 'a', 'l', 'e', 'x', 'b', 'a', 'k', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "alexberts.ch", true */ 'a', 'l', 'e', 'x', 'b', 'e', 'r', 't', 's', '.', 'c', 'h', '\0',
   /* "alexei.su", true */ 'a', 'l', 'e', 'x', 'e', 'i', '.', 's', 'u', '\0',
   /* "alexgaynor.net", true */ 'a', 'l', 'e', 'x', 'g', 'a', 'y', 'n', 'o', 'r', '.', 'n', 'e', 't', '\0',
   /* "alexhd.de", true */ 'a', 'l', 'e', 'x', 'h', 'd', '.', 'd', 'e', '\0',
@@ -675,17 +676,16 @@ static const char kSTSHostTable[] = {
   /* "angristan.fr", true */ 'a', 'n', 'g', 'r', 'i', 's', 't', 'a', 'n', '.', 'f', 'r', '\0',
   /* "angularjs.org", true */ 'a', 'n', 'g', 'u', 'l', 'a', 'r', 'j', 's', '.', 'o', 'r', 'g', '\0',
   /* "animalnet.de", false */ 'a', 'n', 'i', 'm', 'a', 'l', 'n', 'e', 't', '.', 'd', 'e', '\0',
   /* "anime.my", false */ 'a', 'n', 'i', 'm', 'e', '.', 'm', 'y', '\0',
   /* "anitaalbersen.nl", true */ 'a', 'n', 'i', 't', 'a', 'a', 'l', 'b', 'e', 'r', 's', 'e', 'n', '.', 'n', 'l', '\0',
   /* "anitube-nocookie.ch", true */ 'a', 'n', 'i', 't', 'u', 'b', 'e', '-', 'n', 'o', 'c', 'o', 'o', 'k', 'i', 'e', '.', 'c', 'h', '\0',
   /* "anitube.ch", true */ 'a', 'n', 'i', 't', 'u', 'b', 'e', '.', 'c', 'h', '\0',
   /* "ankarakart.com.tr", true */ 'a', 'n', 'k', 'a', 'r', 'a', 'k', 'a', 'r', 't', '.', 'c', 'o', 'm', '.', 't', 'r', '\0',
-  /* "ankaraprofesyonelnakliyat.com.tr", false */ 'a', 'n', 'k', 'a', 'r', 'a', 'p', 'r', 'o', 'f', 'e', 's', 'y', 'o', 'n', 'e', 'l', 'n', 'a', 'k', 'l', 'i', 'y', 'a', 't', '.', 'c', 'o', 'm', '.', 't', 'r', '\0',
   /* "ankaraprofesyonelwebtasarim.com", true */ 'a', 'n', 'k', 'a', 'r', 'a', 'p', 'r', 'o', 'f', 'e', 's', 'y', 'o', 'n', 'e', 'l', 'w', 'e', 'b', 't', 'a', 's', 'a', 'r', 'i', 'm', '.', 'c', 'o', 'm', '\0',
   /* "ankarauzmanlarnakliyat.com", true */ 'a', 'n', 'k', 'a', 'r', 'a', 'u', 'z', 'm', 'a', 'n', 'l', 'a', 'r', 'n', 'a', 'k', 'l', 'i', 'y', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "anna.info", true */ 'a', 'n', 'n', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "annahmeschluss.de", true */ 'a', 'n', 'n', 'a', 'h', 'm', 'e', 's', 'c', 'h', 'l', 'u', 's', 's', '.', 'd', 'e', '\0',
   /* "annarokina.com", true */ 'a', 'n', 'n', 'a', 'r', 'o', 'k', 'i', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "annejan.com", true */ 'a', 'n', 'n', 'e', 'j', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "annetta.com", true */ 'a', 'n', 'n', 'e', 't', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "annevankesteren.com", true */ 'a', 'n', 'n', 'e', 'v', 'a', 'n', 'k', 'e', 's', 't', 'e', 'r', 'e', 'n', '.', 'c', 'o', 'm', '\0',
@@ -776,17 +776,16 @@ static const char kSTSHostTable[] = {
   /* "appmobile.io", true */ 'a', 'p', 'p', 'm', 'o', 'b', 'i', 'l', 'e', '.', 'i', 'o', '\0',
   /* "appointed.at", true */ 'a', 'p', 'p', 'o', 'i', 'n', 't', 'e', 'd', '.', 'a', 't', '\0',
   /* "approbo.com", true */ 'a', 'p', 'p', 'r', 'o', 'b', 'o', '.', 'c', 'o', 'm', '\0',
   /* "apps.facebook.com", false */ 'a', 'p', 'p', 's', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0',
   /* "apps.fedoraproject.org", true */ 'a', 'p', 'p', 's', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "apps.stg.fedoraproject.org", true */ 'a', 'p', 'p', 's', '.', 's', 't', 'g', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "appsbystudio.co.uk", true */ 'a', 'p', 'p', 's', 'b', 'y', 's', 't', 'u', 'd', 'i', 'o', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "appsdash.io", true */ 'a', 'p', 'p', 's', 'd', 'a', 's', 'h', '.', 'i', 'o', '\0',
-  /* "appson.co.uk", true */ 'a', 'p', 'p', 's', 'o', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "appui-de-fenetre.fr", true */ 'a', 'p', 'p', 'u', 'i', '-', 'd', 'e', '-', 'f', 'e', 'n', 'e', 't', 'r', 'e', '.', 'f', 'r', '\0',
   /* "appuro.com", true */ 'a', 'p', 'p', 'u', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "aprovpn.com", true */ 'a', 'p', 'r', 'o', 'v', 'p', 'n', '.', 'c', 'o', 'm', '\0',
   /* "aprsdroid.org", true */ 'a', 'p', 'r', 's', 'd', 'r', 'o', 'i', 'd', '.', 'o', 'r', 'g', '\0',
   /* "aprz.de", true */ 'a', 'p', 'r', 'z', '.', 'd', 'e', '\0',
   /* "apstudynotes.org", true */ 'a', 'p', 's', 't', 'u', 'd', 'y', 'n', 'o', 't', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "aptive.co.uk", true */ 'a', 'p', 't', 'i', 'v', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "aqqrate.com", true */ 'a', 'q', 'q', 'r', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
@@ -882,29 +881,25 @@ static const char kSTSHostTable[] = {
   /* "asahikoji.net", true */ 'a', 's', 'a', 'h', 'i', 'k', 'o', 'j', 'i', '.', 'n', 'e', 't', '\0',
   /* "asandu.eu", true */ 'a', 's', 'a', 'n', 'd', 'u', '.', 'e', 'u', '\0',
   /* "asato-jewelry.com", true */ 'a', 's', 'a', 't', 'o', '-', 'j', 'e', 'w', 'e', 'l', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "asbito.de", true */ 'a', 's', 'b', 'i', 't', 'o', '.', 'd', 'e', '\0',
   /* "ascamso.com", true */ 'a', 's', 'c', 'a', 'm', 's', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ascension.run", true */ 'a', 's', 'c', 'e', 'n', 's', 'i', 'o', 'n', '.', 'r', 'u', 'n', '\0',
   /* "ascii.moe", true */ 'a', 's', 'c', 'i', 'i', '.', 'm', 'o', 'e', '\0',
   /* "asciitable.tips", true */ 'a', 's', 'c', 'i', 'i', 't', 'a', 'b', 'l', 'e', '.', 't', 'i', 'p', 's', '\0',
-  /* "ashleymedway.com", true */ 'a', 's', 'h', 'l', 'e', 'y', 'm', 'e', 'd', 'w', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "ashutoshmishra.org", true */ 'a', 's', 'h', 'u', 't', 'o', 's', 'h', 'm', 'i', 's', 'h', 'r', 'a', '.', 'o', 'r', 'g', '\0',
-  /* "asianodor.com", true */ 'a', 's', 'i', 'a', 'n', 'o', 'd', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "ask.fedoraproject.org", true */ 'a', 's', 'k', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "ask.stg.fedoraproject.org", true */ 'a', 's', 'k', '.', 's', 't', 'g', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
-  /* "askfit.cz", true */ 'a', 's', 'k', 'f', 'i', 't', '.', 'c', 'z', '\0',
   /* "askizzy.org.au", true */ 'a', 's', 'k', 'i', 'z', 'z', 'y', '.', 'o', 'r', 'g', '.', 'a', 'u', '\0',
   /* "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',
   /* "asm-x.com", true */ 'a', 's', 'm', '-', 'x', '.', 'c', 'o', 'm', '\0',
-  /* "asmui.ml", true */ 'a', 's', 'm', 'u', 'i', '.', 'm', 'l', '\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',
   /* "assekuranzjobs.de", true */ 'a', 's', 's', 'e', 'k', 'u', 'r', 'a', 'n', 'z', 'j', 'o', 'b', 's', '.', 'd', 'e', '\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',
@@ -933,26 +928,28 @@ static const char kSTSHostTable[] = {
   /* "atishchenko.com", true */ 'a', 't', 'i', 's', 'h', 'c', 'h', 'e', 'n', 'k', 'o', '.', 'c', 'o', 'm', '\0',
   /* "atisoft.biz", true */ 'a', 't', 'i', 's', 'o', 'f', 't', '.', 'b', 'i', 'z', '\0',
   /* "atisoft.com.tr", true */ 'a', 't', 'i', 's', 'o', 'f', 't', '.', 'c', 'o', 'm', '.', 't', 'r', '\0',
   /* "atisoft.net", true */ 'a', 't', 'i', 's', 'o', 'f', 't', '.', 'n', 'e', 't', '\0',
   /* "atisoft.net.tr", true */ 'a', 't', 'i', 's', 'o', 'f', 't', '.', 'n', 'e', 't', '.', 't', 'r', '\0',
   /* "atisoft.web.tr", true */ 'a', 't', 'i', 's', 'o', 'f', 't', '.', 'w', 'e', 'b', '.', 't', 'r', '\0',
   /* "atitude.com", true */ 'a', 't', 'i', 't', 'u', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "atlantichomes.com.au", true */ 'a', 't', 'l', 'a', 'n', 't', 'i', 'c', 'h', 'o', 'm', 'e', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
+  /* "atlantischild.hu", true */ 'a', 't', 'l', 'a', 'n', 't', 'i', 's', 'c', 'h', 'i', 'l', 'd', '.', 'h', 'u', '\0',
   /* "atlassian.net", true */ 'a', 't', 'l', 'a', 's', 's', 'i', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "atletika.hu", true */ 'a', 't', 'l', 'e', 't', 'i', 'k', 'a', '.', 'h', 'u', '\0',
   /* "atnis.com", true */ 'a', 't', 'n', 'i', 's', '.', 'c', 'o', 'm', '\0',
   /* "atolm.net", true */ 'a', 't', 'o', 'l', 'm', '.', 'n', 'e', 't', '\0',
   /* "atom-china.org", true */ 'a', 't', 'o', 'm', '-', 'c', 'h', 'i', 'n', 'a', '.', 'o', 'r', 'g', '\0',
   /* "atom.solutions", true */ 'a', 't', 'o', 'm', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0',
   /* "atombase.org", true */ 'a', 't', 'o', 'm', 'b', 'a', 's', 'e', '.', 'o', 'r', 'g', '\0',
   /* "atrinik.org", true */ 'a', 't', 'r', 'i', 'n', 'i', 'k', '.', 'o', 'r', 'g', '\0',
   /* "atte.fi", true */ 'a', 't', 't', 'e', '.', 'f', 'i', '\0',
   /* "attic118.com", true */ 'a', 't', 't', 'i', 'c', '1', '1', '8', '.', 'c', 'o', 'm', '\0',
+  /* "attilagyorffy.com", true */ 'a', 't', 't', 'i', 'l', 'a', 'g', 'y', 'o', 'r', 'f', 'f', 'y', '.', 'c', 'o', 'm', '\0',
   /* "attogproductions.com", true */ 'a', 't', 't', 'o', 'g', 'p', 'r', 'o', 'd', 'u', 'c', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "attogtech.com", true */ 'a', 't', 't', 'o', 'g', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "attorney.org.il", true */ 'a', 't', 't', 'o', 'r', 'n', 'e', 'y', '.', 'o', 'r', 'g', '.', 'i', 'l', '\0',
   /* "au2pb.net", true */ 'a', 'u', '2', 'p', 'b', '.', 'n', 'e', 't', '\0',
   /* "aucubin.moe", true */ 'a', 'u', 'c', 'u', 'b', 'i', 'n', '.', 'm', 'o', 'e', '\0',
   /* "audiense.com", true */ 'a', 'u', 'd', 'i', 'e', 'n', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "audio-detector.com", true */ 'a', 'u', 'd', 'i', 'o', '-', 'd', 'e', 't', 'e', 'c', 't', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "audiovisualdevices.com.au", true */ 'a', 'u', 'd', 'i', 'o', 'v', 'i', 's', 'u', 'a', 'l', 'd', 'e', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
@@ -978,16 +975,17 @@ static const char kSTSHostTable[] = {
   /* "ausschreibungen-suedtirol.it", true */ 'a', 'u', 's', 's', 'c', 'h', 'r', 'e', 'i', 'b', 'u', 'n', 'g', 'e', 'n', '-', 's', 'u', 'e', 'd', 't', 'i', 'r', 'o', 'l', '.', 'i', 't', '\0',
   /* "aussiecable.org", true */ 'a', 'u', 's', 's', 'i', 'e', 'c', 'a', 'b', 'l', 'e', '.', 'o', 'r', 'g', '\0',
   /* "aussiehq.com.au", true */ 'a', 'u', 's', 's', 'i', 'e', 'h', 'q', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "australiancattle.dog", true */ 'a', 'u', 's', 't', 'r', 'a', 'l', 'i', 'a', 'n', 'c', 'a', 't', 't', 'l', 'e', '.', 'd', 'o', 'g', '\0',
   /* "auth.adult", true */ 'a', 'u', 't', 'h', '.', 'a', 'd', 'u', 'l', 't', '\0',
   /* "authint.com", true */ 'a', 'u', 't', 'h', 'i', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "author24.ru", true */ 'a', 'u', 't', 'h', 'o', 'r', '2', '4', '.', 'r', 'u', '\0',
   /* "authoritynutrition.com", true */ 'a', 'u', 't', 'h', 'o', 'r', 'i', 't', 'y', 'n', 'u', 't', 'r', 'i', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
+  /* "autimatisering.nl", true */ 'a', 'u', 't', 'i', 'm', 'a', 't', 'i', 's', 'e', 'r', 'i', 'n', 'g', '.', 'n', 'l', '\0',
   /* "auto-anleitung.de", true */ 'a', 'u', 't', 'o', '-', 'a', 'n', 'l', 'e', 'i', 't', 'u', 'n', 'g', '.', 'd', 'e', '\0',
   /* "autoauctionsohio.com", true */ 'a', 'u', 't', 'o', 'a', 'u', 'c', 't', 'i', 'o', 'n', 's', 'o', 'h', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "autoauctionsvirginia.com", true */ 'a', 'u', 't', 'o', 'a', 'u', 'c', 't', 'i', 'o', 'n', 's', 'v', 'i', 'r', 'g', 'i', 'n', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "autodeploy.it", true */ 'a', 'u', 't', 'o', 'd', 'e', 'p', 'l', 'o', 'y', '.', 'i', 't', '\0',
   /* "autoledky.sk", true */ 'a', 'u', 't', 'o', 'l', 'e', 'd', 'k', 'y', '.', 's', 'k', '\0',
   /* "automacity.com", true */ 'a', 'u', 't', 'o', 'm', 'a', 'c', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "autoskola.hr", true */ 'a', 'u', 't', 'o', 's', 'k', 'o', 'l', 'a', '.', 'h', 'r', '\0',
   /* "autoskole.hr", true */ 'a', 'u', 't', 'o', 's', 'k', 'o', 'l', 'e', '.', 'h', 'r', '\0',
@@ -1057,17 +1055,16 @@ static const char kSTSHostTable[] = {
   /* "babyfotograf-schweiz.ch", true */ 'b', 'a', 'b', 'y', 'f', 'o', 't', 'o', 'g', 'r', 'a', 'f', '-', 's', 'c', 'h', 'w', 'e', 'i', 'z', '.', 'c', 'h', '\0',
   /* "babypibu.com", true */ 'b', 'a', 'b', 'y', 'p', 'i', 'b', 'u', '.', 'c', 'o', 'm', '\0',
   /* "babystep.tv", true */ 'b', 'a', 'b', 'y', 's', 't', 'e', 'p', '.', 't', 'v', '\0',
   /* "bacchanallia.com", true */ 'b', 'a', 'c', 'c', 'h', 'a', 'n', 'a', 'l', 'l', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "backeby.eu", true */ 'b', 'a', 'c', 'k', 'e', 'b', 'y', '.', 'e', 'u', '\0',
   /* "backmountaingas.com", true */ 'b', 'a', 'c', 'k', 'm', 'o', 'u', 'n', 't', 'a', 'i', 'n', 'g', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "backpacker.dating", true */ 'b', 'a', 'c', 'k', 'p', 'a', 'c', 'k', 'e', 'r', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "backscattering.de", true */ 'b', 'a', 'c', 'k', 's', 'c', 'a', 't', 't', 'e', 'r', 'i', 'n', 'g', '.', 'd', 'e', '\0',
-  /* "backschues.net", true */ 'b', 'a', 'c', 'k', 's', 'c', 'h', 'u', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "bacon-monitoring.org", true */ 'b', 'a', 'c', 'o', 'n', '-', 'm', 'o', 'n', 'i', 't', 'o', 'r', 'i', 'n', 'g', '.', 'o', 'r', 'g', '\0',
   /* "bacontreeconsulting.com", true */ 'b', 'a', 'c', 'o', 'n', 't', 'r', 'e', 'e', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "bacula.jp", true */ 'b', 'a', 'c', 'u', 'l', 'a', '.', 'j', 'p', '\0',
   /* "bad.horse", true */ 'b', 'a', 'd', '.', 'h', 'o', 'r', 's', 'e', '\0',
   /* "badbee.cc", true */ 'b', 'a', 'd', 'b', 'e', 'e', '.', 'c', 'c', '\0',
   /* "badf00d.de", true */ 'b', 'a', 'd', 'f', '0', '0', 'd', '.', 'd', 'e', '\0',
   /* "badges.fedoraproject.org", true */ 'b', 'a', 'd', 'g', 'e', 's', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "badges.stg.fedoraproject.org", true */ 'b', 'a', 'd', 'g', 'e', 's', '.', 's', 't', 'g', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
@@ -1083,17 +1080,16 @@ static const char kSTSHostTable[] = {
   /* "bagheera.me.uk", true */ 'b', 'a', 'g', 'h', 'e', 'e', 'r', 'a', '.', 'm', 'e', '.', 'u', 'k', '\0',
   /* "bah.im", true */ 'b', 'a', 'h', '.', 'i', 'm', '\0',
   /* "baifubao.com", true */ 'b', 'a', 'i', 'f', 'u', 'b', 'a', 'o', '.', 'c', 'o', 'm', '\0',
   /* "baiker.info", true */ 'b', 'a', 'i', 'k', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0',
   /* "bair.io", true */ 'b', 'a', 'i', 'r', '.', 'i', 'o', '\0',
   /* "baiyangliu.com", true */ 'b', 'a', 'i', 'y', 'a', 'n', 'g', 'l', 'i', 'u', '.', 'c', 'o', 'm', '\0',
   /* "bajic.ch", true */ 'b', 'a', 'j', 'i', 'c', '.', 'c', 'h', '\0',
   /* "bakabt.info", true */ 'b', 'a', 'k', 'a', 'b', 't', '.', 'i', 'n', 'f', 'o', '\0',
-  /* "bakaweb.fr", true */ 'b', 'a', 'k', 'a', 'w', 'e', 'b', '.', 'f', 'r', '\0',
   /* "bakingstone.com", true */ 'b', 'a', 'k', 'i', 'n', 'g', 's', 't', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "balboa.io", true */ 'b', 'a', 'l', 'b', 'o', 'a', '.', 'i', 'o', '\0',
   /* "baleares.party", true */ 'b', 'a', 'l', 'e', 'a', 'r', 'e', 's', '.', 'p', 'a', 'r', 't', 'y', '\0',
   /* "balicekzdravi.cz", true */ 'b', 'a', 'l', 'i', 'c', 'e', 'k', 'z', 'd', 'r', 'a', 'v', 'i', '.', 'c', 'z', '\0',
   /* "balikonos.cz", true */ 'b', 'a', 'l', 'i', 'k', 'o', 'n', 'o', 's', '.', 'c', 'z', '\0',
   /* "balist.es", true */ 'b', 'a', 'l', 'i', 's', 't', '.', 'e', 's', '\0',
   /* "baliyano.com", true */ 'b', 'a', 'l', 'i', 'y', 'a', 'n', 'o', '.', 'c', 'o', 'm', '\0',
   /* "balkonien.org", true */ 'b', 'a', 'l', 'k', 'o', 'n', 'i', 'e', 'n', '.', 'o', 'r', 'g', '\0',
@@ -1145,17 +1141,16 @@ static const char kSTSHostTable[] = {
   /* "barslecht.nl", true */ 'b', 'a', 'r', 's', 'l', 'e', 'c', 'h', 't', '.', 'n', 'l', '\0',
   /* "bartel.ws", true */ 'b', 'a', 'r', 't', 'e', 'l', '.', 'w', 's', '\0',
   /* "bartelt.name", true */ 'b', 'a', 'r', 't', 'e', 'l', 't', '.', 'n', 'a', 'm', 'e', '\0',
   /* "bartlamboo.nl", true */ 'b', 'a', 'r', 't', 'l', 'a', 'm', 'b', 'o', 'o', '.', 'n', 'l', '\0',
   /* "bartula.de", true */ 'b', 'a', 'r', 't', 'u', 'l', 'a', '.', 'd', 'e', '\0',
   /* "baruch.me", true */ 'b', 'a', 'r', 'u', 'c', 'h', '.', 'm', 'e', '\0',
   /* "barunisystems.com", true */ 'b', 'a', 'r', 'u', 'n', 'i', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "bashc.at", true */ 'b', 'a', 's', 'h', 'c', '.', 'a', 't', '\0',
-  /* "basilisk.io", true */ 'b', 'a', 's', 'i', 'l', 'i', 's', 'k', '.', 'i', 'o', '\0',
   /* "baskettemple.com", true */ 'b', 'a', 's', 'k', 'e', 't', 't', 'e', 'm', 'p', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "basnieuwenhuizen.nl", true */ 'b', 'a', 's', 'n', 'i', 'e', 'u', 'w', 'e', 'n', 'h', 'u', 'i', 'z', 'e', 'n', '.', 'n', 'l', '\0',
   /* "basnoslovno.com.ua", true */ 'b', 'a', 's', 'n', 'o', 's', 'l', 'o', 'v', 'n', 'o', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "basnoslovno.ru", true */ 'b', 'a', 's', 'n', 'o', 's', 'l', 'o', 'v', 'n', 'o', '.', 'r', 'u', '\0',
   /* "bastianstalder.ch", true */ 'b', 'a', 's', 't', 'i', 'a', 'n', 's', 't', 'a', 'l', 'd', 'e', 'r', '.', 'c', 'h', '\0',
   /* "basyspro.net", true */ 'b', 'a', 's', 'y', 's', 'p', 'r', 'o', '.', 'n', 'e', 't', '\0',
   /* "batfoundry.com", true */ 'b', 'a', 't', 'f', 'o', 'u', 'n', 'd', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "batschu.de", true */ 'b', 'a', 't', 's', 'c', 'h', 'u', '.', 'd', 'e', '\0',
@@ -1396,17 +1391,16 @@ static const char kSTSHostTable[] = {
   /* "biocrafting.net", true */ 'b', 'i', 'o', 'c', 'r', 'a', 'f', 't', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0',
   /* "biodieseldata.com", true */ 'b', 'i', 'o', 'd', 'i', 'e', 's', 'e', 'l', 'd', 'a', 't', 'a', '.', 'c', 'o', 'm', '\0',
   /* "bioemsan.cz", true */ 'b', 'i', 'o', 'e', 'm', 's', 'a', 'n', '.', 'c', 'z', '\0',
   /* "biogeniq.ca", true */ 'b', 'i', 'o', 'g', 'e', 'n', 'i', 'q', '.', 'c', 'a', '\0',
   /* "bioknowme.com", true */ 'b', 'i', 'o', 'k', 'n', 'o', 'w', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "biolindo.com", false */ 'b', 'i', 'o', 'l', 'i', 'n', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "bionicspirit.com", true */ 'b', 'i', 'o', 'n', 'i', 'c', 's', 'p', 'i', 'r', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "biosbits.org", true */ 'b', 'i', 'o', 's', 'b', 'i', 't', 's', '.', 'o', 'r', 'g', '\0',
-  /* "bioshome.de", true */ 'b', 'i', 'o', 's', 'h', 'o', 'm', 'e', '.', 'd', 'e', '\0',
   /* "biosignalanalytics.com", true */ 'b', 'i', 'o', 's', 'i', 'g', 'n', 'a', 'l', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "biosphere.cc", true */ 'b', 'i', 'o', 's', 'p', 'h', 'e', 'r', 'e', '.', 'c', 'c', '\0',
   /* "biou.me", true */ 'b', 'i', 'o', 'u', '.', 'm', 'e', '\0',
   /* "bip.gov.sa", false */ 'b', 'i', 'p', '.', 'g', 'o', 'v', '.', 's', 'a', '\0',
   /* "birdfeeder.online", true */ 'b', 'i', 'r', 'd', 'f', 'e', 'e', 'd', 'e', 'r', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "birminghamsunset.com", true */ 'b', 'i', 'r', 'm', 'i', 'n', 'g', 'h', 'a', 'm', 's', 'u', 'n', 's', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "birzan.org", true */ 'b', 'i', 'r', 'z', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "bit-rapid.com", true */ 'b', 'i', 't', '-', 'r', 'a', 'p', 'i', 'd', '.', 'c', 'o', 'm', '\0',
@@ -1503,16 +1497,17 @@ static const char kSTSHostTable[] = {
   /* "blackonion.com", true */ 'b', 'l', 'a', 'c', 'k', 'o', 'n', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "blackphoenix.de", true */ 'b', 'l', 'a', 'c', 'k', 'p', 'h', 'o', 'e', 'n', 'i', 'x', '.', 'd', 'e', '\0',
   /* "blackscytheconsulting.com", true */ 'b', 'l', 'a', 'c', 'k', 's', 'c', 'y', 't', 'h', 'e', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "blaise.io", true */ 'b', 'l', 'a', 'i', 's', 'e', '.', 'i', 'o', '\0',
   /* "blakerandall.xyz", true */ 'b', 'l', 'a', 'k', 'e', 'r', 'a', 'n', 'd', 'a', 'l', 'l', '.', 'x', 'y', 'z', '\0',
   /* "blancodent.com", true */ 'b', 'l', 'a', 'n', 'c', 'o', 'd', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "blankersfamily.com", true */ 'b', 'l', 'a', 'n', 'k', 'e', 'r', 's', 'f', 'a', 'm', 'i', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "blastersklan.com", true */ 'b', 'l', 'a', 's', 't', 'e', 'r', 's', 'k', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0',
+  /* "blaudev.es", true */ 'b', 'l', 'a', 'u', 'd', 'e', 'v', '.', 'e', 's', '\0',
   /* "blauerhunger.de", true */ 'b', 'l', 'a', 'u', 'e', 'r', 'h', 'u', 'n', 'g', 'e', 'r', '.', 'd', 'e', '\0',
   /* "blauwwit.be", true */ 'b', 'l', 'a', 'u', 'w', 'w', 'i', 't', '.', 'b', 'e', '\0',
   /* "blayne.me", true */ 'b', 'l', 'a', 'y', 'n', 'e', '.', 'm', 'e', '\0',
   /* "blazor.nl", true */ 'b', 'l', 'a', 'z', 'o', 'r', '.', 'n', 'l', '\0',
   /* "bleche-onlineshop.de", true */ 'b', 'l', 'e', 'c', 'h', 'e', '-', 'o', 'n', 'l', 'i', 'n', 'e', 's', 'h', 'o', 'p', '.', 'd', 'e', '\0',
   /* "blechschmidt.saarland", true */ 'b', 'l', 'e', 'c', 'h', 's', 'c', 'h', 'm', 'i', 'd', 't', '.', 's', 'a', 'a', 'r', 'l', 'a', 'n', 'd', '\0',
   /* "blendle.com", true */ 'b', 'l', 'e', 'n', 'd', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "blendle.nl", true */ 'b', 'l', 'e', 'n', 'd', 'l', 'e', '.', 'n', 'l', '\0',
@@ -1617,17 +1612,16 @@ static const char kSTSHostTable[] = {
   /* "boris64.net", true */ 'b', 'o', 'r', 'i', 's', '6', '4', '.', 'n', 'e', 't', '\0',
   /* "borisbesemer.com", true */ 'b', 'o', 'r', 'i', 's', 'b', 'e', 's', 'e', 'm', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "borowski.pw", true */ 'b', 'o', 'r', 'o', 'w', 's', 'k', 'i', '.', 'p', 'w', '\0',
   /* "borrelioz.com", true */ 'b', 'o', 'r', 'r', 'e', 'l', 'i', 'o', 'z', '.', 'c', 'o', 'm', '\0',
   /* "borscheid-wenig.com", true */ 'b', 'o', 'r', 's', 'c', 'h', 'e', 'i', 'd', '-', 'w', 'e', 'n', 'i', 'g', '.', 'c', 'o', 'm', '\0',
   /* "borysek.net", true */ 'b', 'o', 'r', 'y', 's', 'e', 'k', '.', 'n', 'e', 't', '\0',
   /* "bostadsportal.se", true */ 'b', 'o', 's', 't', 'a', 'd', 's', 'p', 'o', 'r', 't', 'a', 'l', '.', 's', 'e', '\0',
   /* "bosun.io", true */ 'b', 'o', 's', 'u', 'n', '.', 'i', 'o', '\0',
-  /* "bougeret.fr", true */ 'b', 'o', 'u', 'g', 'e', 'r', 'e', 't', '.', 'f', 'r', '\0',
   /* "bouncourseplanner.net", true */ 'b', 'o', 'u', 'n', 'c', 'o', 'u', 'r', 's', 'e', 'p', 'l', 'a', 'n', 'n', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "bouncyball.eu", false */ 'b', 'o', 'u', 'n', 'c', 'y', 'b', 'a', 'l', 'l', '.', 'e', 'u', '\0',
   /* "bouncyballs.org", true */ 'b', 'o', 'u', 'n', 'c', 'y', 'b', 'a', 'l', 'l', 's', '.', 'o', 'r', 'g', '\0',
   /* "bountyfactory.io", true */ 'b', 'o', 'u', 'n', 't', 'y', 'f', 'a', 'c', 't', 'o', 'r', 'y', '.', 'i', 'o', '\0',
   /* "bourasse.fr", true */ 'b', 'o', 'u', 'r', 'a', 's', 's', 'e', '.', 'f', 'r', '\0',
   /* "bourdon.fr.eu.org", true */ 'b', 'o', 'u', 'r', 'd', 'o', 'n', '.', 'f', 'r', '.', 'e', 'u', '.', 'o', 'r', 'g', '\0',
   /* "bourse-aux-jouets.org", false */ 'b', 'o', 'u', 'r', 's', 'e', '-', 'a', 'u', 'x', '-', 'j', 'o', 'u', 'e', 't', 's', '.', 'o', 'r', 'g', '\0',
   /* "bourse-aux-vetements.org", false */ 'b', 'o', 'u', 'r', 's', 'e', '-', 'a', 'u', 'x', '-', 'v', 'e', 't', 'e', 'm', 'e', 'n', 't', 's', '.', 'o', 'r', 'g', '\0',
@@ -1663,17 +1657,16 @@ static const char kSTSHostTable[] = {
   /* "brainlag.org", true */ 'b', 'r', 'a', 'i', 'n', 'l', 'a', 'g', '.', 'o', 'r', 'g', '\0',
   /* "brainster.co", false */ 'b', 'r', 'a', 'i', 'n', 's', 't', 'e', 'r', '.', 'c', 'o', '\0',
   /* "brakemanpro.com", true */ 'b', 'r', 'a', 'k', 'e', 'm', 'a', 'n', 'p', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "brakstad.org", true */ 'b', 'r', 'a', 'k', 's', 't', 'a', 'd', '.', 'o', 'r', 'g', '\0',
   /* "bralnik.com", true */ 'b', 'r', 'a', 'l', 'n', 'i', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bramvanaken.be", true */ 'b', 'r', 'a', 'm', 'v', 'a', 'n', 'a', 'k', 'e', 'n', '.', 'b', 'e', '\0',
   /* "bran.land", true */ 'b', 'r', 'a', 'n', '.', 'l', 'a', 'n', 'd', '\0',
   /* "brandbuilderwebsites.com", true */ 'b', 'r', 'a', 'n', 'd', 'b', 'u', 'i', 'l', 'd', 'e', 'r', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
-  /* "brandspray.com", true */ 'b', 'r', 'a', 'n', 'd', 's', 'p', 'r', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "brasalcosmetics.com", true */ 'b', 'r', 'a', 's', 'a', 'l', 'c', 'o', 's', 'm', 'e', 't', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "brashear.me", true */ 'b', 'r', 'a', 's', 'h', 'e', 'a', 'r', '.', 'm', 'e', '\0',
   /* "brasilmorar.com", true */ 'b', 'r', 'a', 's', 'i', 'l', 'm', 'o', 'r', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "bratislava-airport-taxi.com", true */ 'b', 'r', 'a', 't', 'i', 's', 'l', 'a', 'v', 'a', '-', 'a', 'i', 'r', 'p', 'o', 'r', 't', '-', 't', 'a', 'x', 'i', '.', 'c', 'o', 'm', '\0',
   /* "bratteng.me", false */ 'b', 'r', 'a', 't', 't', 'e', 'n', 'g', '.', 'm', 'e', '\0',
   /* "bratteng.xyz", true */ 'b', 'r', 'a', 't', 't', 'e', 'n', 'g', '.', 'x', 'y', 'z', '\0',
   /* "brava.bg", true */ 'b', 'r', 'a', 'v', 'a', '.', 'b', 'g', '\0',
   /* "brave.com", true */ 'b', 'r', 'a', 'v', 'e', '.', 'c', 'o', 'm', '\0',
@@ -1745,16 +1738,17 @@ static const char kSTSHostTable[] = {
   /* "btcarmory.com", true */ 'b', 't', 'c', 'a', 'r', 'm', 'o', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "btcontract.com", true */ 'b', 't', 'c', 'o', 'n', 't', 'r', 'a', 'c', 't', '.', 'c', 'o', 'm', '\0',
   /* "btio.pw", true */ 'b', 't', 'i', 'o', '.', 'p', 'w', '\0',
   /* "btrb.ml", true */ 'b', 't', 'r', 'b', '.', 'm', 'l', '\0',
   /* "btsoft.eu", true */ 'b', 't', 's', 'o', 'f', 't', '.', 'e', 'u', '\0',
   /* "bubblegumblog.com", true */ 'b', 'u', 'b', 'b', 'l', 'e', 'g', 'u', 'm', 'b', 'l', 'o', 'g', '.', 'c', 'o', 'm', '\0',
   /* "bubulazi.com", true */ 'b', 'u', 'b', 'u', 'l', 'a', 'z', 'i', '.', 'c', 'o', 'm', '\0',
   /* "bubulazy.com", true */ 'b', 'u', 'b', 'u', 'l', 'a', 'z', 'y', '.', 'c', 'o', 'm', '\0',
+  /* "buch-cuber.de", true */ 'b', 'u', 'c', 'h', '-', 'c', 'u', 'b', 'e', 'r', '.', 'd', 'e', '\0',
   /* "buck.com", true */ 'b', 'u', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bucket.tk", true */ 'b', 'u', 'c', 'k', 'e', 't', '.', 't', 'k', '\0',
   /* "budaev-shop.ru", true */ 'b', 'u', 'd', 'a', 'e', 'v', '-', 's', 'h', 'o', 'p', '.', 'r', 'u', '\0',
   /* "buddhistische-weisheiten.org", true */ 'b', 'u', 'd', 'd', 'h', 'i', 's', 't', 'i', 's', 'c', 'h', 'e', '-', 'w', 'e', 'i', 's', 'h', 'e', 'i', 't', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "buddlycrafts.com", true */ 'b', 'u', 'd', 'd', 'l', 'y', 'c', 'r', 'a', 'f', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "buderus-family.be", true */ 'b', 'u', 'd', 'e', 'r', 'u', 's', '-', 'f', 'a', 'm', 'i', 'l', 'y', '.', 'b', 'e', '\0',
   /* "budger.nl", true */ 'b', 'u', 'd', 'g', 'e', 'r', '.', 'n', 'l', '\0',
   /* "budgetalk.com", true */ 'b', 'u', 'd', 'g', 'e', 't', 'a', 'l', 'k', '.', 'c', 'o', 'm', '\0',
@@ -1822,16 +1816,17 @@ static const char kSTSHostTable[] = {
   /* "buzzconf.io", true */ 'b', 'u', 'z', 'z', 'c', 'o', 'n', 'f', '.', 'i', 'o', '\0',
   /* "buzzdeck.com", true */ 'b', 'u', 'z', 'z', 'd', 'e', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "bvionline.eu", true */ 'b', 'v', 'i', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'e', 'u', '\0',
   /* "bw.codes", true */ 'b', 'w', '.', 'c', 'o', 'd', 'e', 's', '\0',
   /* "bw81.xyz", true */ 'b', 'w', '8', '1', '.', 'x', 'y', 'z', '\0',
   /* "bwcscorecard.org", true */ 'b', 'w', 'c', 's', 'c', 'o', 'r', 'e', 'c', 'a', 'r', 'd', '.', 'o', 'r', 'g', '\0',
   /* "bwear4all.de", true */ 'b', 'w', 'e', 'a', 'r', '4', 'a', 'l', 'l', '.', 'd', 'e', '\0',
   /* "bwh1.net", true */ 'b', 'w', 'h', '1', '.', 'n', 'e', 't', '\0',
+  /* "bwilkinson.co.uk", true */ 'b', 'w', 'i', 'l', 'k', 'i', 'n', 's', 'o', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "bws16.de", true */ 'b', 'w', 's', '1', '6', '.', 'd', 'e', '\0',
   /* "bx-n.de", true */ 'b', 'x', '-', 'n', '.', 'd', 'e', '\0',
   /* "bxdev.me", true */ 'b', 'x', 'd', 'e', 'v', '.', 'm', 'e', '\0',
   /* "bxp40.at", true */ 'b', 'x', 'p', '4', '0', '.', 'a', 't', '\0',
   /* "bygningsregistrering.dk", true */ 'b', 'y', 'g', 'n', 'i', 'n', 'g', 's', 'r', 'e', 'g', 'i', 's', 't', 'r', 'e', 'r', 'i', 'n', 'g', '.', 'd', 'k', '\0',
   /* "bymark.co", true */ 'b', 'y', 'm', 'a', 'r', 'k', '.', 'c', 'o', '\0',
   /* "bymike.co", true */ 'b', 'y', 'm', 'i', 'k', 'e', '.', 'c', 'o', '\0',
   /* "bynet.cz", true */ 'b', 'y', 'n', 'e', 't', '.', 'c', 'z', '\0',
@@ -1883,17 +1878,16 @@ static const char kSTSHostTable[] = {
   /* "caasd.org", true */ 'c', 'a', 'a', 's', 'd', '.', 'o', 'r', 'g', '\0',
   /* "cablemod.com", true */ 'c', 'a', 'b', 'l', 'e', 'm', 'o', 'd', '.', 'c', 'o', 'm', '\0',
   /* "cablesandkits.com", true */ 'c', 'a', 'b', 'l', 'e', 's', 'a', 'n', 'd', 'k', 'i', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "cabsites.com", true */ 'c', 'a', 'b', 's', 'i', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "cacaolalina.com", true */ 'c', 'a', 'c', 'a', 'o', 'l', 'a', 'l', 'i', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "caceis.bank", true */ 'c', 'a', 'c', 'e', 'i', 's', '.', 'b', 'a', 'n', 'k', '\0',
   /* "cachethq.io", true */ 'c', 'a', 'c', 'h', 'e', 't', 'h', 'q', '.', 'i', 'o', '\0',
   /* "cackette.com", true */ 'c', 'a', 'c', 'k', 'e', 't', 't', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "cadmail.nl", true */ 'c', 'a', 'd', 'm', 'a', 'i', 'l', '.', 'n', 'l', '\0',
   /* "cadoth.net", true */ 'c', 'a', 'd', 'o', 't', 'h', '.', 'n', 'e', 't', '\0',
   /* "caesarkabalan.com", true */ 'c', 'a', 'e', 's', 'a', 'r', 'k', 'a', 'b', 'a', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "caesreon.com", true */ 'c', 'a', 'e', 's', 'r', 'e', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "cafe-murr.de", true */ 'c', 'a', 'f', 'e', '-', 'm', 'u', 'r', 'r', '.', 'd', 'e', '\0',
   /* "cafe-service.ru", true */ 'c', 'a', 'f', 'e', '-', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'r', 'u', '\0',
   /* "caffeinatedcode.com", true */ 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cainhosting.com", true */ 'c', 'a', 'i', 'n', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "cais.de", true */ 'c', 'a', 'i', 's', '.', 'd', 'e', '\0',
@@ -1928,17 +1922,16 @@ static const char kSTSHostTable[] = {
   /* "cambier.org", true */ 'c', 'a', 'm', 'b', 'i', 'e', 'r', '.', 'o', 'r', 'g', '\0',
   /* "cambridgeanalytica.net", true */ 'c', 'a', 'm', 'b', 'r', 'i', 'd', 'g', 'e', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 'a', '.', 'n', 'e', 't', '\0',
   /* "cambridgeanalytica.org", true */ 'c', 'a', 'm', 'b', 'r', 'i', 'd', 'g', 'e', 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 'a', '.', 'o', 'r', 'g', '\0',
   /* "camconn.cc", true */ 'c', 'a', 'm', 'c', 'o', 'n', 'n', '.', 'c', 'c', '\0',
   /* "camjackson.net", true */ 'c', 'a', 'm', 'j', 'a', 'c', 'k', 's', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "campaign-ad.com", true */ 'c', 'a', 'm', 'p', 'a', 'i', 'g', 'n', '-', 'a', 'd', '.', 'c', 'o', 'm', '\0',
   /* "campaign.gov.uk", true */ 'c', 'a', 'm', 'p', 'a', 'i', 'g', 'n', '.', 'g', 'o', 'v', '.', 'u', 'k', '\0',
   /* "campaignelves.com", true */ 'c', 'a', 'm', 'p', 'a', 'i', 'g', 'n', 'e', 'l', 'v', 'e', 's', '.', 'c', 'o', 'm', '\0',
-  /* "campbellsoftware.co.uk", false */ 'c', 'a', 'm', 'p', 'b', 'e', 'l', 'l', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "campbrainybunch.com", true */ 'c', 'a', 'm', 'p', 'b', 'r', 'a', 'i', 'n', 'y', 'b', 'u', 'n', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "camperdays.de", true */ 'c', 'a', 'm', 'p', 'e', 'r', 'd', 'a', 'y', 's', '.', 'd', 'e', '\0',
   /* "campermanaustralia.com", true */ 'c', 'a', 'm', 'p', 'e', 'r', 'm', 'a', 'n', 'a', 'u', 's', 't', 'r', 'a', 'l', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "camperverzekerd.nl", true */ 'c', 'a', 'm', 'p', 'e', 'r', 'v', 'e', 'r', 'z', 'e', 'k', 'e', 'r', 'd', '.', 'n', 'l', '\0',
   /* "campfiretails.org", true */ 'c', 'a', 'm', 'p', 'f', 'i', 'r', 'e', 't', 'a', 'i', 'l', 's', '.', 'o', 'r', 'g', '\0',
   /* "campfourpaws.com", true */ 'c', 'a', 'm', 'p', 'f', 'o', 'u', 'r', 'p', 'a', 'w', 's', '.', 'c', 'o', 'm', '\0',
   /* "campus-cybersecurity.team", true */ 'c', 'a', 'm', 'p', 'u', 's', '-', 'c', 'y', 'b', 'e', 'r', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 't', 'e', 'a', 'm', '\0',
   /* "campus-finance.com", true */ 'c', 'a', 'm', 'p', 'u', 's', '-', 'f', 'i', 'n', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0',
@@ -1996,16 +1989,17 @@ static const char kSTSHostTable[] = {
   /* "carezone.com", false */ 'c', 'a', 'r', 'e', 'z', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "caribbean.dating", true */ 'c', 'a', 'r', 'i', 'b', 'b', 'e', 'a', 'n', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "carif-idf.net", true */ 'c', 'a', 'r', 'i', 'f', '-', 'i', 'd', 'f', '.', 'n', 'e', 't', '\0',
   /* "carif-idf.org", true */ 'c', 'a', 'r', 'i', 'f', '-', 'i', 'd', 'f', '.', 'o', 'r', 'g', '\0',
   /* "carigami.fr", true */ 'c', 'a', 'r', 'i', 'g', 'a', 'm', 'i', '.', 'f', 'r', '\0',
   /* "caringladies.org", true */ 'c', 'a', 'r', 'i', 'n', 'g', 'l', 'a', 'd', 'i', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "cariocacooking.com", true */ 'c', 'a', 'r', 'i', 'o', 'c', 'a', 'c', 'o', 'o', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "carlandfaith.com", true */ 'c', 'a', 'r', 'l', 'a', 'n', 'd', 'f', 'a', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0',
+  /* "carlgo11.com", true */ 'c', 'a', 'r', 'l', 'g', 'o', '1', '1', '.', 'c', 'o', 'm', '\0',
   /* "carlosjeurissen.com", true */ 'c', 'a', 'r', 'l', 'o', 's', 'j', 'e', 'u', 'r', 'i', 's', 's', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "carnaticalifornia.com", true */ 'c', 'a', 'r', 'n', 'a', 't', 'i', 'c', 'a', 'l', 'i', 'f', 'o', 'r', 'n', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "carnildo.com", true */ 'c', 'a', 'r', 'n', 'i', 'l', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "caroli.com", true */ 'c', 'a', 'r', 'o', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "carriedin.com", true */ 'c', 'a', 'r', 'r', 'i', 'e', 'd', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "carsten.pw", true */ 'c', 'a', 'r', 's', 't', 'e', 'n', '.', 'p', 'w', '\0',
   /* "carstenfeuls.de", true */ 'c', 'a', 'r', 's', 't', 'e', 'n', 'f', 'e', 'u', 'l', 's', '.', 'd', 'e', '\0',
   /* "carto.la", true */ 'c', 'a', 'r', 't', 'o', '.', 'l', 'a', '\0',
@@ -2139,17 +2133,16 @@ static const char kSTSHostTable[] = {
   /* "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',
   /* "chatme.im", false */ 'c', 'h', 'a', 't', 'm', 'e', '.', 'i', 'm', '\0',
   /* "chatnederland.eu", true */ 'c', 'h', 'a', 't', 'n', 'e', 'd', 'e', 'r', 'l', 'a', 'n', 'd', '.', 'e', 'u', '\0',
   /* "chaz6.com", true */ 'c', 'h', 'a', 'z', '6', '.', 'c', 'o', 'm', '\0',
   /* "chazay.net", true */ 'c', 'h', 'a', 'z', 'a', 'y', '.', 'n', 'e', 't', '\0',
-  /* "chcemvediet.sk", true */ 'c', 'h', 'c', 'e', 'm', 'v', 'e', 'd', 'i', 'e', 't', '.', 's', 'k', '\0',
   /* "chch.it", true */ 'c', 'h', 'c', 'h', '.', 'i', 't', '\0',
   /* "cheapdns.org", true */ 'c', 'h', 'e', 'a', 'p', 'd', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "cheapestgamecards.de", true */ 'c', 'h', 'e', 'a', 'p', 'e', 's', 't', 'g', 'a', 'm', 'e', 'c', 'a', 'r', 'd', 's', '.', 'd', 'e', '\0',
   /* "cheapestgamecards.nl", true */ 'c', 'h', 'e', 'a', 'p', 'e', 's', 't', 'g', 'a', 'm', 'e', 'c', 'a', 'r', 'd', 's', '.', 'n', 'l', '\0',
   /* "cheapestgamecards.se", true */ 'c', 'h', 'e', 'a', 'p', 'e', 's', 't', 'g', 'a', 'm', 'e', 'c', 'a', 'r', 'd', 's', '.', 's', 'e', '\0',
   /* "cheapgeekts.com", false */ 'c', 'h', 'e', 'a', 'p', 'g', 'e', 'e', 'k', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "cheapgoa.com", true */ 'c', 'h', 'e', 'a', 'p', 'g', 'o', 'a', '.', 'c', 'o', 'm', '\0',
   /* "cheapticket.in", true */ 'c', 'h', 'e', 'a', 'p', 't', 'i', 'c', 'k', 'e', 't', '.', 'i', 'n', '\0',
@@ -2201,17 +2194,16 @@ static const char kSTSHostTable[] = {
   /* "chocotough.nl", false */ 'c', 'h', 'o', 'c', 'o', 't', 'o', 'u', 'g', 'h', '.', 'n', 'l', '\0',
   /* "choiralberta.ca", true */ 'c', 'h', 'o', 'i', 'r', 'a', 'l', 'b', 'e', 'r', 't', 'a', '.', 'c', 'a', '\0',
   /* "choosemypc.net", true */ 'c', 'h', 'o', 'o', 's', 'e', 'm', 'y', 'p', 'c', '.', 'n', 'e', 't', '\0',
   /* "chopperforums.com", true */ 'c', 'h', 'o', 'p', 'p', 'e', 'r', 'f', 'o', 'r', 'u', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "chorpinkpoemps.de", true */ 'c', 'h', 'o', 'r', 'p', 'i', 'n', 'k', 'p', 'o', 'e', 'm', 'p', 's', '.', 'd', 'e', '\0',
   /* "chosenplaintext.org", true */ 'c', 'h', 'o', 's', 'e', 'n', 'p', 'l', 'a', 'i', 'n', 't', 'e', 'x', 't', '.', 'o', 'r', 'g', '\0',
   /* "chourishi-shigoto.com", true */ 'c', 'h', 'o', 'u', 'r', 'i', 's', 'h', 'i', '-', 's', 'h', 'i', 'g', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "chris-edwards.net", true */ 'c', 'h', 'r', 'i', 's', '-', 'e', 'd', 'w', 'a', 'r', 'd', 's', '.', 'n', 'e', 't', '\0',
-  /* "chrisandsarahinasia.com", true */ 'c', 'h', 'r', 'i', 's', 'a', 'n', 'd', 's', 'a', 'r', 'a', 'h', 'i', 'n', 'a', 's', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "chrisbrown.id.au", true */ 'c', 'h', 'r', 'i', 's', 'b', 'r', 'o', 'w', 'n', '.', 'i', 'd', '.', 'a', 'u', '\0',
   /* "chriscarey.com", true */ 'c', 'h', 'r', 'i', 's', 'c', 'a', 'r', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "chrisebert.net", true */ 'c', 'h', 'r', 'i', 's', 'e', 'b', 'e', 'r', 't', '.', 'n', 'e', 't', '\0',
   /* "chrisfaber.com", true */ 'c', 'h', 'r', 'i', 's', 'f', 'a', 'b', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "chrisfinazzo.com", true */ 'c', 'h', 'r', 'i', 's', 'f', 'i', 'n', 'a', 'z', 'z', 'o', '.', 'c', 'o', 'm', '\0',
   /* "chrishamper.com", false */ 'c', 'h', 'r', 'i', 's', 'h', 'a', 'm', 'p', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "chrisirwin.ca", true */ 'c', 'h', 'r', 'i', 's', 'i', 'r', 'w', 'i', 'n', '.', 'c', 'a', '\0',
   /* "chrisjean.com", true */ 'c', 'h', 'r', 'i', 's', 'j', 'e', 'a', 'n', '.', 'c', 'o', 'm', '\0',
@@ -2319,16 +2311,17 @@ static const char kSTSHostTable[] = {
   /* "cleververmarkten.com", true */ 'c', 'l', 'e', 'v', 'e', 'r', 'v', 'e', 'r', 'm', 'a', 'r', 'k', 't', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "cleververmarkten.de", true */ 'c', 'l', 'e', 'v', 'e', 'r', 'v', 'e', 'r', 'm', 'a', 'r', 'k', 't', 'e', 'n', '.', 'd', 'e', '\0',
   /* "clevisto.com", true */ 'c', 'l', 'e', 'v', 'i', 's', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "clickandshoot.nl", true */ 'c', 'l', 'i', 'c', 'k', 'a', 'n', 'd', 's', 'h', 'o', 'o', 't', '.', 'n', 'l', '\0',
   /* "clickclickphish.com", true */ 'c', 'l', 'i', 'c', 'k', 'c', 'l', 'i', 'c', 'k', 'p', 'h', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "clickclock.cc", true */ 'c', 'l', 'i', 'c', 'k', 'c', 'l', 'o', 'c', 'k', '.', 'c', 'c', '\0',
   /* "clickenergy.com.au", true */ 'c', 'l', 'i', 'c', 'k', 'e', 'n', 'e', 'r', 'g', 'y', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "clickforclever.com", true */ 'c', 'l', 'i', 'c', 'k', 'f', 'o', 'r', 'c', 'l', 'e', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0',
+  /* "clickphish.com", true */ 'c', 'l', 'i', 'c', 'k', 'p', 'h', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "clicks.co.za", true */ 'c', 'l', 'i', 'c', 'k', 's', '.', 'c', 'o', '.', 'z', 'a', '\0',
   /* "clientboss.com", true */ 'c', 'l', 'i', 'e', 'n', 't', 'b', 'o', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "clientsecure.me", true */ 'c', 'l', 'i', 'e', 'n', 't', 's', 'e', 'c', 'u', 'r', 'e', '.', 'm', 'e', '\0',
   /* "clifflu.net", true */ 'c', 'l', 'i', 'f', 'f', 'l', 'u', '.', 'n', 'e', 't', '\0',
   /* "climaprecio.es", true */ 'c', 'l', 'i', 'm', 'a', 'p', 'r', 'e', 'c', 'i', 'o', '.', 'e', 's', '\0',
   /* "climateinteractive.org", true */ 'c', 'l', 'i', 'm', 'a', 't', 'e', 'i', 'n', 't', 'e', 'r', 'a', 'c', 't', 'i', 'v', 'e', '.', 'o', 'r', 'g', '\0',
   /* "climatestew.com", true */ 'c', 'l', 'i', 'm', 'a', 't', 'e', 's', 't', 'e', 'w', '.', 'c', 'o', 'm', '\0',
   /* "cliniko.com", true */ 'c', 'l', 'i', 'n', 'i', 'k', 'o', '.', 'c', 'o', 'm', '\0',
@@ -2393,16 +2386,17 @@ static const char kSTSHostTable[] = {
   /* "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',
   /* "cobalt.io", true */ 'c', 'o', 'b', 'a', 'l', 't', '.', 'i', 'o', '\0',
   /* "cocaine.ninja", true */ 'c', 'o', 'c', 'a', 'i', 'n', 'e', '.', 'n', 'i', 'n', 'j', 'a', '\0',
   /* "coccolebenessere.it", true */ 'c', 'o', 'c', 'c', 'o', 'l', 'e', 'b', 'e', 'n', 'e', 's', 's', 'e', 'r', 'e', '.', 'i', 't', '\0',
   /* "cocker.cc", false */ 'c', 'o', 'c', 'k', 'e', 'r', '.', 'c', 'c', '\0',
   /* "cocktailfuture.fr", true */ 'c', 'o', 'c', 'k', 't', 'a', 'i', 'l', 'f', 'u', 't', 'u', 'r', 'e', '.', 'f', 'r', '\0',
+  /* "cocoaheads.at", false */ 'c', 'o', 'c', 'o', 'a', 'h', 'e', 'a', 'd', 's', '.', 'a', 't', '\0',
   /* "cocolovesdaddy.com", true */ 'c', 'o', 'c', 'o', 'l', 'o', 'v', 'e', 's', 'd', 'a', 'd', 'd', 'y', '.', 'c', 'o', 'm', '\0',
   /* "code-poets.co.uk", true */ 'c', 'o', 'd', 'e', '-', 'p', 'o', 'e', 't', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "code-well.com", true */ 'c', 'o', 'd', 'e', '-', 'w', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "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',
   /* "codeferm.com", true */ 'c', 'o', 'd', 'e', 'f', 'e', 'r', 'm', '.', 'c', 'o', 'm', '\0',
@@ -2411,17 +2405,16 @@ static const char kSTSHostTable[] = {
   /* "codeit.guru", true */ 'c', 'o', 'd', 'e', 'i', 't', '.', 'g', 'u', 'r', 'u', '\0',
   /* "codelayer.ca", true */ 'c', 'o', 'd', 'e', 'l', 'a', 'y', 'e', 'r', '.', 'c', 'a', '\0',
   /* "codelove.de", true */ 'c', 'o', 'd', 'e', 'l', 'o', 'v', 'e', '.', 'd', 'e', '\0',
   /* "codemonkeyrawks.net", true */ 'c', 'o', 'd', 'e', 'm', 'o', 'n', 'k', 'e', 'y', 'r', 'a', 'w', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "codeplay.org", true */ 'c', 'o', 'd', 'e', 'p', 'l', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "codepoet.de", true */ 'c', 'o', 'd', 'e', 'p', 'o', 'e', 't', '.', 'd', 'e', '\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',
   /* "codewiththepros.org", true */ 'c', 'o', 'd', 'e', 'w', 'i', 't', 'h', 't', 'h', 'e', 'p', 'r', 'o', 's', '.', 'o', 'r', 'g', '\0',
@@ -2521,17 +2514,16 @@ static const char kSTSHostTable[] = {
   /* "comssa.org.au", true */ 'c', 'o', 'm', 's', 's', 'a', '.', 'o', 'r', 'g', '.', 'a', 'u', '\0',
   /* "concentrade.de", true */ 'c', 'o', 'n', 'c', 'e', 'n', 't', 'r', 'a', 'd', 'e', '.', 'd', 'e', '\0',
   /* "conclave.global", true */ 'c', 'o', 'n', 'c', 'l', 'a', 'v', 'e', '.', 'g', 'l', 'o', 'b', 'a', 'l', '\0',
   /* "concretehermit.com", true */ 'c', 'o', 'n', 'c', 'r', 'e', 't', 'e', 'h', 'e', 'r', 'm', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "condepenalba.com", true */ 'c', 'o', 'n', 'd', 'e', 'p', 'e', 'n', 'a', 'l', 'b', 'a', '.', 'c', 'o', 'm', '\0',
   /* "condosforcash.com", true */ 'c', 'o', 'n', 'd', 'o', 's', 'f', 'o', 'r', 'c', 'a', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "confiancefoundation.org", true */ 'c', 'o', 'n', 'f', 'i', 'a', 'n', 'c', 'e', 'f', 'o', 'u', 'n', 'd', 'a', 't', 'i', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "config.schokokeks.org", false */ 'c', 'o', 'n', 'f', 'i', 'g', '.', 's', 'c', 'h', 'o', 'k', 'o', 'k', 'e', 'k', 's', '.', 'o', 'r', 'g', '\0',
-  /* "confiwall.de", false */ 'c', 'o', 'n', 'f', 'i', 'w', 'a', 'l', 'l', '.', 'd', 'e', '\0',
   /* "conflux.tw", true */ 'c', 'o', 'n', 'f', 'l', 'u', 'x', '.', 't', 'w', '\0',
   /* "confucio.cl", true */ 'c', 'o', 'n', 'f', 'u', 'c', 'i', 'o', '.', 'c', 'l', '\0',
   /* "conjugacao.com.br", true */ 'c', 'o', 'n', 'j', 'u', 'g', 'a', 'c', 'a', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "connect-ed.network", true */ 'c', 'o', 'n', 'n', 'e', 'c', 't', '-', 'e', 'd', '.', 'n', 'e', 't', 'w', 'o', 'r', 'k', '\0',
   /* "connect.dating", true */ 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "connect.ua", false */ 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'u', 'a', '\0',
   /* "connected-verhuurservice.nl", true */ 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd', '-', 'v', 'e', 'r', 'h', 'u', 'u', 'r', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'n', 'l', '\0',
   /* "connectfss.com", true */ 'c', 'o', 'n', 'n', 'e', 'c', 't', 'f', 's', 's', '.', 'c', 'o', 'm', '\0',
@@ -2720,17 +2712,16 @@ 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',
   /* "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',
-  /* "csokolade.hu", true */ 'c', 's', 'o', 'k', 'o', 'l', 'a', 'd', 'e', '.', 'h', 'u', '\0',
   /* "cspvalidator.org", true */ 'c', 's', 'p', 'v', 'a', 'l', 'i', 'd', 'a', 't', 'o', 'r', '.', 'o', 'r', 'g', '\0',
   /* "csru.net", true */ 'c', 's', 'r', 'u', '.', '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',
   /* "csvape.com", true */ 'c', 's', 'v', 'a', 'p', 'e', '.', 'c', 'o', 'm', '\0',
   /* "ct-status.org", true */ 'c', 't', '-', 's', 't', 'a', 't', 'u', 's', '.', 'o', 'r', 'g', '\0',
   /* "cthomas.work", true */ 'c', 't', 'h', 'o', 'm', 'a', 's', '.', 'w', 'o', 'r', 'k', '\0',
@@ -2757,16 +2748,17 @@ static const char kSTSHostTable[] = {
   /* "cultiv.nl", true */ 'c', 'u', 'l', 't', 'i', 'v', '.', 'n', 'l', '\0',
   /* "culturedcode.com", true */ 'c', 'u', 'l', 't', 'u', 'r', 'e', 'd', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "cultureroll.com", true */ 'c', 'u', 'l', 't', 'u', 'r', 'e', 'r', 'o', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "cuongquach.com", true */ 'c', 'u', 'o', 'n', 'g', 'q', 'u', 'a', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "cuonic.com", true */ 'c', 'u', 'o', 'n', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "cup.al", true */ 'c', 'u', 'p', '.', 'a', 'l', '\0',
   /* "cupcake.io", true */ 'c', 'u', 'p', 'c', 'a', 'k', 'e', '.', 'i', 'o', '\0',
   /* "cupcake.is", true */ 'c', 'u', 'p', 'c', 'a', 'k', 'e', '.', 'i', 's', '\0',
+  /* "cupi.co", true */ 'c', 'u', 'p', 'i', '.', 'c', 'o', '\0',
   /* "curacao-license.com", true */ 'c', 'u', 'r', 'a', 'c', 'a', 'o', '-', 'l', 'i', 'c', 'e', 'n', 's', 'e', '.', 'c', 'o', 'm', '\0',
   /* "curiosity-driven.org", true */ 'c', 'u', 'r', 'i', 'o', 's', 'i', 't', 'y', '-', 'd', 'r', 'i', 'v', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "curlybracket.co.uk", true */ 'c', 'u', 'r', 'l', 'y', 'b', 'r', 'a', 'c', 'k', 'e', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "curlyroots.com", true */ 'c', 'u', 'r', 'l', 'y', 'r', 'o', 'o', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "currency-strength.com", true */ 'c', 'u', 'r', 'r', 'e', 'n', 'c', 'y', '-', 's', 't', 'r', 'e', 'n', 'g', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "current.com", true */ 'c', 'u', 'r', 'r', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "curtacircuitos.com.br", false */ 'c', 'u', 'r', 't', 'a', 'c', 'i', 'r', 'c', 'u', 'i', 't', 'o', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "curtis-smith.me.uk", true */ 'c', 'u', 'r', 't', 'i', 's', '-', 's', 'm', 'i', 't', 'h', '.', 'm', 'e', '.', 'u', 'k', '\0',
@@ -2932,16 +2924,17 @@ static const char kSTSHostTable[] = {
   /* "darkside.re", true */ 'd', 'a', 'r', 'k', 's', 'i', 'd', 'e', '.', 'r', 'e', '\0',
   /* "darksideof.it", true */ 'd', 'a', 'r', 'k', 's', 'i', 'd', 'e', 'o', 'f', '.', 'i', 't', '\0',
   /* "darkspacelab.com", true */ 'd', 'a', 'r', 'k', 's', 'p', 'a', 'c', 'e', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "darktime.ru", true */ 'd', 'a', 'r', 'k', 't', 'i', 'm', 'e', '.', 'r', 'u', '\0',
   /* "darktree.in", true */ 'd', 'a', 'r', 'k', 't', 'r', 'e', 'e', '.', 'i', 'n', '\0',
   /* "darkwater.info", true */ 'd', 'a', 'r', 'k', 'w', 'a', 't', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0',
   /* "darlo.co.uk", false */ 'd', 'a', 'r', 'l', 'o', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "darom.jp", true */ 'd', 'a', 'r', 'o', 'm', '.', 'j', 'p', '\0',
+  /* "darrenellis.xyz", true */ 'd', 'a', 'r', 'r', 'e', 'n', 'e', 'l', 'l', 'i', 's', '.', 'x', 'y', 'z', '\0',
   /* "darrenm.net", true */ 'd', 'a', 'r', 'r', 'e', 'n', 'm', '.', 'n', 'e', 't', '\0',
   /* "darrienworth.com", true */ 'd', 'a', 'r', 'r', 'i', 'e', 'n', 'w', 'o', 'r', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "darth-sonic.de", true */ 'd', 'a', 'r', 't', 'h', '-', 's', 'o', 'n', 'i', 'c', '.', 'd', 'e', '\0',
   /* "darwinkel.net", false */ 'd', 'a', 'r', 'w', 'i', 'n', 'k', 'e', 'l', '.', 'n', 'e', 't', '\0',
   /* "das-mediale-haus.de", false */ 'd', 'a', 's', '-', 'm', 'e', 'd', 'i', 'a', 'l', 'e', '-', 'h', 'a', 'u', 's', '.', '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',
@@ -2975,17 +2968,16 @@ static const char kSTSHostTable[] = {
   /* "davidandersson.se", true */ 'd', 'a', 'v', 'i', 'd', 'a', 'n', 'd', 'e', 'r', 's', 's', 'o', 'n', '.', 's', 'e', '\0',
   /* "davidcrx.net", true */ 'd', 'a', 'v', 'i', 'd', 'c', 'r', 'x', '.', 'n', 'e', 't', '\0',
   /* "davidgouveia.net", true */ 'd', 'a', 'v', 'i', 'd', 'g', 'o', 'u', 'v', 'e', 'i', 'a', '.', 'n', 'e', 't', '\0',
   /* "davidgow.net", true */ 'd', 'a', 'v', 'i', 'd', 'g', 'o', 'w', '.', 'n', 'e', 't', '\0',
   /* "davidgrudl.com", true */ 'd', 'a', 'v', 'i', 'd', 'g', 'r', 'u', 'd', 'l', '.', 'c', 'o', 'm', '\0',
   /* "davidlillo.com", true */ 'd', 'a', 'v', 'i', 'd', 'l', 'i', 'l', 'l', 'o', '.', 'c', 'o', 'm', '\0',
   /* "davidlyness.com", true */ 'd', 'a', 'v', 'i', 'd', 'l', 'y', 'n', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "davidmcevoy.org.uk", true */ 'd', 'a', 'v', 'i', 'd', 'm', 'c', 'e', 'v', 'o', 'y', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
-  /* "davidmessenger.co.uk", true */ 'd', 'a', 'v', 'i', 'd', 'm', 'e', 's', 's', 'e', 'n', 'g', 'e', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "davidnadaski.com", true */ 'd', 'a', 'v', 'i', 'd', 'n', 'a', 'd', 'a', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "davidnoren.com", true */ 'd', 'a', 'v', 'i', 'd', 'n', 'o', 'r', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "davidpearce.com", true */ 'd', 'a', 'v', 'i', 'd', 'p', 'e', 'a', 'r', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "davimun.org", true */ 'd', 'a', 'v', 'i', 'm', 'u', 'n', '.', 'o', 'r', 'g', '\0',
   /* "davisroi.com", true */ 'd', 'a', 'v', 'i', 's', 'r', 'o', 'i', '.', 'c', 'o', 'm', '\0',
   /* "dawson-floridavilla.co.uk", true */ 'd', 'a', 'w', 's', 'o', 'n', '-', 'f', 'l', 'o', 'r', 'i', 'd', 'a', 'v', 'i', 'l', 'l', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "daylightpirates.org", true */ 'd', 'a', 'y', 'l', 'i', 'g', 'h', 't', 'p', 'i', 'r', 'a', 't', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "dayman.net", true */ 'd', 'a', 'y', 'm', 'a', 'n', '.', 'n', 'e', 't', '\0',
@@ -3027,16 +3019,17 @@ static const char kSTSHostTable[] = {
   /* "dealbanana.com", true */ 'd', 'e', 'a', 'l', 'b', 'a', 'n', 'a', 'n', 'a', '.', 'c', 'o', 'm', '\0',
   /* "dealbanana.de", true */ 'd', 'e', 'a', 'l', 'b', 'a', 'n', 'a', 'n', 'a', '.', 'd', 'e', '\0',
   /* "dealbanana.fi", true */ 'd', 'e', 'a', 'l', 'b', 'a', 'n', 'a', 'n', 'a', '.', 'f', 'i', '\0',
   /* "dealbanana.fr", true */ 'd', 'e', 'a', 'l', 'b', 'a', 'n', 'a', 'n', 'a', '.', 'f', 'r', '\0',
   /* "dealbanana.it", true */ 'd', 'e', 'a', 'l', 'b', 'a', 'n', 'a', 'n', 'a', '.', 'i', 't', '\0',
   /* "dealbanana.se", true */ 'd', 'e', 'a', 'l', 'b', 'a', 'n', 'a', 'n', 'a', '.', 's', 'e', '\0',
   /* "dealcruiser.nl", true */ 'd', 'e', 'a', 'l', 'c', 'r', 'u', 'i', 's', 'e', 'r', '.', 'n', 'l', '\0',
   /* "dealpass.no", true */ 'd', 'e', 'a', 'l', 'p', 'a', 's', 's', '.', 'n', 'o', '\0',
+  /* "deamuseum.org", true */ 'd', 'e', 'a', 'm', 'u', 's', 'e', 'u', 'm', '.', 'o', 'r', 'g', '\0',
   /* "deanjerkovich.com", true */ 'd', 'e', 'a', 'n', 'j', 'e', 'r', 'k', 'o', 'v', 'i', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "deanmorgan.org", true */ 'd', 'e', 'a', 'n', 'm', 'o', 'r', 'g', 'a', 'n', '.', 'o', 'r', 'g', '\0',
   /* "deathy.ro", true */ 'd', 'e', 'a', 't', 'h', 'y', '.', 'r', 'o', '\0',
   /* "debian-vhost.de", true */ 'd', 'e', 'b', 'i', 'a', 'n', '-', 'v', 'h', 'o', 's', 't', '.', 'd', 'e', '\0',
   /* "debiton.dk", true */ 'd', 'e', 'b', 'i', 't', 'o', 'n', '.', 'd', 'k', '\0',
   /* "debtrecycling.com.au", true */ 'd', 'e', 'b', 't', 'r', 'e', 'c', 'y', 'c', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "decloverly.com", true */ 'd', 'e', 'c', 'l', 'o', 'v', 'e', 'r', 'l', 'y', '.', 'c', 'o', 'm', '\0',
   /* "decoder.link", true */ 'd', 'e', 'c', 'o', 'd', 'e', 'r', '.', 'l', 'i', 'n', 'k', '\0',
@@ -3109,17 +3102,16 @@ static const char kSTSHostTable[] = {
   /* "denniskoot.nl", true */ 'd', 'e', 'n', 'n', 'i', 's', 'k', 'o', 'o', 't', '.', 'n', 'l', '\0',
   /* "dennogumi.org", true */ 'd', 'e', 'n', 'n', 'o', 'g', 'u', 'm', 'i', '.', 'o', 'r', 'g', '\0',
   /* "dent.uy", true */ 'd', 'e', 'n', 't', '.', 'u', 'y', '\0',
   /* "dentallaborgeraeteservice.de", true */ 'd', 'e', 'n', 't', 'a', 'l', 'l', 'a', 'b', 'o', 'r', 'g', 'e', 'r', 'a', 'e', 't', 'e', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'd', 'e', '\0',
   /* "dentistglasgow.com", true */ 'd', 'e', 'n', 't', 'i', 's', 't', 'g', 'l', 'a', 's', 'g', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "dentrassi.de", true */ 'd', 'e', 'n', 't', 'r', 'a', 's', 's', 'i', '.', 'd', 'e', '\0',
   /* "dentystabirmingham.co.uk", true */ 'd', 'e', 'n', 't', 'y', 's', 't', 'a', 'b', 'i', 'r', 'm', 'i', 'n', 'g', 'h', 'a', 'm', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "denverprophit.us", true */ 'd', 'e', 'n', 'v', 'e', 'r', 'p', 'r', 'o', 'p', 'h', 'i', 't', '.', 'u', 's', '\0',
-  /* "depeche-mode.moscow", true */ 'd', 'e', 'p', 'e', 'c', 'h', 'e', '-', 'm', 'o', 'd', 'e', '.', 'm', 'o', 's', 'c', 'o', 'w', '\0',
   /* "depechemode-live.com", true */ 'd', 'e', 'p', 'e', 'c', 'h', 'e', 'm', 'o', 'd', 'e', '-', 'l', 'i', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "depicus.com", true */ 'd', 'e', 'p', 'i', 'c', 'u', 's', '.', 'c', 'o', 'm', '\0',
   /* "der-stein-fluesterer.de", false */ 'd', 'e', 'r', '-', 's', 't', 'e', 'i', 'n', '-', 'f', 'l', 'u', 'e', 's', 't', 'e', 'r', 'e', 'r', '.', 'd', 'e', '\0',
   /* "derbyshire-language-scheme.co.uk", true */ 'd', 'e', 'r', 'b', 'y', 's', 'h', 'i', 'r', 'e', '-', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '-', 's', 'c', 'h', 'e', 'm', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "derchris.me", true */ 'd', 'e', 'r', 'c', 'h', 'r', 'i', 's', '.', 'm', 'e', '\0',
   /* "derechosdigitales.org", true */ 'd', 'e', 'r', 'e', 'c', 'h', 'o', 's', 'd', 'i', 'g', 'i', 't', 'a', 'l', 'e', 's', '.', 'o', 'r', 'g', '\0',
   /* "dereferenced.net", true */ 'd', 'e', 'r', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 'd', '.', 'n', 'e', 't', '\0',
   /* "deregowski.net", true */ 'd', 'e', 'r', 'e', 'g', 'o', 'w', 's', 'k', 'i', '.', 'n', 'e', 't', '\0',
@@ -3130,17 +3122,16 @@ static const char kSTSHostTable[] = {
   /* "dermapuur.nl", true */ 'd', 'e', 'r', 'm', 'a', 'p', 'u', 'u', 'r', '.', 'n', 'l', '\0',
   /* "deroo.org", true */ 'd', 'e', 'r', 'o', 'o', '.', 'o', 'r', 'g', '\0',
   /* "derp.army", true */ 'd', 'e', 'r', 'p', '.', 'a', 'r', 'm', 'y', '\0',
   /* "derreichesack.com", true */ 'd', 'e', 'r', 'r', 'e', 'i', 'c', 'h', 'e', 's', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "dersoundhunter.de", true */ 'd', 'e', 'r', 's', 'o', 'u', 'n', 'd', 'h', 'u', 'n', 't', 'e', 'r', '.', 'd', 'e', '\0',
   /* "designed-cybersecurity.com", true */ 'd', 'e', 's', 'i', 'g', 'n', 'e', 'd', '-', 'c', 'y', 'b', 'e', 'r', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "designgears.com", true */ 'd', 'e', 's', 'i', 'g', 'n', 'g', 'e', 'a', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "designhotel-kronjuwel.de", false */ 'd', 'e', 's', 'i', 'g', 'n', 'h', 'o', 't', 'e', 'l', '-', 'k', 'r', 'o', 'n', 'j', 'u', 'w', 'e', 'l', '.', 'd', 'e', '\0',
-  /* "designpilot.ch", true */ 'd', 'e', 's', 'i', 'g', 'n', 'p', 'i', 'l', 'o', 't', '.', 'c', 'h', '\0',
   /* "designsbyjanith.com", true */ 'd', 'e', 's', 'i', 'g', 'n', 's', 'b', 'y', 'j', 'a', 'n', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "designthinking.or.jp", false */ 'd', 'e', 's', 'i', 'g', 'n', 't', 'h', 'i', 'n', 'k', 'i', 'n', 'g', '.', 'o', 'r', '.', 'j', 'p', '\0',
   /* "designville.cz", true */ 'd', 'e', 's', 'i', 'g', 'n', 'v', 'i', 'l', 'l', 'e', '.', 'c', 'z', '\0',
   /* "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',
   /* "despora.de", true */ 'd', 'e', 's', 'p', 'o', 'r', 'a', '.', 'd', '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',
@@ -3265,17 +3256,16 @@ static const char kSTSHostTable[] = {
   /* "digwp.com", true */ 'd', 'i', 'g', 'w', 'p', '.', 'c', 'o', 'm', '\0',
   /* "dijkmanmuziek.nl", false */ 'd', 'i', 'j', 'k', 'm', 'a', 'n', 'm', 'u', 'z', 'i', 'e', 'k', '.', 'n', 'l', '\0',
   /* "dijkmanvandoorn.nl", true */ 'd', 'i', 'j', 'k', 'm', 'a', 'n', 'v', 'a', 'n', 'd', 'o', 'o', 'r', 'n', '.', 'n', 'l', '\0',
   /* "dillonkorman.com", true */ 'd', 'i', 'l', 'l', 'o', 'n', 'k', 'o', 'r', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "dim.lighting", true */ 'd', 'i', 'm', '.', 'l', 'i', 'g', 'h', 't', 'i', 'n', 'g', '\0',
   /* "dimanss47.net", true */ 'd', 'i', 'm', 'a', 'n', 's', 's', '4', '7', '.', 'n', 'e', 't', '\0',
   /* "dime-staging.com", true */ 'd', 'i', 'm', 'e', '-', 's', 't', 'a', 'g', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dime.io", true */ 'd', 'i', 'm', 'e', '.', 'i', 'o', '\0',
-  /* "dinepont.fr", true */ 'd', 'i', 'n', 'e', 'p', 'o', 'n', 't', '.', 'f', 'r', '\0',
   /* "dinge.xyz", true */ 'd', 'i', 'n', 'g', 'e', '.', 'x', 'y', 'z', '\0',
   /* "dingss.com", true */ 'd', 'i', 'n', 'g', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "dinmtb.dk", true */ 'd', 'i', 'n', 'm', 't', 'b', '.', 'd', 'k', '\0',
   /* "dintillat.fr", true */ 'd', 'i', 'n', 't', 'i', 'l', 'l', 'a', 't', '.', 'f', 'r', '\0',
   /* "dintrafic.net", true */ 'd', 'i', 'n', 't', 'r', 'a', 'f', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "dinube.com", true */ 'd', 'i', 'n', 'u', 'b', 'e', '.', 'c', 'o', 'm', '\0',
   /* "diodeled.com", true */ 'd', 'i', 'o', 'd', 'e', 'l', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "dipconsultants.com", true */ 'd', 'i', 'p', 'c', 'o', 'n', 's', 'u', 'l', 't', 'a', 'n', 't', 's', '.', 'c', 'o', 'm', '\0',
@@ -3426,17 +3416,16 @@ static const char kSTSHostTable[] = {
   /* "dooleytackaberry.com", true */ 'd', 'o', 'o', 'l', 'e', 'y', 't', 'a', 'c', 'k', 'a', 'b', 'e', 'r', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "doomsworld.com", true */ 'd', 'o', 'o', 'm', 's', 'w', 'o', 'r', 'l', 'd', '.', 'c', 'o', 'm', '\0',
   /* "doooonoooob.com", true */ 'd', 'o', 'o', 'o', 'o', 'n', 'o', 'o', 'o', 'o', 'b', '.', 'c', 'o', 'm', '\0',
   /* "doordecor.bg", true */ 'd', 'o', 'o', 'r', 'd', 'e', 'c', 'o', 'r', '.', 'b', 'g', '\0',
   /* "doorflow.com", true */ 'd', 'o', 'o', 'r', 'f', 'l', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "dopesoft.de", true */ 'd', 'o', 'p', 'e', 's', 'o', 'f', 't', '.', 'd', 'e', '\0',
   /* "doppenpost.nl", true */ 'd', 'o', 'p', 'p', 'e', 'n', 'p', 'o', 's', 't', '.', 'n', 'l', '\0',
   /* "dorianharmans.nl", true */ 'd', 'o', 'r', 'i', 'a', 'n', 'h', 'a', 'r', 'm', 'a', 'n', 's', '.', 'n', 'l', '\0',
-  /* "dorianmuthig.com", true */ 'd', 'o', 'r', 'i', 'a', 'n', 'm', 'u', 't', 'h', 'i', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dormiu.com", true */ 'd', 'o', 'r', 'm', 'i', 'u', '.', 'c', 'o', 'm', '\0',
   /* "dormiu.com.br", true */ 'd', 'o', 'r', 'm', 'i', 'u', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "dot.ro", true */ 'd', 'o', 't', '.', 'r', 'o', '\0',
   /* "dot42.no", true */ 'd', 'o', 't', '4', '2', '.', 'n', 'o', '\0',
   /* "dotbigbang.com", true */ 'd', 'o', 't', 'b', 'i', 'g', 'b', 'a', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "dotbox.org", true */ 'd', 'o', 't', 'b', 'o', 'x', '.', 'o', 'r', 'g', '\0',
   /* "dothebangthingsalon.com", true */ 'd', 'o', 't', 'h', 'e', 'b', 'a', 'n', 'g', 't', 'h', 'i', 'n', 'g', 's', 'a', 'l', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "dotkod.com", true */ 'd', 'o', 't', 'k', 'o', 'd', '.', 'c', 'o', 'm', '\0',
@@ -3522,17 +3511,16 @@ static const char kSTSHostTable[] = {
   /* "drycreekphoto.com", true */ 'd', 'r', 'y', 'c', 'r', 'e', 'e', 'k', 'p', 'h', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ds-christiansen.de", true */ 'd', 's', '-', 'c', 'h', 'r', 'i', 's', 't', 'i', 'a', 'n', 's', 'e', 'n', '.', 'd', 'e', '\0',
   /* "ds67.de", true */ 'd', 's', '6', '7', '.', 'd', 'e', '\0',
   /* "dsbrowser.com", true */ 'd', 's', 'b', 'r', 'o', 'w', 's', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "dsebastien.net", true */ 'd', 's', 'e', 'b', 'a', 's', 't', 'i', 'e', 'n', '.', 'n', 'e', 't', '\0',
   /* "dsol.hu", true */ 'd', 's', 'o', 'l', '.', 'h', 'u', '\0',
   /* "dt27.org", true */ 'd', 't', '2', '7', '.', 'o', 'r', 'g', '\0',
   /* "dubaieveningsafari.com", true */ 'd', 'u', 'b', 'a', 'i', 'e', 'v', 'e', 'n', 'i', 'n', 'g', 's', 'a', 'f', 'a', 'r', 'i', '.', 'c', 'o', 'm', '\0',
-  /* "duckasylum.com", true */ 'd', 'u', 'c', 'k', 'a', 's', 'y', 'l', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "duckduckstart.com", true */ 'd', 'u', 'c', 'k', 'd', 'u', 'c', 'k', 's', 't', 'a', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "duckinc.net", true */ 'd', 'u', 'c', 'k', 'i', 'n', 'c', '.', 'n', 'e', 't', '\0',
   /* "ducohosting.com", true */ 'd', 'u', 'c', 'o', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "duelysthub.com", true */ 'd', 'u', 'e', 'l', 'y', 's', 't', 'h', 'u', 'b', '.', 'c', 'o', 'm', '\0',
   /* "duernberg.at", true */ 'd', 'u', 'e', 'r', 'n', 'b', 'e', 'r', 'g', '.', 'a', 't', '\0',
   /* "duijf.info", true */ 'd', 'u', 'i', 'j', 'f', '.', 'i', 'n', 'f', 'o', '\0',
   /* "duijfathome.nl", true */ 'd', 'u', 'i', 'j', 'f', 'a', 't', 'h', 'o', 'm', 'e', '.', 'n', 'l', '\0',
   /* "dukan-recepty.ru", true */ 'd', 'u', 'k', 'a', 'n', '-', 'r', 'e', 'c', 'e', 'p', 't', 'y', '.', 'r', 'u', '\0',
@@ -3558,27 +3546,27 @@ 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", true */ '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',
   /* "dynamic-innovations.net", true */ 'd', 'y', 'n', 'a', 'm', 'i', 'c', '-', 'i', 'n', 'n', 'o', 'v', 'a', 't', 'i', 'o', 'n', 's', '.', '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',
   /* "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',
   /* "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-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',
@@ -3735,21 +3723,19 @@ static const char kSTSHostTable[] = {
   /* "eksik.com", true */ 'e', 'k', 's', 'i', 'k', '.', 'c', 'o', 'm', '\0',
   /* "eksisozluk.com", true */ 'e', 'k', 's', 'i', 's', 'o', 'z', 'l', 'u', 'k', '.', 'c', 'o', 'm', '\0',
   /* "ekzarta.ru", true */ 'e', 'k', 'z', 'a', 'r', 't', 'a', '.', 'r', 'u', '\0',
   /* "el-cell.com", true */ 'e', 'l', '-', 'c', 'e', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "elan-organics.com", true */ 'e', 'l', 'a', 'n', '-', 'o', 'r', 'g', 'a', 'n', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "elanguest.ro", true */ 'e', 'l', 'a', 'n', 'g', 'u', 'e', 's', 't', '.', 'r', 'o', '\0',
   /* "elanguest.ru", true */ 'e', 'l', 'a', 'n', 'g', 'u', 'e', 's', 't', '.', 'r', 'u', '\0',
   /* "elaon.de", true */ 'e', 'l', 'a', 'o', 'n', '.', 'd', 'e', '\0',
-  /* "elars.de", true */ 'e', 'l', 'a', 'r', 's', '.', 'd', 'e', '\0',
   /* "elastic7.uk", true */ 'e', 'l', 'a', 's', 't', 'i', 'c', '7', '.', 'u', 'k', '\0',
   /* "elaxy-online.de", true */ 'e', 'l', 'a', 'x', 'y', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0',
   /* "elblein.de", true */ 'e', 'l', 'b', 'l', 'e', 'i', 'n', '.', 'd', 'e', '\0',
-  /* "eldinhadzic.com", true */ 'e', 'l', 'd', 'i', 'n', 'h', 'a', 'd', 'z', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "elearningpilot.com", true */ 'e', 'l', 'e', 'a', 'r', 'n', 'i', 'n', 'g', 'p', 'i', 'l', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "electricant.com", true */ 'e', 'l', 'e', 'c', 't', 'r', 'i', 'c', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "electricant.nl", true */ 'e', 'l', 'e', 'c', 't', 'r', 'i', 'c', 'a', 'n', 't', '.', 'n', 'l', '\0',
   /* "electronic-ignition-system.com", true */ 'e', 'l', 'e', 'c', 't', 'r', 'o', 'n', 'i', 'c', '-', 'i', 'g', 'n', 'i', 't', 'i', 'o', 'n', '-', 's', 'y', 's', 't', 'e', 'm', '.', 'c', 'o', 'm', '\0',
   /* "electronicfasteners.com", true */ 'e', 'l', 'e', 'c', 't', 'r', 'o', 'n', 'i', 'c', 'f', 'a', 's', 't', 'e', 'n', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "elefantevoador.com", true */ 'e', 'l', 'e', 'f', 'a', 'n', 't', 'e', 'v', 'o', 'a', 'd', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "eleicoes2016.com.br", true */ 'e', 'l', 'e', 'i', 'c', 'o', 'e', 's', '2', '0', '1', '6', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "elektronring.com", true */ 'e', 'l', 'e', 'k', 't', 'r', 'o', 'n', 'r', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
@@ -3850,17 +3836,16 @@ static const char kSTSHostTable[] = {
   /* "endofnet.org", true */ 'e', 'n', 'd', 'o', 'f', 'n', 'e', 't', '.', 'o', 'r', 'g', '\0',
   /* "enecoshop.nl", true */ 'e', 'n', 'e', 'c', 'o', 's', 'h', 'o', 'p', '.', 'n', 'l', '\0',
   /* "enefan.jp", true */ 'e', 'n', 'e', 'f', 'a', 'n', '.', 'j', 'p', '\0',
   /* "energiekeurplus.nl", true */ 'e', 'n', 'e', 'r', 'g', 'i', 'e', 'k', 'e', 'u', 'r', 'p', 'l', 'u', 's', '.', 'n', 'l', '\0',
   /* "energy-drink-magazin.de", true */ 'e', 'n', 'e', 'r', 'g', 'y', '-', 'd', 'r', 'i', 'n', 'k', '-', 'm', 'a', 'g', 'a', 'z', 'i', 'n', '.', 'd', 'e', '\0',
   /* "energy-infra.nl", true */ 'e', 'n', 'e', 'r', 'g', 'y', '-', 'i', 'n', 'f', 'r', 'a', '.', 'n', 'l', '\0',
   /* "energy.eu", true */ 'e', 'n', 'e', 'r', 'g', 'y', '.', 'e', 'u', '\0',
   /* "energyatlas.com", true */ 'e', 'n', 'e', 'r', 'g', 'y', 'a', 't', 'l', 'a', 's', '.', 'c', 'o', 'm', '\0',
-  /* "energydrinkblog.de", true */ 'e', 'n', 'e', 'r', 'g', 'y', 'd', 'r', 'i', 'n', 'k', 'b', 'l', 'o', 'g', '.', 'd', 'e', '\0',
   /* "enersec.co.uk", true */ 'e', 'n', 'e', 'r', 's', 'e', 'c', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "enfoqueseguro.com", true */ 'e', 'n', 'f', 'o', 'q', 'u', 'e', 's', 'e', 'g', 'u', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "engaugetools.com", true */ 'e', 'n', 'g', 'a', 'u', 'g', 'e', 't', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0',
   /* "engelundlicht.ch", true */ 'e', 'n', 'g', 'e', 'l', 'u', 'n', 'd', 'l', 'i', 'c', 'h', 't', '.', 'c', 'h', '\0',
   /* "engg.ca", true */ 'e', 'n', 'g', 'g', '.', 'c', 'a', '\0',
   /* "engineeryourmarketing.com", true */ 'e', 'n', 'g', 'i', 'n', 'e', 'e', 'r', 'y', 'o', 'u', 'r', 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "englerts.de", true */ 'e', 'n', 'g', 'l', 'e', 'r', 't', 's', '.', 'd', 'e', '\0',
   /* "englishbulgaria.net", true */ 'e', 'n', 'g', 'l', 'i', 's', 'h', 'b', 'u', 'l', 'g', 'a', 'r', 'i', 'a', '.', 'n', 'e', 't', '\0',
@@ -4051,16 +4036,17 @@ static const char kSTSHostTable[] = {
   /* "everling.lu", true */ 'e', 'v', 'e', 'r', 'l', 'i', 'n', 'g', '.', 'l', 'u', '\0',
   /* "everpcpc.com", true */ 'e', 'v', 'e', 'r', 'p', 'c', 'p', 'c', '.', 'c', 'o', 'm', '\0',
   /* "everwaking.com", false */ 'e', 'v', 'e', 'r', 'w', 'a', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "everyarti.st", true */ 'e', 'v', 'e', 'r', 'y', 'a', 'r', 't', 'i', '.', 's', 't', '\0',
   /* "everymove.org", true */ 'e', 'v', 'e', 'r', 'y', 'm', 'o', 'v', 'e', '.', 'o', 'r', 'g', '\0',
   /* "everywhere.cloud", true */ 'e', 'v', 'e', 'r', 'y', 'w', 'h', 'e', 'r', 'e', '.', 'c', 'l', 'o', 'u', 'd', '\0',
   /* "eveseat.net", true */ 'e', 'v', 'e', 's', 'e', 'a', 't', '.', 'n', 'e', 't', '\0',
   /* "eveshamglass.co.uk", true */ 'e', 'v', 'e', 's', 'h', 'a', 'm', 'g', 'l', 'a', 's', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
+  /* "evi.be", true */ 'e', 'v', 'i', '.', 'b', 'e', '\0',
   /* "evilized.de", true */ 'e', 'v', 'i', 'l', 'i', 'z', 'e', 'd', '.', 'd', 'e', '\0',
   /* "evilsay.com", true */ 'e', 'v', 'i', 'l', 's', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "evites.me", true */ 'e', 'v', 'i', 't', 'e', 's', '.', 'm', 'e', '\0',
   /* "evlear.com", true */ 'e', 'v', 'l', 'e', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "evodation.com", true */ 'e', 'v', 'o', 'd', 'a', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "evolutionexpeditions.com", true */ 'e', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'e', 'x', 'p', 'e', 'd', 'i', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "evolutionlending.co.uk", true */ 'e', 'v', 'o', 'l', 'u', 't', 'i', 'o', 'n', 'l', 'e', 'n', 'd', 'i', 'n', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "evowl.com", false */ 'e', 'v', 'o', 'w', 'l', '.', 'c', 'o', 'm', '\0',
@@ -4180,17 +4166,16 @@ static const char kSTSHostTable[] = {
   /* "familiegrottendieck.de", true */ 'f', 'a', 'm', 'i', 'l', 'i', 'e', 'g', 'r', 'o', 't', 't', 'e', 'n', 'd', 'i', 'e', 'c', 'k', '.', 'd', 'e', '\0',
   /* "familieholme.de", true */ 'f', 'a', 'm', 'i', 'l', 'i', 'e', 'h', 'o', 'l', 'm', 'e', '.', 'd', 'e', '\0',
   /* "familjenfrodlund.se", true */ 'f', 'a', 'm', 'i', 'l', 'j', 'e', 'n', 'f', 'r', 'o', 'd', 'l', 'u', 'n', 'd', '.', 's', 'e', '\0',
   /* "familjenm.se", true */ 'f', 'a', 'm', 'i', 'l', 'j', 'e', 'n', 'm', '.', 's', 'e', '\0',
   /* "fanboi.ch", true */ 'f', 'a', 'n', 'b', 'o', 'i', '.', 'c', 'h', '\0',
   /* "fandler.cz", true */ 'f', 'a', 'n', 'd', 'l', 'e', 'r', '.', 'c', 'z', '\0',
   /* "fandomservices.com", true */ 'f', 'a', 'n', 'd', 'o', 'm', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "fangs.ink", true */ 'f', 'a', 'n', 'g', 's', '.', 'i', 'n', 'k', '\0',
-  /* "fanjoe.be", true */ 'f', 'a', 'n', 'j', 'o', 'e', '.', 'b', 'e', '\0',
   /* "fant.dk", true */ 'f', 'a', 'n', 't', '.', 'd', 'k', '\0',
   /* "fanvoice.com", true */ 'f', 'a', 'n', 'v', 'o', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "fanyue123.tk", true */ 'f', 'a', 'n', 'y', 'u', 'e', '1', '2', '3', '.', 't', 'k', '\0',
   /* "fanz.pro", true */ 'f', 'a', 'n', 'z', '.', 'p', 'r', 'o', '\0',
   /* "fap.no", true */ 'f', 'a', 'p', '.', 'n', 'o', '\0',
   /* "faq.ie", true */ 'f', 'a', 'q', '.', 'i', 'e', '\0',
   /* "faq.lookout.com", false */ 'f', 'a', 'q', '.', 'l', 'o', 'o', 'k', 'o', 'u', 't', '.', 'c', 'o', 'm', '\0',
   /* "fara.gov", true */ 'f', 'a', 'r', 'a', '.', 'g', 'o', 'v', '\0',
@@ -4382,17 +4367,16 @@ static const char kSTSHostTable[] = {
   /* "flashback.org", true */ 'f', 'l', 'a', 's', 'h', 'b', 'a', 'c', 'k', '.', 'o', 'r', 'g', '\0',
   /* "flat.io", true */ 'f', 'l', 'a', 't', '.', 'i', 'o', '\0',
   /* "flawlesscowboy.xyz", true */ 'f', 'l', 'a', 'w', 'l', 'e', 's', 's', 'c', 'o', 'w', 'b', 'o', 'y', '.', 'x', 'y', 'z', '\0',
   /* "flazznetworks.com", false */ 'f', 'l', 'a', 'z', 'z', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "fleep.io", true */ 'f', 'l', 'e', 'e', 'p', '.', 'i', 'o', '\0',
   /* "fleisch.club", true */ 'f', 'l', 'e', 'i', 's', 'c', 'h', '.', 'c', 'l', 'u', 'b', '\0',
   /* "fletchto99.com", true */ 'f', 'l', 'e', 't', 'c', 'h', 't', 'o', '9', '9', '.', 'c', 'o', 'm', '\0',
   /* "flexapplications.se", true */ 'f', 'l', 'e', 'x', 'a', 'p', 'p', 'l', 'i', 'c', 'a', 't', 'i', 'o', 'n', 's', '.', 's', 'e', '\0',
-  /* "fleximus.org", false */ 'f', 'l', 'e', 'x', 'i', 'm', 'u', 's', '.', 'o', 'r', 'g', '\0',
   /* "flexinvesting.fi", true */ 'f', 'l', 'e', 'x', 'i', 'n', 'v', 'e', 's', 't', 'i', 'n', 'g', '.', 'f', 'i', '\0',
   /* "flexport.com", true */ 'f', 'l', 'e', 'x', 'p', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "flexstart.me", true */ 'f', 'l', 'e', 'x', 's', 't', 'a', 'r', 't', '.', 'm', 'e', '\0',
   /* "flightschoolbooking.com", true */ 'f', 'l', 'i', 'g', 'h', 't', 's', 'c', 'h', 'o', 'o', 'l', 'b', 'o', 'o', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "flightschoolcandidates.gov", true */ 'f', 'l', 'i', 'g', 'h', 't', 's', 'c', 'h', 'o', 'o', 'l', 'c', 'a', 'n', 'd', 'i', 'd', 'a', 't', 'e', 's', '.', 'g', 'o', 'v', '\0',
   /* "fling.dating", true */ 'f', 'l', 'i', 'n', 'g', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "flipagram.com", false */ 'f', 'l', 'i', 'p', 'a', 'g', 'r', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "flipkey.com", true */ 'f', 'l', 'i', 'p', 'k', 'e', 'y', '.', 'c', 'o', 'm', '\0',
@@ -4472,16 +4456,17 @@ static const char kSTSHostTable[] = {
   /* "forgix.com", true */ 'f', 'o', 'r', 'g', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "formationseeker.com", true */ 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 's', 'e', 'e', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "formationsfactory.co.uk", false */ 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 's', 'f', 'a', 'c', 't', 'o', 'r', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "formazioneopen.it", true */ 'f', 'o', 'r', 'm', 'a', 'z', 'i', 'o', 'n', 'e', 'o', 'p', 'e', 'n', '.', 'i', 't', '\0',
   /* "foro.io", false */ 'f', 'o', 'r', 'o', '.', 'i', 'o', '\0',
   /* "forplanetsake.com", true */ 'f', 'o', 'r', 'p', 'l', 'a', 'n', 'e', 't', 's', 'a', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "forsakringsarkivet.se", true */ 'f', 'o', 'r', 's', 'a', 'k', 'r', 'i', 'n', 'g', 's', 'a', 'r', 'k', 'i', 'v', 'e', 't', '.', 's', 'e', '\0',
   /* "forschbach-janssen.de", true */ 'f', 'o', 'r', 's', 'c', 'h', 'b', 'a', 'c', 'h', '-', 'j', 'a', 'n', 's', 's', 'e', 'n', '.', 'd', 'e', '\0',
+  /* "fortesanshop.it", true */ 'f', 'o', 'r', 't', 'e', 's', 'a', 'n', 's', 'h', 'o', 'p', '.', 'i', 't', '\0',
   /* "fortnine.ca", true */ 'f', 'o', 'r', 't', 'n', 'i', 'n', 'e', '.', 'c', 'a', '\0',
   /* "fortress.sk", true */ 'f', 'o', 'r', 't', 'r', 'e', 's', 's', '.', 's', 'k', '\0',
   /* "fortuna-s.com", true */ 'f', 'o', 'r', 't', 'u', 'n', 'a', '-', 's', '.', 'c', 'o', 'm', '\0',
   /* "fortworth.ch", true */ 'f', 'o', 'r', 't', 'w', 'o', 'r', 't', 'h', '.', 'c', 'h', '\0',
   /* "forum.linode.com", false */ 'f', 'o', 'r', 'u', 'm', '.', 'l', 'i', 'n', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "forus.be", true */ 'f', 'o', 'r', 'u', 's', '.', 'b', 'e', '\0',
   /* "fossewayflowers.co.uk", true */ 'f', 'o', 's', 's', 'e', 'w', 'a', 'y', 'f', 'l', 'o', 'w', 'e', 'r', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "fossewayflowers.com", true */ 'f', 'o', 's', 's', 'e', 'w', 'a', 'y', 'f', 'l', 'o', 'w', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
@@ -4671,16 +4656,17 @@ static const char kSTSHostTable[] = {
   /* "g2soft.net", true */ 'g', '2', 's', 'o', 'f', 't', '.', 'n', 'e', 't', '\0',
   /* "g4w.co", true */ 'g', '4', 'w', '.', 'c', 'o', '\0',
   /* "g5led.nl", true */ 'g', '5', 'l', 'e', 'd', '.', 'n', 'l', '\0',
   /* "gabi.com.es", true */ 'g', 'a', 'b', 'i', '.', 'c', 'o', 'm', '.', 'e', 's', '\0',
   /* "gabi.uno", true */ 'g', 'a', 'b', 'i', '.', 'u', 'n', 'o', '\0',
   /* "gablaxian.com", true */ 'g', 'a', 'b', 'l', 'a', 'x', 'i', 'a', 'n', '.', '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',
+  /* "gaichon.com", true */ 'g', 'a', 'i', 'c', 'h', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "gaiserik.com", false */ 'g', 'a', 'i', 's', 'e', 'r', 'i', 'k', '.', 'c', 'o', 'm', '\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.jp", true */ 'g', 'a', 'k', 'k', 'a', 'i', 'n', 'a', 'v', 'i', '.', 'j', 'p', '\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',
   /* "gakkainavi4.net", true */ 'g', 'a', 'k', 'k', 'a', 'i', 'n', 'a', 'v', 'i', '4', '.', 'n', 'e', 't', '\0',
   /* "galactic-crew.org", true */ 'g', 'a', 'l', 'a', 'c', 't', 'i', 'c', '-', 'c', 'r', 'e', 'w', '.', 'o', 'r', 'g', '\0',
@@ -4692,32 +4678,30 @@ static const char kSTSHostTable[] = {
   /* "gambetti.fr", true */ 'g', 'a', 'm', 'b', 'e', 't', 't', 'i', '.', 'f', 'r', '\0',
   /* "gambit.pro", true */ 'g', 'a', 'm', 'b', 'i', 't', '.', 'p', 'r', 'o', '\0',
   /* "gambitcloud.net", true */ 'g', 'a', 'm', 'b', 'i', 't', 'c', 'l', 'o', 'u', 'd', '.', 'n', 'e', 't', '\0',
   /* "gambitnash.co.uk", true */ 'g', 'a', 'm', 'b', 'i', 't', 'n', 'a', 's', 'h', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "gambitnash.com", true */ 'g', 'a', 'm', 'b', 'i', 't', 'n', 'a', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "gambitprint.com", true */ 'g', 'a', 'm', 'b', 'i', 't', 'p', 'r', 'i', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "game-files.net", true */ 'g', 'a', 'm', 'e', '-', 'f', 'i', 'l', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "game-gentle.com", true */ 'g', 'a', 'm', 'e', '-', 'g', 'e', 'n', 't', 'l', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "game.yt", true */ 'g', 'a', 'm', 'e', '.', 'y', 't', '\0',
   /* "game7.de", true */ 'g', 'a', 'm', 'e', '7', '.', 'd', 'e', '\0',
   /* "gamecard-shop.nl", true */ 'g', 'a', 'm', 'e', 'c', 'a', 'r', 'd', '-', 's', 'h', 'o', 'p', '.', 'n', 'l', '\0',
   /* "gamecollector.be", true */ 'g', 'a', 'm', 'e', 'c', 'o', 'l', 'l', 'e', 'c', 't', 'o', 'r', '.', 'b', 'e', '\0',
   /* "gamedevelopers.pl", true */ 'g', 'a', 'm', 'e', 'd', 'e', 'v', 'e', 'l', 'o', 'p', 'e', 'r', 's', '.', 'p', 'l', '\0',
   /* "gamegix.com", true */ 'g', 'a', 'm', 'e', 'g', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "gameguardian.net", true */ 'g', 'a', 'm', 'e', 'g', 'u', 'a', 'r', 'd', 'i', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "gameisbest.jp", true */ 'g', 'a', 'm', 'e', 'i', 's', 'b', 'e', 's', 't', '.', 'j', 'p', '\0',
   /* "gameofbay.org", true */ 'g', 'a', 'm', 'e', 'o', 'f', 'b', 'a', 'y', '.', 'o', 'r', 'g', '\0',
   /* "gameofpwnz.com", true */ 'g', 'a', 'm', 'e', 'o', 'f', 'p', 'w', 'n', 'z', '.', 'c', 'o', 'm', '\0',
   /* "gamepad.com.br", true */ 'g', 'a', 'm', 'e', 'p', 'a', 'd', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "gamepad.vg", true */ 'g', 'a', 'm', 'e', 'p', 'a', 'd', '.', 'v', 'g', '\0',
   /* "gamepader.com", true */ 'g', 'a', 'm', 'e', 'p', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "gamercredo.com", true */ 'g', 'a', 'm', 'e', 'r', 'c', 'r', 'e', 'd', 'o', '.', 'c', 'o', 'm', '\0',
   /* "gamercredo.net", true */ 'g', 'a', 'm', 'e', 'r', 'c', 'r', 'e', 'd', 'o', '.', 'n', 'e', 't', '\0',
-  /* "gamers-life.fr", true */ 'g', 'a', 'm', 'e', 'r', 's', '-', 'l', 'i', 'f', 'e', '.', 'f', 'r', '\0',
   /* "gameserver-sponsor.de", true */ 'g', 'a', 'm', 'e', 's', 'e', 'r', 'v', 'e', 'r', '-', 's', 'p', 'o', 'n', 's', 'o', 'r', '.', 'd', 'e', '\0',
   /* "gamesurferapp.com", true */ 'g', 'a', 'm', 'e', 's', 'u', 'r', 'f', 'e', 'r', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "gamingreinvented.com", true */ 'g', 'a', 'm', 'i', 'n', 'g', 'r', 'e', 'i', 'n', 'v', 'e', 'n', 't', 'e', 'd', '.', 'c', 'o', 'm', '\0',
   /* "gamingwithcromulent.com", true */ 'g', 'a', 'm', 'i', 'n', 'g', 'w', 'i', 't', 'h', 'c', 'r', 'o', 'm', 'u', 'l', 'e', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "gamingzoneservers.com", true */ 'g', 'a', 'm', 'i', 'n', 'g', 'z', 'o', 'n', 'e', 's', 'e', 'r', 'v', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "gamishou.fr", true */ 'g', 'a', 'm', 'i', 's', 'h', 'o', 'u', '.', 'f', 'r', '\0',
   /* "gamoloco.com", true */ 'g', 'a', 'm', 'o', 'l', 'o', 'c', 'o', '.', 'c', 'o', 'm', '\0',
   /* "gancedo.com.es", true */ 'g', 'a', 'n', 'c', 'e', 'd', 'o', '.', 'c', 'o', 'm', '.', 'e', 's', '\0',
@@ -4743,17 +4727,16 @@ static const char kSTSHostTable[] = {
   /* "gatorsa.es", true */ 'g', 'a', 't', 'o', 'r', 's', 'a', '.', 'e', 's', '\0',
   /* "gaussorgues.me", true */ 'g', 'a', 'u', 's', 's', 'o', 'r', 'g', 'u', 'e', 's', '.', 'm', 'e', '\0',
   /* "gautvedt.no", true */ 'g', 'a', 'u', 't', 'v', 'e', 'd', 't', '.', 'n', 'o', '\0',
   /* "gavick.com", true */ 'g', 'a', 'v', 'i', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "gaytorrent.ru", true */ 'g', 'a', 'y', 't', 'o', 'r', 'r', 'e', 'n', 't', '.', 'r', 'u', '\0',
   /* "gazee.net", true */ 'g', 'a', 'z', 'e', 'e', '.', 'n', 'e', 't', '\0',
   /* "gc-mc.de", true */ 'g', 'c', '-', 'm', 'c', '.', 'd', 'e', '\0',
   /* "gc.net", true */ 'g', 'c', '.', 'n', 'e', 't', '\0',
-  /* "gchq.wtf", true */ 'g', 'c', 'h', 'q', '.', 'w', 't', 'f', '\0',
   /* "gcs-ventures.com", true */ 'g', 'c', 's', '-', 'v', 'e', 'n', 't', 'u', 'r', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "gcsepod.com", true */ 'g', 'c', 's', 'e', 'p', 'o', 'd', '.', 'c', 'o', 'm', '\0',
   /* "gdax.com", true */ 'g', 'd', 'a', 'x', '.', 'c', 'o', 'm', '\0',
   /* "gdegem.org", true */ 'g', 'd', 'e', 'g', 'e', 'm', '.', 'o', 'r', 'g', '\0',
   /* "gdutnic.com", true */ 'g', 'd', 'u', 't', 'n', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "gdv.me", true */ 'g', 'd', 'v', '.', 'm', 'e', '\0',
   /* "ge1.me", false */ 'g', 'e', '1', '.', 'm', 'e', '\0',
   /* "ge3k.net", false */ 'g', 'e', '3', 'k', '.', 'n', 'e', 't', '\0',
@@ -4795,16 +4778,17 @@ static const char kSTSHostTable[] = {
   /* "genesiseureka.com", true */ 'g', 'e', 'n', 'e', 's', 'i', 's', 'e', 'u', 'r', 'e', 'k', 'a', '.', 'c', 'o', 'm', '\0',
   /* "genie-seiner-generation.de", true */ 'g', 'e', 'n', 'i', 'e', '-', 's', 'e', 'i', 'n', 'e', 'r', '-', 'g', 'e', 'n', 'e', 'r', 'a', 't', 'i', 'o', 'n', '.', 'd', 'e', '\0',
   /* "genomequestlive.com", true */ 'g', 'e', 'n', 'o', 'm', 'e', 'q', 'u', 'e', 's', 't', 'l', 'i', 'v', 'e', '.', 'c', 'o', 'm', '\0',
   /* "genossen.ru", true */ 'g', 'e', 'n', 'o', 's', 's', 'e', 'n', '.', 'r', 'u', '\0',
   /* "genshiken-itb.org", true */ 'g', 'e', 'n', 's', 'h', 'i', 'k', 'e', 'n', '-', 'i', 't', 'b', '.', 'o', 'r', 'g', '\0',
   /* "genshiken.org", true */ 'g', 'e', 'n', 's', 'h', 'i', 'k', 'e', 'n', '.', 'o', 'r', 'g', '\0',
   /* "genslerapps.com", true */ 'g', 'e', 'n', 's', 'l', 'e', 'r', 'a', 'p', 'p', 's', '.', 'c', 'o', 'm', '\0',
   /* "genslerwisp.com", true */ 'g', 'e', 'n', 's', 'l', 'e', 'r', 'w', 'i', 's', 'p', '.', 'c', 'o', 'm', '\0',
+  /* "genuxtsg.com", true */ 'g', 'e', 'n', 'u', 'x', 't', 's', 'g', '.', 'c', 'o', 'm', '\0',
   /* "genxbeats.com", true */ 'g', 'e', 'n', 'x', 'b', 'e', 'a', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "genxnotes.com", true */ 'g', 'e', 'n', 'x', 'n', 'o', 't', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "genyhitch.com", true */ 'g', 'e', 'n', 'y', 'h', 'i', 't', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "geofox.org", true */ 'g', 'e', 'o', 'f', 'o', 'x', '.', 'o', 'r', 'g', '\0',
   /* "geoip.fedoraproject.org", true */ 'g', 'e', 'o', 'i', 'p', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "geoip.stg.fedoraproject.org", true */ 'g', 'e', 'o', 'i', 'p', '.', 's', 't', 'g', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "geolad.com", false */ 'g', 'e', 'o', 'l', 'a', 'd', '.', 'c', 'o', 'm', '\0',
   /* "georgemaschke.com", true */ 'g', 'e', 'o', 'r', 'g', 'e', 'm', 'a', 's', 'c', 'h', 'k', 'e', '.', 'c', 'o', 'm', '\0',
@@ -4857,17 +4841,16 @@ static const char kSTSHostTable[] = {
   /* "getmdl.io", true */ 'g', 'e', 't', 'm', 'd', 'l', '.', 'i', 'o', '\0',
   /* "getmondo.co.uk", true */ 'g', 'e', 't', 'm', 'o', 'n', 'd', 'o', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "getnikola.com", true */ 'g', 'e', 't', 'n', 'i', 'k', 'o', 'l', 'a', '.', 'c', 'o', 'm', '\0',
   /* "getremembrall.com", true */ 'g', 'e', 't', 'r', 'e', 'm', 'e', 'm', 'b', 'r', 'a', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "getronics.care", true */ 'g', 'e', 't', 'r', 'o', 'n', 'i', 'c', 's', '.', 'c', 'a', 'r', 'e', '\0',
   /* "getsecure.nl", true */ 'g', 'e', 't', 's', 'e', 'c', 'u', 'r', 'e', '.', 'n', 'l', '\0',
   /* "getsensibill.com", true */ 'g', 'e', 't', 's', 'e', 'n', 's', 'i', 'b', 'i', 'l', 'l', '.', 'c', 'o', 'm', '\0',
   /* "getsetupfile.com", true */ 'g', 'e', 't', 's', 'e', 't', 'u', 'p', 'f', 'i', 'l', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "getspire.com", true */ 'g', 'e', 't', 's', 'p', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "getsport.mobi", true */ 'g', 'e', 't', 's', 'p', 'o', 'r', 't', '.', 'm', 'o', 'b', 'i', '\0',
   /* "getts.ro", true */ 'g', 'e', 't', 't', 's', '.', 'r', 'o', '\0',
   /* "getvdownloader.com", true */ 'g', 'e', 't', 'v', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "gflclan.ru", true */ 'g', 'f', 'l', 'c', 'l', 'a', 'n', '.', 'r', 'u', '\0',
   /* "gglks.com", true */ 'g', 'g', 'l', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "ggmmontascale.it", true */ 'g', 'g', 'm', 'm', 'o', 'n', 't', 'a', 's', 'c', 'a', 'l', 'e', '.', 'i', 't', '\0',
   /* "ggp2.com", true */ 'g', 'g', 'p', '2', '.', 'c', 'o', 'm', '\0',
   /* "ggservers.com", true */ 'g', 'g', 's', 'e', 'r', 'v', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
@@ -4978,16 +4961,17 @@ static const char kSTSHostTable[] = {
   /* "gohon.org", true */ 'g', 'o', 'h', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "gokhankesici.com", true */ 'g', 'o', 'k', 'h', 'a', 'n', 'k', 'e', 's', 'i', 'c', 'i', '.', 'c', 'o', 'm', '\0',
   /* "gokmenguresci.com", true */ 'g', 'o', 'k', 'm', 'e', 'n', 'g', 'u', 'r', 'e', 's', 'c', 'i', '.', 'c', 'o', 'm', '\0',
   /* "gold24.ru", true */ 'g', 'o', 'l', 'd', '2', '4', '.', 'r', 'u', '\0',
   /* "goldenhillsoftware.com", true */ 'g', 'o', 'l', 'd', 'e', 'n', 'h', 'i', 'l', 'l', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "goldenhost.ca", true */ 'g', 'o', 'l', 'd', 'e', 'n', 'h', 'o', 's', 't', '.', 'c', 'a', '\0',
   /* "goldmark.com.au", true */ 'g', 'o', 'l', 'd', 'm', 'a', 'r', 'k', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "goldpreisfinder.at", true */ 'g', 'o', 'l', 'd', 'p', 'r', 'e', 'i', 's', 'f', 'i', 'n', 'd', 'e', 'r', '.', 'a', 't', '\0',
+  /* "goldpros.com", true */ 'g', 'o', 'l', 'd', 'p', 'r', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "goldsecurity.com", true */ 'g', 'o', 'l', 'd', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "golf18network.com", true */ 'g', 'o', 'l', 'f', '1', '8', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'c', 'o', 'm', '\0',
   /* "golfburn.com", true */ 'g', 'o', 'l', 'f', 'b', 'u', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "golfscape.com", true */ 'g', 'o', 'l', 'f', 's', 'c', 'a', 'p', 'e', '.', 'c', 'o', 'm', '\0',
   /* "gong8.win", true */ 'g', 'o', 'n', 'g', '8', '.', 'w', 'i', 'n', '\0',
   /* "gonkar.com", true */ 'g', 'o', 'n', 'k', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "gooby.co", true */ 'g', 'o', 'o', 'b', 'y', '.', 'c', 'o', '\0',
   /* "goodmengroup.de", true */ 'g', 'o', 'o', 'd', 'm', 'e', 'n', 'g', 'r', 'o', 'u', 'p', '.', 'd', 'e', '\0',
@@ -5180,18 +5164,20 @@ static const char kSTSHostTable[] = {
   /* "guinea-pig.co", true */ 'g', 'u', 'i', 'n', 'e', 'a', '-', 'p', 'i', 'g', '.', 'c', 'o', '\0',
   /* "guineapigmustach.es", true */ 'g', 'u', 'i', 'n', 'e', 'a', 'p', 'i', 'g', 'm', 'u', 's', 't', 'a', 'c', 'h', '.', 'e', 's', '\0',
   /* "guitarmarketing.com", true */ 'g', 'u', 'i', 't', 'a', 'r', 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "gulch.in.ua", true */ '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',
   /* "gulenet.com", true */ 'g', 'u', 'l', 'e', 'n', 'e', 't', '.', 'c', 'o', 'm', '\0',
   /* "gummibande.noip.me", true */ 'g', 'u', 'm', 'm', 'i', 'b', 'a', 'n', 'd', 'e', '.', 'n', 'o', 'i', 'p', '.', 'm', 'e', '\0',
   /* "gunnarhafdal.com", true */ 'g', 'u', 'n', 'n', 'a', 'r', 'h', 'a', 'f', 'd', 'a', 'l', '.', 'c', 'o', 'm', '\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',
   /* "gurom.lv", true */ 'g', 'u', 'r', 'o', 'm', '.', 'l', 'v', '\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',
@@ -5289,16 +5275,17 @@ static const char kSTSHostTable[] = {
   /* "happycoder.net", true */ 'h', 'a', 'p', 'p', 'y', 'c', 'o', 'd', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "happygastro.com", true */ 'h', 'a', 'p', 'p', 'y', 'g', 'a', 's', 't', 'r', 'o', '.', 'c', 'o', 'm', '\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',
   /* "harambe.site", true */ 'h', 'a', 'r', 'a', 'm', 'b', 'e', '.', 's', 'i', 't', 'e', '\0',
+  /* "harbor-light.net", true */ 'h', 'a', 'r', 'b', 'o', 'r', '-', 'l', 'i', 'g', 'h', 't', '.', 'n', 'e', 't', '\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',
   /* "hardline.xyz", true */ 'h', 'a', 'r', 'd', 'l', 'i', 'n', 'e', '.', 'x', 'y', 'z', '\0',
   /* "haribosupermix.com", true */ 'h', 'a', 'r', 'i', 'b', 'o', 's', 'u', 'p', 'e', 'r', 'm', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "harmoney.co.nz", true */ 'h', 'a', 'r', 'm', 'o', 'n', 'e', 'y', '.', 'c', 'o', '.', 'n', 'z', '\0',
@@ -5672,17 +5659,16 @@ static const char kSTSHostTable[] = {
   /* "hugofs.com", true */ 'h', 'u', 'g', 'o', 'f', 's', '.', 'c', 'o', 'm', '\0',
   /* "huihui.moe", true */ 'h', 'u', 'i', 'h', 'u', 'i', '.', 'm', 'o', 'e', '\0',
   /* "huiser.nl", true */ 'h', 'u', 'i', 's', 'e', 'r', '.', 'n', 'l', '\0',
   /* "humankode.com", true */ 'h', 'u', 'm', 'a', 'n', 'k', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "humpi.at", true */ 'h', 'u', 'm', 'p', 'i', '.', 'a', 't', '\0',
   /* "hund.io", true */ 'h', 'u', 'n', 'd', '.', 'i', 'o', '\0',
   /* "hunter.io", true */ 'h', 'u', 'n', 't', 'e', 'r', '.', 'i', 'o', '\0',
   /* "hup.blue", true */ 'h', 'u', 'p', '.', 'b', 'l', 'u', 'e', '\0',
-  /* "hupp.se", true */ 'h', 'u', 'p', 'p', '.', 's', 'e', '\0',
   /* "hurd.is", true */ 'h', 'u', 'r', 'd', '.', 'i', 's', '\0',
   /* "huren.nl", true */ 'h', 'u', 'r', 'e', 'n', '.', 'n', 'l', '\0',
   /* "husakbau.at", true */ 'h', 'u', 's', 'a', 'k', 'b', 'a', 'u', '.', 'a', 't', '\0',
   /* "hushfile.it", true */ 'h', 'u', 's', 'h', 'f', 'i', 'l', 'e', '.', 'i', 't', '\0',
   /* "husic.net", true */ 'h', 'u', 's', 'i', 'c', '.', 'n', 'e', 't', '\0',
   /* "husky.xyz", true */ 'h', 'u', 's', 'k', 'y', '.', 'x', 'y', 'z', '\0',
   /* "huskybutt.dog", true */ 'h', 'u', 's', 'k', 'y', 'b', 'u', 't', 't', '.', 'd', 'o', 'g', '\0',
   /* "huskyinc.us", true */ 'h', 'u', 's', 'k', 'y', 'i', 'n', 'c', '.', 'u', 's', '\0',
@@ -6023,17 +6009,16 @@ static const char kSTSHostTable[] = {
   /* "iolife.dk", true */ 'i', 'o', 'l', 'i', 'f', 'e', '.', 'd', 'k', '\0',
   /* "iompost.com", true */ 'i', 'o', 'm', 'p', 'o', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "ionas-law.ro", false */ 'i', 'o', 'n', 'a', 's', '-', 'l', 'a', 'w', '.', 'r', 'o', '\0',
   /* "ionc.ca", true */ 'i', 'o', 'n', 'c', '.', 'c', 'a', '\0',
   /* "ionlabs.kr", true */ 'i', 'o', 'n', 'l', 'a', 'b', 's', '.', 'k', 'r', '\0',
   /* "ioover.net", true */ 'i', 'o', 'o', 'v', 'e', 'r', '.', 'n', 'e', 't', '\0',
   /* "iora.fr", true */ 'i', 'o', 'r', 'a', '.', 'f', 'r', '\0',
   /* "iossifovlab.com", true */ 'i', 'o', 's', 's', 'i', 'f', 'o', 'v', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
-  /* "ip-life.net", true */ 'i', 'p', '-', 'l', 'i', 'f', 'e', '.', 'n', 'e', 't', '\0',
   /* "ip2country.info", true */ 'i', 'p', '2', 'c', 'o', 'u', 'n', 't', 'r', 'y', '.', 'i', 'n', 'f', 'o', '\0',
   /* "ip6.li", true */ 'i', 'p', '6', '.', 'l', 'i', '\0',
   /* "ipal.im", true */ 'i', 'p', 'a', 'l', '.', 'i', 'm', '\0',
   /* "ipal.name", true */ 'i', 'p', 'a', 'l', '.', 'n', 'a', 'm', 'e', '\0',
   /* "ipawind.com", true */ 'i', 'p', 'a', 'w', 'i', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "ipcareers.net", true */ 'i', 'p', 'c', 'a', 'r', 'e', 'e', 'r', 's', '.', 'n', 'e', 't', '\0',
   /* "ipcfg.me", true */ 'i', 'p', 'c', 'f', 'g', '.', 'm', 'e', '\0',
   /* "ipconsulting.se", true */ 'i', 'p', 'c', 'o', 'n', 's', 'u', 'l', 't', 'i', 'n', 'g', '.', 's', 'e', '\0',
@@ -6221,17 +6206,16 @@ static const char kSTSHostTable[] = {
   /* "jaimechanaga.com", true */ 'j', 'a', 'i', 'm', 'e', 'c', 'h', 'a', 'n', 'a', 'g', 'a', '.', 'c', 'o', 'm', '\0',
   /* "jaispirit.com", true */ 'j', 'a', 'i', 's', 'p', 'i', 'r', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "jaitnetworking.com", false */ 'j', 'a', 'i', 't', 'n', 'e', 't', 'w', 'o', 'r', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "jakarta.dating", true */ 'j', 'a', 'k', 'a', 'r', 't', 'a', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
   /* "jakecurtis.de", true */ 'j', 'a', 'k', 'e', 'c', 'u', 'r', 't', 'i', 's', '.', 'd', 'e', '\0',
   /* "jakereynolds.co", true */ 'j', 'a', 'k', 'e', 'r', 'e', 'y', 'n', 'o', 'l', 'd', 's', '.', 'c', 'o', '\0',
   /* "jaketremper.com", true */ 'j', 'a', 'k', 'e', 't', 'r', 'e', 'm', 'p', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "jakobejitblokaci.cz", true */ 'j', 'a', 'k', 'o', 'b', 'e', 'j', 'i', 't', 'b', 'l', 'o', 'k', 'a', 'c', 'i', '.', 'c', 'z', '\0',
-  /* "jaksi.io", true */ 'j', 'a', 'k', 's', 'i', '.', 'i', 'o', '\0',
   /* "jakub-boucek.cz", true */ 'j', 'a', 'k', 'u', 'b', '-', 'b', 'o', 'u', 'c', 'e', 'k', '.', 'c', 'z', '\0',
   /* "jakubboucek.cz", true */ 'j', 'a', 'k', 'u', 'b', 'b', 'o', 'u', 'c', 'e', 'k', '.', 'c', 'z', '\0',
   /* "james.je", true */ 'j', 'a', 'm', 'e', 's', '.', 'j', 'e', '\0',
   /* "jamesandpame.la", true */ 'j', 'a', 'm', 'e', 's', 'a', 'n', 'd', 'p', 'a', 'm', 'e', '.', 'l', 'a', '\0',
   /* "jamesbillingham.com", true */ 'j', 'a', 'm', 'e', 's', 'b', 'i', 'l', 'l', 'i', 'n', 'g', 'h', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "jamesbywater.co.uk", true */ 'j', 'a', 'm', 'e', 's', 'b', 'y', 'w', 'a', 't', 'e', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "jamesbywater.com", true */ 'j', 'a', 'm', 'e', 's', 'b', 'y', 'w', 'a', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "jamesbywater.uk", false */ 'j', 'a', 'm', 'e', 's', 'b', 'y', 'w', 'a', 't', 'e', 'r', '.', 'u', 'k', '\0',
@@ -6389,16 +6373,17 @@ static const char kSTSHostTable[] = {
   /* "joepitt.co.uk", false */ 'j', 'o', 'e', 'p', 'i', 't', 't', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "joerss.at", true */ 'j', 'o', 'e', 'r', 's', 's', '.', 'a', 't', '\0',
   /* "joestead.codes", true */ 'j', 'o', 'e', 's', 't', 'e', 'a', 'd', '.', 'c', 'o', 'd', 'e', 's', '\0',
   /* "jogorama.com.br", false */ 'j', 'o', 'g', 'o', 'r', 'a', 'm', 'a', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "johannes-sprink.de", true */ 'j', 'o', 'h', 'a', 'n', 'n', 'e', 's', '-', 's', 'p', 'r', 'i', 'n', 'k', '.', 'd', 'e', '\0',
   /* "johannes.io", true */ 'j', 'o', 'h', 'a', 'n', 'n', 'e', 's', '.', 'i', 'o', '\0',
   /* "johannes.wtf", true */ 'j', 'o', 'h', 'a', 'n', 'n', 'e', 's', '.', 'w', 't', 'f', '\0',
   /* "johnblackbourn.com", true */ 'j', 'o', 'h', 'n', 'b', 'l', 'a', 'c', 'k', 'b', 'o', 'u', 'r', 'n', '.', 'c', 'o', 'm', '\0',
+  /* "johnbrownphotography.ch", true */ 'j', 'o', 'h', 'n', 'b', 'r', 'o', 'w', 'n', 'p', 'h', 'o', 't', 'o', 'g', 'r', 'a', 'p', 'h', 'y', '.', 'c', 'h', '\0',
   /* "johndong.net", true */ 'j', 'o', 'h', 'n', 'd', 'o', 'n', 'g', '.', 'n', 'e', 't', '\0',
   /* "johngallias.com", true */ 'j', 'o', 'h', 'n', 'g', 'a', 'l', 'l', 'i', 'a', 's', '.', 'c', 'o', 'm', '\0',
   /* "johnguant.com", true */ 'j', 'o', 'h', 'n', 'g', 'u', 'a', 'n', 't', '.', 'c', 'o', 'm', '\0',
   /* "johnmcgovern.com", true */ 'j', 'o', 'h', 'n', 'm', 'c', 'g', 'o', 'v', 'e', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "johnmcintosh.pro", true */ 'j', 'o', 'h', 'n', 'm', 'c', 'i', 'n', 't', 'o', 's', 'h', '.', 'p', 'r', 'o', '\0',
   /* "johnmh.me", true */ 'j', 'o', 'h', 'n', 'm', 'h', '.', 'm', 'e', '\0',
   /* "johnmichel.org", true */ 'j', 'o', 'h', 'n', 'm', 'i', 'c', 'h', 'e', 'l', '.', 'o', 'r', 'g', '\0',
   /* "johnnybet.com", true */ 'j', 'o', 'h', 'n', 'n', 'y', 'b', 'e', 't', '.', 'c', 'o', 'm', '\0',
@@ -6417,17 +6402,16 @@ static const char kSTSHostTable[] = {
   /* "jondarby.com", true */ 'j', 'o', 'n', 'd', 'a', 'r', 'b', 'y', '.', 'c', 'o', 'm', '\0',
   /* "jondevin.com", true */ 'j', 'o', 'n', 'd', 'e', 'v', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "jonesborostatebank.com", true */ 'j', 'o', 'n', 'e', 's', 'b', 'o', 'r', 'o', 's', 't', 'a', 't', 'e', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0',
   /* "jonferwerda.net", true */ 'j', 'o', 'n', 'f', 'e', 'r', 'w', 'e', 'r', 'd', 'a', '.', 'n', 'e', 't', '\0',
   /* "jonfor.net", true */ 'j', 'o', 'n', 'f', 'o', 'r', '.', 'n', 'e', 't', '\0',
   /* "jongbloed.nl", true */ 'j', 'o', 'n', 'g', 'b', 'l', 'o', 'e', 'd', '.', 'n', 'l', '\0',
   /* "jonirrings.com", true */ 'j', 'o', 'n', 'i', 'r', 'r', 'i', 'n', 'g', 's', '.', 'c', 'o', 'm', '\0',
   /* "jonlabelle.com", true */ 'j', 'o', 'n', 'l', 'a', 'b', 'e', 'l', 'l', 'e', '.', 'c', 'o', 'm', '\0',
-  /* "jonnichols.info", true */ 'j', 'o', 'n', 'n', 'i', 'c', 'h', 'o', 'l', 's', '.', 'i', 'n', 'f', 'o', '\0',
   /* "jonnybarnes.uk", true */ 'j', 'o', 'n', 'n', 'y', 'b', 'a', 'r', 'n', 'e', 's', '.', 'u', 'k', '\0',
   /* "jonnystoten.com", true */ 'j', 'o', 'n', 'n', 'y', 's', 't', 'o', 't', 'e', 'n', '.', 'c', 'o', 'm', '\0',
   /* "jonoalderson.com", true */ 'j', 'o', 'n', 'o', 'a', 'l', 'd', 'e', 'r', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "jonpads.com", true */ 'j', 'o', 'n', 'p', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "jonsno.ws", true */ 'j', 'o', 'n', 's', 'n', 'o', '.', 'w', 's', '\0',
   /* "joostrijneveld.nl", true */ 'j', 'o', 'o', 's', 't', 'r', 'i', 'j', 'n', 'e', 'v', 'e', 'l', 'd', '.', 'n', 'l', '\0',
   /* "jooto.com", true */ 'j', 'o', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "jopsens.de", true */ 'j', 'o', 'p', 's', 'e', 'n', 's', '.', 'd', 'e', '\0',
@@ -6447,16 +6431,17 @@ static const char kSTSHostTable[] = {
   /* "jotpics.com", true */ 'j', 'o', 't', 'p', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "jovic.hamburg", true */ 'j', 'o', 'v', 'i', 'c', '.', 'h', 'a', 'm', 'b', 'u', 'r', 'g', '\0',
   /* "joworld.net", true */ 'j', 'o', 'w', 'o', 'r', 'l', 'd', '.', 'n', 'e', 't', '\0',
   /* "joyceclerkx.com", true */ 'j', 'o', 'y', 'c', 'e', 'c', 'l', 'e', 'r', 'k', 'x', '.', 'c', 'o', 'm', '\0',
   /* "joyofcookingandbaking.com", true */ 'j', 'o', 'y', 'o', 'f', 'c', 'o', 'o', 'k', 'i', 'n', 'g', 'a', 'n', 'd', 'b', 'a', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "joyqi.com", true */ 'j', 'o', 'y', 'q', 'i', '.', 'c', 'o', 'm', '\0',
   /* "jpaglier.com", true */ 'j', 'p', 'a', 'g', 'l', 'i', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "jpcdi.com", true */ 'j', 'p', 'c', 'd', 'i', '.', 'c', 'o', 'm', '\0',
+  /* "jpeaches.xyz", true */ 'j', 'p', 'e', 'a', 'c', 'h', 'e', 's', '.', 'x', 'y', 'z', '\0',
   /* "jpeg.io", true */ 'j', 'p', 'e', 'g', '.', 'i', 'o', '\0',
   /* "jproxx.com", true */ 'j', 'p', 'r', 'o', 'x', 'x', '.', 'c', 'o', 'm', '\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',
   /* "jrmd.io", true */ 'j', 'r', 'm', 'd', '.', 'i', 'o', '\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',
@@ -6543,17 +6528,16 @@ static const char kSTSHostTable[] = {
   /* "kalender.com", true */ 'k', 'a', 'l', 'e', 'n', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "kalevlamps.co.uk", true */ 'k', 'a', 'l', 'e', 'v', 'l', 'a', 'm', 'p', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "kaliaa.fi", true */ 'k', 'a', 'l', 'i', 'a', 'a', '.', 'f', 'i', '\0',
   /* "kalian.cz", true */ 'k', 'a', 'l', 'i', 'a', 'n', '.', 'c', 'z', '\0',
   /* "kall.is", true */ 'k', 'a', 'l', 'l', '.', 'i', 's', '\0',
   /* "kalmar.com", true */ 'k', 'a', 'l', 'm', 'a', 'r', '.', 'c', 'o', 'm', '\0',
   /* "kaloix.de", true */ 'k', 'a', 'l', 'o', 'i', 'x', '.', 'd', 'e', '\0',
   /* "kamcvicit.sk", true */ 'k', 'a', 'm', 'c', 'v', 'i', 'c', 'i', 't', '.', 's', 'k', '\0',
-  /* "kamikatse.net", true */ 'k', 'a', 'm', 'i', 'k', 'a', 't', 's', 'e', '.', 'n', 'e', 't', '\0',
   /* "kamitech.ch", true */ 'k', 'a', 'm', 'i', 't', 'e', 'c', 'h', '.', 'c', 'h', '\0',
   /* "kamixa.se", true */ 'k', 'a', 'm', 'i', 'x', 'a', '.', 's', 'e', '\0',
   /* "kana.me", true */ 'k', 'a', 'n', 'a', '.', 'm', 'e', '\0',
   /* "kanaete-uranai.com", true */ 'k', 'a', 'n', 'a', 'e', 't', 'e', '-', 'u', 'r', 'a', 'n', 'a', 'i', '.', 'c', 'o', 'm', '\0',
   /* "kanal-tv-haensch.de", true */ 'k', 'a', 'n', 'a', 'l', '-', 't', 'v', '-', 'h', 'a', 'e', 'n', 's', 'c', 'h', '.', 'd', 'e', '\0',
   /* "kanar.nl", true */ 'k', 'a', 'n', 'a', 'r', '.', 'n', 'l', '\0',
   /* "kandalife.com", true */ 'k', 'a', 'n', 'd', 'a', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "kanehusky.com", true */ 'k', 'a', 'n', 'e', 'h', 'u', 's', 'k', 'y', '.', 'c', 'o', 'm', '\0',
@@ -6589,16 +6573,17 @@ static const char kSTSHostTable[] = {
   /* "karmaspa.se", true */ 'k', 'a', 'r', 'm', 'a', 's', 'p', 'a', '.', 's', 'e', '\0',
   /* "karsofsystems.com", true */ 'k', 'a', 'r', 's', 'o', 'f', 's', 'y', 's', 't', 'e', 'm', 's', '.', 'c', 'o', 'm', '\0',
   /* "kartec.com", true */ 'k', 'a', 'r', 't', 'e', 'c', '.', 'c', 'o', 'm', '\0',
   /* "karting34.com", true */ 'k', 'a', 'r', 't', 'i', 'n', 'g', '3', '4', '.', 'c', 'o', 'm', '\0',
   /* "kartonmodellbau.org", true */ 'k', 'a', 'r', 't', 'o', 'n', 'm', 'o', 'd', 'e', 'l', 'l', 'b', 'a', 'u', '.', 'o', 'r', 'g', '\0',
   /* "kasadara.com", true */ 'k', 'a', 's', 'a', 'd', 'a', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "kashdash.ca", true */ 'k', 'a', 's', 'h', 'd', 'a', 's', 'h', '.', 'c', 'a', '\0',
   /* "kashmirobserver.net", true */ 'k', 'a', 's', 'h', 'm', 'i', 'r', 'o', 'b', 's', 'e', 'r', 'v', 'e', 'r', '.', 'n', 'e', 't', '\0',
+  /* "kasilag.me", true */ 'k', 'a', 's', 'i', 'l', 'a', 'g', '.', 'm', 'e', '\0',
   /* "kasko.io", true */ 'k', 'a', 's', 'k', 'o', '.', 'i', 'o', '\0',
   /* "kassa.at", true */ 'k', 'a', 's', 's', 'a', '.', 'a', 't', '\0',
   /* "kat.al", true */ 'k', 'a', 't', '.', 'a', 'l', '\0',
   /* "kateduggan.net", true */ 'k', 'a', 't', 'e', 'd', 'u', 'g', 'g', 'a', 'n', '.', 'n', 'e', 't', '\0',
   /* "katekligys.com", true */ 'k', 'a', 't', 'e', 'k', 'l', 'i', 'g', 'y', 's', '.', 'c', 'o', 'm', '\0',
   /* "katericke.com", true */ 'k', 'a', 't', 'e', 'r', 'i', 'c', 'k', 'e', '.', 'c', 'o', 'm', '\0',
   /* "kati-raumplaner.de", true */ 'k', 'a', 't', 'i', '-', 'r', 'a', 'u', 'm', 'p', 'l', 'a', 'n', 'e', 'r', '.', 'd', 'e', '\0',
   /* "katka.info", true */ 'k', 'a', 't', 'k', 'a', '.', 'i', 'n', 'f', 'o', '\0',
@@ -6647,16 +6632,17 @@ static const char kSTSHostTable[] = {
   /* "keisaku.org", true */ 'k', 'e', 'i', 's', 'a', 'k', 'u', '.', 'o', 'r', 'g', '\0',
   /* "keithws.net", true */ 'k', 'e', 'i', 't', 'h', 'w', 's', '.', 'n', 'e', 't', '\0',
   /* "keke-shop.ch", true */ 'k', 'e', 'k', 'e', '-', 's', 'h', 'o', 'p', '.', 'c', 'h', '\0',
   /* "kekku.li", true */ 'k', 'e', 'k', 'k', 'u', '.', 'l', 'i', '\0',
   /* "kekz.org", true */ 'k', 'e', 'k', 'z', '.', 'o', 'r', 'g', '\0',
   /* "kellyandantony.com", true */ 'k', 'e', 'l', 'l', 'y', 'a', 'n', 'd', 'a', 'n', 't', 'o', 'n', 'y', '.', 'c', 'o', 'm', '\0',
   /* "kempkens.io", true */ 'k', 'e', 'm', 'p', 'k', 'e', 'n', 's', '.', 'i', 'o', '\0',
   /* "ken.fm", true */ 'k', 'e', 'n', '.', 'f', 'm', '\0',
+  /* "kenderbeton-magyarorszag.hu", true */ 'k', 'e', 'n', 'd', 'e', 'r', 'b', 'e', 't', 'o', 'n', '-', 'm', 'a', 'g', 'y', 'a', 'r', 'o', 'r', 's', 'z', 'a', 'g', '.', 'h', 'u', '\0',
   /* "kenderbetonmagyarorszag.hu", true */ 'k', 'e', 'n', 'd', 'e', 'r', 'b', 'e', 't', 'o', 'n', 'm', 'a', 'g', 'y', 'a', 'r', 'o', 'r', 's', 'z', 'a', 'g', '.', 'h', 'u', '\0',
   /* "kenderhaz-magyarorszag.hu", true */ 'k', 'e', 'n', 'd', 'e', 'r', 'h', 'a', 'z', '-', 'm', 'a', 'g', 'y', 'a', 'r', 'o', 'r', 's', 'z', 'a', 'g', '.', 'h', 'u', '\0',
   /* "kenderhazmagyarorszag.hu", true */ 'k', 'e', 'n', 'd', 'e', 'r', 'h', 'a', 'z', 'm', 'a', 'g', 'y', 'a', 'r', 'o', 'r', 's', 'z', 'a', 'g', '.', 'h', 'u', '\0',
   /* "kendra.io", true */ 'k', 'e', 'n', 'd', 'r', 'a', '.', 'i', 'o', '\0',
   /* "kendu.si", true */ 'k', 'e', 'n', 'd', 'u', '.', 's', 'i', '\0',
   /* "kengilmour.com", true */ 'k', 'e', 'n', 'g', 'i', 'l', 'm', 'o', 'u', 'r', '.', 'c', 'o', 'm', '\0',
   /* "kenguntokku.jp", true */ 'k', 'e', 'n', 'g', 'u', 'n', 't', 'o', 'k', 'k', 'u', '.', 'j', 'p', '\0',
   /* "kenkoelectric.com", true */ 'k', 'e', 'n', 'k', 'o', 'e', 'l', 'e', 'c', 't', 'r', 'i', 'c', '.', 'c', 'o', 'm', '\0',
@@ -6688,17 +6674,16 @@ static const char kSTSHostTable[] = {
   /* "kevinratcliff.com", true */ 'k', 'e', 'v', 'i', 'n', 'r', 'a', 't', 'c', 'l', 'i', 'f', 'f', '.', 'c', 'o', 'm', '\0',
   /* "keybase.io", true */ 'k', 'e', 'y', 'b', 'a', 's', 'e', '.', 'i', 'o', '\0',
   /* "keybored.me", true */ 'k', 'e', 'y', 'b', 'o', 'r', 'e', 'd', '.', 'm', 'e', '\0',
   /* "keycdn.com", true */ 'k', 'e', 'y', 'c', 'd', 'n', '.', 'c', 'o', 'm', '\0',
   /* "keyerror.com", true */ 'k', 'e', 'y', 'e', 'r', 'r', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "keys.fedoraproject.org", true */ 'k', 'e', 'y', 's', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0',
   /* "keysupport.org", true */ 'k', 'e', 'y', 's', 'u', 'p', 'p', 'o', 'r', 't', '.', 'o', 'r', 'g', '\0',
   /* "kfbrussels.be", true */ 'k', 'f', 'b', 'r', 'u', 's', 's', 'e', 'l', 's', '.', 'b', 'e', '\0',
-  /* "kfz-hantschel.de", true */ 'k', 'f', 'z', '-', 'h', 'a', 'n', 't', 's', 'c', 'h', 'e', 'l', '.', 'd', 'e', '\0',
   /* "kgm-irm.be", true */ 'k', 'g', 'm', '-', 'i', 'r', 'm', '.', 'b', 'e', '\0',
   /* "khanovaskola.cz", true */ 'k', 'h', 'a', 'n', 'o', 'v', 'a', 's', 'k', 'o', 'l', 'a', '.', 'c', 'z', '\0',
   /* "khetzal.info", true */ 'k', 'h', 'e', 't', 'z', 'a', 'l', '.', 'i', 'n', 'f', 'o', '\0',
   /* "khipu.com", true */ 'k', 'h', 'i', 'p', 'u', '.', 'c', 'o', 'm', '\0',
   /* "khmath.com", true */ 'k', 'h', 'm', 'a', 't', 'h', '.', 'c', 'o', 'm', '\0',
   /* "khmb.ru", true */ 'k', 'h', 'm', 'b', '.', 'r', 'u', '\0',
   /* "ki-on.net", true */ 'k', 'i', '-', 'o', 'n', '.', 'n', 'e', 't', '\0',
   /* "kiadoapartman.hu", true */ 'k', 'i', 'a', 'd', 'o', 'a', 'p', 'a', 'r', 't', 'm', 'a', 'n', '.', 'h', 'u', '\0',
@@ -6763,17 +6748,16 @@ static const char kSTSHostTable[] = {
   /* "kirkovsky.com", true */ 'k', 'i', 'r', 'k', 'o', 'v', 's', 'k', 'y', '.', 'c', 'o', 'm', '\0',
   /* "kirsch-gestaltung.de", true */ 'k', 'i', 'r', 's', 'c', 'h', '-', 'g', 'e', 's', 't', 'a', 'l', 't', 'u', 'n', 'g', '.', 'd', 'e', '\0',
   /* "kirschbaum.me", true */ 'k', 'i', 'r', 's', 'c', 'h', 'b', 'a', 'u', 'm', '.', 'm', 'e', '\0',
   /* "kirstenbos.ca", true */ 'k', 'i', 'r', 's', 't', 'e', 'n', 'b', 'o', 's', '.', 'c', 'a', '\0',
   /* "kirstin-peters.de", true */ 'k', 'i', 'r', 's', 't', 'i', 'n', '-', 'p', 'e', 't', 'e', 'r', 's', '.', 'd', 'e', '\0',
   /* "kis-toitoidixi.de", true */ 'k', 'i', 's', '-', 't', 'o', 'i', 't', 'o', 'i', 'd', 'i', 'x', 'i', '.', 'd', 'e', '\0',
   /* "kisskiss.ch", true */ 'k', 'i', 's', 's', 'k', 'i', 's', 's', '.', 'c', 'h', '\0',
   /* "kisstyle.ru", true */ 'k', 'i', 's', 's', 't', 'y', 'l', 'e', '.', 'r', 'u', '\0',
-  /* "kisun.co.jp", true */ 'k', 'i', 's', 'u', 'n', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "kita.id", true */ 'k', 'i', 't', 'a', '.', 'i', 'd', '\0',
   /* "kitabgaul.com", true */ 'k', 'i', 't', 'a', 'b', 'g', 'a', 'u', 'l', '.', 'c', 'o', 'm', '\0',
   /* "kitestar.co.uk", true */ 'k', 'i', 't', 'e', 's', 't', 'a', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "kitsostech.com", true */ 'k', 'i', 't', 's', 'o', 's', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "kittmedia.com", true */ 'k', 'i', 't', 't', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "kjaer.io", true */ 'k', 'j', 'a', 'e', 'r', '.', 'i', 'o', '\0',
   /* "kjarni.cc", true */ 'k', 'j', 'a', 'r', 'n', 'i', '.', 'c', 'c', '\0',
   /* "kjarrval.is", true */ 'k', 'j', 'a', 'r', 'r', 'v', 'a', 'l', '.', 'i', 's', '\0',
@@ -6859,17 +6843,16 @@ static const char kSTSHostTable[] = {
   /* "komicloud.com", true */ 'k', 'o', 'm', 'i', 'c', 'l', 'o', 'u', 'd', '.', 'c', 'o', 'm', '\0',
   /* "komidoc.com", true */ 'k', 'o', 'm', 'i', 'd', 'o', 'c', '.', 'c', 'o', 'm', '\0',
   /* "komiksbaza.pl", true */ 'k', 'o', 'm', 'i', 'k', 's', 'b', 'a', 'z', 'a', '.', 'p', 'l', '\0',
   /* "komischkeszeug.de", true */ 'k', 'o', 'm', 'i', 's', 'c', 'h', 'k', 'e', 's', 'z', 'e', 'u', 'g', '.', 'd', 'e', '\0',
   /* "kommune42.org", true */ 'k', 'o', 'm', 'm', 'u', 'n', 'e', '4', '2', '.', 'o', 'r', 'g', '\0',
   /* "komoju.com", true */ 'k', 'o', 'm', 'o', 'j', 'u', '.', 'c', 'o', 'm', '\0',
   /* "kompetenzkurs.de", true */ 'k', 'o', 'm', 'p', 'e', 't', 'e', 'n', 'z', 'k', 'u', 'r', 's', '.', 'd', 'e', '\0',
   /* "kon-sil.de", true */ 'k', 'o', 'n', '-', 's', 'i', 'l', '.', 'd', 'e', '\0',
-  /* "konata.us", true */ 'k', 'o', 'n', 'a', 't', 'a', '.', 'u', 's', '\0',
   /* "kondou-butsudan.com", true */ 'k', 'o', 'n', 'd', 'o', 'u', '-', 'b', 'u', 't', 's', 'u', 'd', 'a', 'n', '.', 'c', 'o', 'm', '\0',
   /* "kongar.org", true */ 'k', 'o', 'n', 'g', 'a', 'r', '.', 'o', 'r', 'g', '\0',
   /* "koniecfica.sk", true */ 'k', 'o', 'n', 'i', 'e', 'c', 'f', 'i', 'c', 'a', '.', 's', 'k', '\0',
   /* "konijntjes.nl", true */ 'k', 'o', 'n', 'i', 'j', 'n', 't', 'j', 'e', 's', '.', 'n', 'l', '\0',
   /* "konklone.com", true */ 'k', 'o', 'n', 'k', 'l', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0',
   /* "konkurs.ba", true */ 'k', 'o', 'n', 'k', 'u', 'r', 's', '.', 'b', 'a', '\0',
   /* "konsertoversikt.no", true */ 'k', 'o', 'n', 's', 'e', 'r', 't', 'o', 'v', 'e', 'r', 's', 'i', 'k', 't', '.', 'n', 'o', '\0',
   /* "kontaxis.org", true */ 'k', 'o', 'n', 't', 'a', 'x', 'i', 's', '.', 'o', 'r', 'g', '\0',
@@ -7107,17 +7090,16 @@ static const char kSTSHostTable[] = {
   /* "lavalite.de", true */ 'l', 'a', 'v', 'a', 'l', 'i', 't', 'e', '.', 'd', 'e', '\0',
   /* "laventainnhotel-mailing.com", true */ 'l', 'a', 'v', 'e', 'n', 't', 'a', 'i', 'n', 'n', 'h', 'o', 't', 'e', 'l', '-', 'm', 'a', 'i', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "lavine.ch", true */ 'l', 'a', 'v', 'i', 'n', 'e', '.', 'c', 'h', '\0',
   /* "lavinya.net", false */ 'l', 'a', 'v', 'i', 'n', 'y', 'a', '.', 'n', 'e', 't', '\0',
   /* "lavita.de", true */ 'l', 'a', 'v', 'i', 't', 'a', '.', 'd', 'e', '\0',
   /* "lavito.cz", true */ 'l', 'a', 'v', 'i', 't', 'o', '.', 'c', 'z', '\0',
   /* "lavoieducoeur.be", true */ 'l', 'a', 'v', 'o', 'i', 'e', 'd', 'u', 'c', 'o', 'e', 'u', 'r', '.', 'b', 'e', '\0',
   /* "lavoiepharmd.com", true */ 'l', 'a', 'v', 'o', 'i', 'e', 'p', 'h', 'a', 'r', 'm', 'd', '.', 'c', 'o', 'm', '\0',
-  /* "lawformt.com", true */ 'l', 'a', 'w', 'f', 'o', 'r', 'm', 't', '.', 'c', 'o', 'm', '\0',
   /* "lawly.org", true */ 'l', 'a', 'w', 'l', 'y', '.', 'o', 'r', 'g', '\0',
   /* "lawrencemurgatroyd.com", true */ 'l', 'a', 'w', 'r', 'e', 'n', 'c', 'e', 'm', 'u', 'r', 'g', 'a', 't', 'r', 'o', 'y', 'd', '.', 'c', 'o', 'm', '\0',
   /* "layer8.tk", true */ 'l', 'a', 'y', 'e', 'r', '8', '.', 't', 'k', '\0',
   /* "laylo.nl", true */ 'l', 'a', 'y', 'l', 'o', '.', 'n', 'l', '\0',
   /* "layoutsatzunddruck.de", true */ 'l', 'a', 'y', 'o', 'u', 't', 's', 'a', 't', 'z', 'u', 'n', 'd', 'd', 'r', 'u', 'c', 'k', '.', 'd', 'e', '\0',
   /* "lazerus.net", true */ 'l', 'a', 'z', 'e', 'r', 'u', 's', '.', 'n', 'e', 't', '\0',
   /* "lazurit.com", true */ 'l', 'a', 'z', 'u', 'r', 'i', 't', '.', 'c', 'o', 'm', '\0',
   /* "lb-toner.de", true */ 'l', 'b', '-', 't', 'o', 'n', 'e', 'r', '.', 'd', 'e', '\0',
@@ -7193,18 +7175,18 @@ static const char kSTSHostTable[] = {
   /* "leonard.io", true */ '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',
   /* "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',
   /* "lep.gov", true */ 'l', 'e', 'p', '.', 'g', 'o', 'v', '\0',
   /* "lepont.pl", true */ 'l', 'e', 'p', 'o', 'n', 't', '.', 'p', 'l', '\0',
-  /* "leppis-it.de", true */ 'l', 'e', 'p', 'p', 'i', 's', '-', 'i', 't', '.', 'd', 'e', '\0',
   /* "leprado.com", true */ 'l', 'e', 'p', 'r', 'a', 'd', 'o', '.', 'c', 'o', 'm', '\0',
+  /* "lerasenglish.com", true */ 'l', 'e', 'r', 'a', 's', 'e', 'n', 'g', 'l', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0',
   /* "lereporter.ma", true */ 'l', 'e', 'r', 'e', 'p', 'o', 'r', 't', 'e', 'r', '.', 'm', 'a', '\0',
   /* "lerku.com", true */ 'l', 'e', 'r', 'k', 'u', '.', 'c', 'o', 'm', '\0',
   /* "lernorteuropa.com", true */ 'l', 'e', 'r', 'n', 'o', 'r', 't', 'e', 'u', 'r', 'o', 'p', 'a', '.', 'c', 'o', 'm', '\0',
   /* "lernorteuropa.de", true */ 'l', 'e', 'r', 'n', 'o', 'r', 't', 'e', 'u', 'r', 'o', 'p', 'a', '.', 'd', 'e', '\0',
   /* "lernorteuropa.eu", true */ 'l', 'e', 'r', 'n', 'o', 'r', 't', 'e', 'u', 'r', 'o', 'p', 'a', '.', 'e', 'u', '\0',
   /* "lerp.me", true */ 'l', 'e', 'r', 'p', '.', 'm', 'e', '\0',
   /* "leseditionsbraquage.com", true */ 'l', 'e', 's', 'e', 'd', 'i', 't', 'i', 'o', 'n', 's', 'b', 'r', 'a', 'q', 'u', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "lesformations.net", true */ 'l', 'e', 's', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'o', 'n', 's', '.', 'n', 'e', 't', '\0',
@@ -7300,17 +7282,16 @@ static const char kSTSHostTable[] = {
   /* "linode.com", false */ 'l', 'i', 'n', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0',
   /* "linost.com", true */ 'l', 'i', 'n', 'o', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "linpx.com", true */ 'l', 'i', 'n', 'p', 'x', '.', 'c', 'o', 'm', '\0',
   /* "linqhost.nl", true */ 'l', 'i', 'n', 'q', 'h', 'o', 's', 't', '.', 'n', 'l', '\0',
   /* "lintmx.com", true */ 'l', 'i', 'n', 't', 'm', 'x', '.', 'c', 'o', 'm', '\0',
   /* "linux-admin-california.com", true */ 'l', 'i', 'n', 'u', 'x', '-', 'a', 'd', 'm', 'i', 'n', '-', 'c', 'a', 'l', 'i', 'f', 'o', 'r', 'n', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "linux.army", true */ 'l', 'i', 'n', 'u', 'x', '.', 'a', 'r', 'm', 'y', '\0',
   /* "linux.cn", true */ 'l', 'i', 'n', 'u', 'x', '.', 'c', 'n', '\0',
-  /* "linux.fi", true */ 'l', 'i', 'n', 'u', 'x', '.', 'f', 'i', '\0',
   /* "linuxandstuff.de", true */ 'l', 'i', 'n', 'u', 'x', 'a', 'n', 'd', 's', 't', 'u', 'f', 'f', '.', 'd', 'e', '\0',
   /* "linuxbabe.com", true */ 'l', 'i', 'n', 'u', 'x', 'b', 'a', 'b', 'e', '.', 'c', 'o', 'm', '\0',
   /* "linuxbierwanderung.com", true */ 'l', 'i', 'n', 'u', 'x', 'b', 'i', 'e', 'r', 'w', 'a', 'n', 'd', 'e', 'r', 'u', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "linuxcommand.ru", true */ 'l', 'i', 'n', 'u', 'x', 'c', 'o', 'm', 'm', 'a', 'n', 'd', '.', 'r', 'u', '\0',
   /* "linuxforyou.com", true */ 'l', 'i', 'n', 'u', 'x', 'f', 'o', 'r', 'y', 'o', 'u', '.', 'c', 'o', 'm', '\0',
   /* "linuxhostsupport.com", true */ 'l', 'i', 'n', 'u', 'x', 'h', 'o', 's', 't', 's', 'u', 'p', 'p', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0',
   /* "linuxlounge.net", true */ 'l', 'i', 'n', 'u', 'x', 'l', 'o', 'u', 'n', 'g', 'e', '.', 'n', 'e', 't', '\0',
   /* "linuxmonitoring.net", true */ 'l', 'i', 'n', 'u', 'x', 'm', 'o', 'n', 'i', 't', 'o', 'r', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0',
@@ -7339,16 +7320,17 @@ static const char kSTSHostTable[] = {
   /* "lithesalar.se", true */ 'l', 'i', 't', 'h', 'e', 's', 'a', 'l', 'a', 'r', '.', 's', 'e', '\0',
   /* "little.pw", true */ 'l', 'i', 't', 't', 'l', 'e', '.', 'p', 'w', '\0',
   /* "littlefreelibrary.org", true */ 'l', 'i', 't', 't', 'l', 'e', 'f', 'r', 'e', 'e', 'l', 'i', 'b', 'r', 'a', 'r', 'y', '.', 'o', 'r', 'g', '\0',
   /* "littleswitch.co.jp", true */ 'l', 'i', 't', 't', 'l', 'e', 's', 'w', 'i', 't', 'c', 'h', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "litvideoserver.de", true */ 'l', 'i', 't', 'v', 'i', 'd', 'e', 'o', 's', 'e', 'r', 'v', 'e', 'r', '.', 'd', 'e', '\0',
   /* "litz.ca", true */ 'l', 'i', 't', 'z', '.', 'c', 'a', '\0',
   /* "litzenberger.ca", true */ 'l', 'i', 't', 'z', 'e', 'n', 'b', 'e', 'r', 'g', 'e', 'r', '.', 'c', 'a', '\0',
   /* "liuboznaiko.eu", true */ 'l', 'i', 'u', 'b', 'o', 'z', 'n', 'a', 'i', 'k', 'o', '.', 'e', 'u', '\0',
+  /* "liud.im", true */ 'l', 'i', 'u', 'd', '.', 'i', 'm', '\0',
   /* "liudon.org", true */ 'l', 'i', 'u', 'd', 'o', 'n', '.', 'o', 'r', 'g', '\0',
   /* "livecards.co.uk", true */ 'l', 'i', 'v', 'e', 'c', 'a', 'r', 'd', 's', '.', 'c', 'o', '.', 'u', 'k', '\0',
   /* "livedesign.at", true */ 'l', 'i', 'v', 'e', 'd', 'e', 's', 'i', 'g', 'n', '.', 'a', 't', '\0',
   /* "liveforspeed.se", true */ 'l', 'i', 'v', 'e', 'f', 'o', 'r', 's', 'p', 'e', 'e', 'd', '.', 's', 'e', '\0',
   /* "livekaarten.be", true */ 'l', 'i', 'v', 'e', 'k', 'a', 'a', 'r', 't', 'e', 'n', '.', 'b', 'e', '\0',
   /* "livekaarten.nl", true */ 'l', 'i', 'v', 'e', 'k', 'a', 'a', 'r', 't', 'e', 'n', '.', 'n', 'l', '\0',
   /* "livekort.dk", true */ 'l', 'i', 'v', 'e', 'k', 'o', 'r', 't', '.', 'd', 'k', '\0',
   /* "livekort.se", true */ 'l', 'i', 'v', 'e', 'k', 'o', 'r', 't', '.', 's', 'e', '\0',
@@ -7371,17 +7353,16 @@ static const char kSTSHostTable[] = {
   /* "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',
   /* "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',
-  /* "loadingdeck.com", false */ 'l', 'o', 'a', 'd', 'i', 'n', 'g', 'd', 'e', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "loadlow.me", true */ 'l', 'o', 'a', 'd', 'l', 'o', 'w', '.', 'm', 'e', '\0',
   /* "loadso.me", true */ 'l', 'o', 'a', 'd', 's', 'o', '.', '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',
   /* "lobosdomain.no-ip.info", true */ 'l', 'o', 'b', 'o', 's', 'd', 'o', 'm', 'a', 'i', 'n', '.', 'n', 'o', '-', 'i', 'p', '.', 'i', 'n', 'f', 'o', '\0',
   /* "lobste.rs", true */ 'l', 'o', 'b', 's', 't', 'e', '.', 'r', 's', '\0',
@@ -7432,17 +7413,16 @@ static const char kSTSHostTable[] = {
   /* "loli.pet", true */ 'l', 'o', 'l', 'i', '.', 'p', 'e', 't', '\0',
   /* "lolicon.eu", true */ 'l', 'o', 'l', 'i', 'c', 'o', 'n', '.', 'e', 'u', '\0',
   /* "lolkot.ru", true */ 'l', 'o', 'l', 'k', 'o', 't', '.', 'r', 'u', '\0',
   /* "lolpatrol.de", true */ 'l', 'o', 'l', 'p', 'a', 't', 'r', 'o', 'l', '.', 'd', 'e', '\0',
   /* "lona.io", true */ 'l', 'o', 'n', 'a', '.', 'i', 'o', '\0',
   /* "lonasdigital.com", true */ 'l', 'o', 'n', 'a', 's', 'd', 'i', 'g', 'i', 't', 'a', 'l', '.', 'c', 'o', 'm', '\0',
   /* "london-transfers.com", true */ 'l', 'o', 'n', 'd', 'o', 'n', '-', 't', 'r', 'a', 'n', 's', 'f', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0',
   /* "london.dating", true */ 'l', 'o', 'n', 'd', 'o', 'n', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0',
-  /* "londonlanguageexchange.com", true */ 'l', 'o', 'n', 'd', 'o', 'n', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', 'e', 'x', 'c', 'h', 'a', 'n', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "lone-gunman.be", true */ 'l', 'o', 'n', 'e', '-', 'g', 'u', 'n', 'm', 'a', 'n', '.', 'b', 'e', '\0',
   /* "lonerwolf.com", true */ 'l', 'o', 'n', 'e', 'r', 'w', 'o', 'l', 'f', '.', 'c', 'o', 'm', '\0',
   /* "longboarding-ulm.de", true */ 'l', 'o', 'n', 'g', 'b', 'o', 'a', 'r', 'd', 'i', 'n', 'g', '-', 'u', 'l', 'm', '.', 'd', 'e', '\0',
   /* "longhorn.id.au", true */ 'l', 'o', 'n', 'g', 'h', 'o', 'r', 'n', '.', 'i', 'd', '.', 'a', 'u', '\0',
   /* "look-at-my.site", true */ 'l', 'o', 'o', 'k', '-', 'a', 't', '-', 'm', 'y', '.', 's', 'i', 't', 'e', '\0',
   /* "look.co.il", true */ 'l', 'o', 'o', 'k', '.', 'c', 'o', '.', 'i', 'l', '\0',
   /* "lookasik.eu", true */ 'l', 'o', 'o', 'k', 'a', 's', 'i', 'k', '.', 'e', 'u', '\0',
   /* "lookyman.net", true */ 'l', 'o', 'o', 'k', 'y', 'm', 'a', 'n', '.', 'n', 'e', 't', '\0',
@@ -7575,17 +7555,16 @@ static const char kSTSHostTable[] = {
   /* "maartenterpstra.xyz", true */ 'm', 'a', 'a', 'r', 't', 'e', 'n', 't', 'e', 'r', 'p', 's', 't', 'r', 'a', '.', 'x', 'y', 'z', '\0',
   /* "mac-torrents.me", true */ 'm', 'a', 'c', '-', 't', 'o', 'r', 'r', 'e', 'n', 't', 's', '.', 'm', 'e', '\0',
   /* "mac1.net", true */ 'm', 'a', 'c', '1', '.', 'n', 'e', 't', '\0',
   /* "macaque.io", false */ 'm', 'a', 'c', 'a', 'q', 'u', 'e', '.', 'i', 'o', '\0',
   /* "macdj.tk", true */ 'm', 'a', 'c', 'd', 'j', '.', 't', 'k', '\0',
   /* "mach-politik.ch", true */ 'm', 'a', 'c', 'h', '-', 'p', 'o', 'l', 'i', 't', 'i', 'k', '.', 'c', 'h', '\0',
   /* "machbach.com", true */ 'm', 'a', 'c', 'h', 'b', 'a', 'c', 'h', '.', 'c', 'o', 'm', '\0',
   /* "machbach.net", true */ 'm', 'a', 'c', 'h', 'b', 'a', 'c', 'h', '.', 'n', 'e', 't', '\0',
-  /* "machon.biz", false */ 'm', 'a', 'c', 'h', 'o', 'n', '.', 'b', 'i', 'z', '\0',
   /* "machtweb.de", true */ 'm', 'a', 'c', 'h', 't', 'w', 'e', 'b', '.', 'd', 'e', '\0',
   /* "macinyasha.net", true */ 'm', 'a', 'c', 'i', 'n', 'y', 'a', 's', 'h', 'a', '.', 'n', 'e', 't', '\0',
   /* "macker.io", true */ 'm', 'a', 'c', 'k', 'e', 'r', '.', 'i', 'o', '\0',
   /* "maclemon.at", true */ 'm', 'a', 'c', 'l', 'e', 'm', 'o', 'n', '.', 'a', 't', '\0',
   /* "macleod.io", true */ 'm', 'a', 'c', 'l', 'e', 'o', 'd', '.', 'i', 'o', '\0',
   /* "macnemo.de", true */ 'm', 'a', 'c', 'n', 'e', 'm', 'o', '.', 'd', 'e', '\0',
   /* "maco.org.uk", true */ 'm', 'a', 'c', 'o', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "macosxfilerecovery.com", true */ 'm', 'a', 'c', 'o', 's', 'x', 'f', 'i', 'l', 'e', 'r', 'e', 'c', 'o', 'v', 'e', 'r', 'y', '.', 'c', 'o', 'm', '\0',
@@ -7773,17 +7752,16 @@ static const char kSTSHostTable[] = {
   /* "martinkup.cz", true */ 'm', 'a', 'r', 't', 'i', 'n', 'k', 'u', 'p', '.', 'c', 'z', '\0',
   /* "martinkus.eu", true */ 'm', 'a', 'r', 't', 'i', 'n', 'k', 'u', 's', '.', 'e', 'u', '\0',
   /* "martinmuc.de", true */ 'm', 'a', 'r', 't', 'i', 'n', 'm', 'u', 'c', '.', 'd', 'e', '\0',
   /* "martinp.no", true */ 'm', 'a', 'r', 't', 'i', 'n', 'p', '.', 'n', 'o', '\0',
   /* "martinreed.net", true */ 'm', 'a', 'r', 't', 'i', 'n', 'r', 'e', 'e', 'd', '.', 'n', 'e', 't', '\0',
   /* "martins.im", true */ 'm', 'a', 'r', 't', 'i', 'n', 's', '.', 'i', 'm', '\0',
   /* "maru-life.com", true */ 'm', 'a', 'r', 'u', '-', 'l', 'i', 'f', 'e', '.', 'c', 'o', 'm', '\0',
   /* "maruhoi.com", true */ 'm', 'a', 'r', 'u', 'h', 'o', 'i', '.', 'c', 'o', 'm', '\0',
-  /* "marumagic.com", true */ 'm', 'a', 'r', 'u', 'm', 'a', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "masa-yoga.com", true */ 'm', 'a', 's', 'a', '-', 'y', 'o', 'g', 'a', '.', 'c', 'o', 'm', '\0',
   /* "masa.li", true */ 'm', 'a', 's', 'a', '.', 'l', 'i', '\0',
   /* "mascosolutions.com", true */ 'm', 'a', 's', 'c', 'o', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0',
   /* "masiniunelte.store.ro", true */ 'm', 'a', 's', 'i', 'n', 'i', 'u', 'n', 'e', 'l', 't', 'e', '.', 's', 't', 'o', 'r', 'e', '.', 'r', 'o', '\0',
   /* "massdrop.com", true */ 'm', 'a', 's', 's', 'd', 'r', 'o', 'p', '.', 'c', 'o', 'm', '\0',
   /* "masse.org", true */ 'm', 'a', 's', 's', 'e', '.', 'o', 'r', 'g', '\0',
   /* "massivum.de", false */ 'm', 'a', 's', 's', 'i', 'v', 'u', 'm', '.', 'd', 'e', '\0',
   /* "mastellone.us", true */ 'm', 'a', 's', 't', 'e', 'l', 'l', 'o', 'n', 'e', '.', 'u', 's', '\0',
@@ -8022,17 +8000,16 @@ static const char kSTSHostTable[] = {
   /* "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',
   /* "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',
   /* "mevs.cz", true */ 'm', 'e', 'v', 's', '.', 'c', 'z', '\0',
   /* "mexicansbook.ru", false */ 'm', 'e', 'x', 'i', 'c', 'a', 'n', 's', 'b', 'o', 'o', 'k', '.', 'r', 'u', '\0',
   /* "meyeraviation.com", true */ 'm', 'e', 'y', 'e', 'r', 'a', 'v', 'i', 'a', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0',
-  /* "meyercloud.de", true */ 'm', 'e', 'y', 'e', 'r', 'c', 'l', 'o', 'u', 'd', '.', 'd', 'e', '\0',
   /* "mfiles.pl", true */ 'm', 'f', 'i', 'l', 'e', 's', '.', 'p', 'l', '\0',
   /* "mfxbe.de", true */ 'm', 'f', 'x', 'b', 'e', '.', 'd', 'e', '\0',
   /* "mgdigital.fr", true */ 'm', 'g', 'd', 'i', 'g', 'i', 't', 'a', 'l', '.', 'f', 'r', '\0',
   /* "mghiorzi.com.ar", true */ 'm', 'g', 'h', 'i', 'o', 'r', 'z', 'i', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0',
   /* "mh-bloemen.co.jp", true */ 'm', 'h', '-', 'b', 'l', 'o', 'e', 'm', 'e', 'n', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "mhdsyarif.com", false */ 'm', 'h', 'd', 's', 'y', 'a', 'r', 'i', 'f', '.', 'c', 'o', 'm', '\0',
   /* "mheistermann.de", true */ 'm', 'h', 'e', 'i', 's', 't', 'e', 'r', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0',
   /* "mhertel.com", false */ 'm', 'h', 'e', 'r', 't', 'e', 'l', '.', 'c', 'o', 'm', '\0',
@@ -8082,16 +8059,17 @@ static const char kSTSHostTable[] = {
   /* "mijnstembureau.nl", true */ 'm', 'i', 'j', 'n', 's', 't', 'e', 'm', 'b', 'u', 'r', 'e', 'a', 'u', '.', 'n', 'l', '\0',
   /* "mijntransacties.nl", true */ 'm', 'i', 'j', 'n', 't', 'r', 'a', 'n', 's', 'a', 'c', 't', 'i', 'e', 's', '.', 'n', 'l', '\0',
   /* "mikadesign.se", false */ 'm', 'i', 'k', 'a', 'd', 'e', 's', 'i', 'g', 'n', '.', 's', 'e', '\0',
   /* "mikadoe.nl", true */ 'm', 'i', 'k', 'a', 'd', 'o', 'e', '.', 'n', 'l', '\0',
   /* "mikaela.info", true */ 'm', 'i', 'k', 'a', 'e', 'l', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "mikalikes.men", true */ 'm', 'i', 'k', 'a', 'l', 'i', 'k', 'e', 's', '.', 'm', 'e', 'n', '\0',
   /* "mike-bland.com", true */ 'm', 'i', 'k', 'e', '-', 'b', 'l', 'a', 'n', 'd', '.', 'c', 'o', 'm', '\0',
   /* "mikecb.org", true */ 'm', 'i', 'k', 'e', 'c', 'b', '.', 'o', 'r', 'g', '\0',
+  /* "mikek.work", true */ 'm', 'i', 'k', 'e', 'k', '.', 'w', 'o', 'r', 'k', '\0',
   /* "mikepair.net", true */ 'm', 'i', 'k', 'e', 'p', 'a', 'i', 'r', '.', 'n', 'e', 't', '\0',
   /* "miketabor.com", true */ 'm', 'i', 'k', 'e', 't', 'a', 'b', 'o', 'r', '.', 'c', 'o', 'm', '\0',
   /* "mikewest.org", true */ 'm', 'i', 'k', 'e', 'w', 'e', 's', 't', '.', 'o', 'r', 'g', '\0',
   /* "mikewillia.ms", true */ 'm', 'i', 'k', 'e', 'w', 'i', 'l', 'l', 'i', 'a', '.', 'm', 's', '\0',
   /* "mikeybot.com", true */ 'm', 'i', 'k', 'e', 'y', 'b', 'o', 't', '.', 'c', 'o', 'm', '\0',
   /* "mikii.club", true */ 'm', 'i', 'k', 'i', 'i', '.', 'c', 'l', 'u', 'b', '\0',
   /* "miknight.com", true */ 'm', 'i', 'k', 'n', 'i', 'g', 'h', 't', '.', 'c', 'o', 'm', '\0',
   /* "mikrom.cz", true */ 'm', 'i', 'k', 'r', 'o', 'm', '.', 'c', 'z', '\0',
@@ -8107,17 +8085,16 @@ static const char kSTSHostTable[] = {
   /* "milonga.tips", true */ 'm', 'i', 'l', 'o', 'n', 'g', 'a', '.', 't', 'i', 'p', 's', '\0',
   /* "miluriel.de", true */ 'm', 'i', 'l', 'u', 'r', 'i', 'e', 'l', '.', 'd', 'e', '\0',
   /* "mim.properties", true */ 'm', 'i', 'm', '.', 'p', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's', '\0',
   /* "mimeit.de", true */ 'm', 'i', 'm', 'e', 'i', 't', '.', 'd', 'e', '\0',
   /* "mimemo.io", true */ 'm', 'i', 'm', 'e', 'm', 'o', '.', 'i', 'o', '\0',
   /* "mimovrste.com", true */ 'm', 'i', 'm', 'o', 'v', 'r', 's', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "minami.xyz", true */ 'm', 'i', 'n', 'a', 'm', 'i', '.', 'x', 'y', 'z', '\0',
   /* "mind-hochschul-netzwerk.de", true */ 'm', 'i', 'n', 'd', '-', 'h', 'o', 'c', 'h', 's', 'c', 'h', 'u', 'l', '-', 'n', 'e', 't', 'z', 'w', 'e', 'r', 'k', '.', 'd', 'e', '\0',
-  /* "mind-moves.es", true */ 'm', 'i', 'n', 'd', '-', 'm', 'o', 'v', 'e', 's', '.', 'e', 's', '\0',
   /* "mind.sh", true */ 'm', 'i', 'n', 'd', '.', 's', 'h', '\0',
   /* "mindbodycontinuum.com", true */ 'm', 'i', 'n', 'd', 'b', 'o', 'd', 'y', 'c', 'o', 'n', 't', 'i', 'n', 'u', 'u', 'm', '.', 'c', 'o', 'm', '\0',
   /* "mindcoding.ro", true */ 'm', 'i', 'n', 'd', 'c', 'o', 'd', 'i', 'n', 'g', '.', 'r', 'o', '\0',
   /* "mindcraft.ga", true */ 'm', 'i', 'n', 'd', 'c', 'r', 'a', 'f', 't', '.', 'g', 'a', '\0',
   /* "mindwerks.net", true */ 'm', 'i', 'n', 'd', 'w', 'e', 'r', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "minecraft-forum.cf", true */ 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 'f', 'o', 'r', 'u', 'm', '.', 'c', 'f', '\0',
   /* "minecraft-forum.ga", true */ 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 'f', 'o', 'r', 'u', 'm', '.', 'g', 'a', '\0',
   /* "minecraft-forum.gq", true */ 'm', 'i', 'n', 'e', 'c', 'r', 'a', 'f', 't', '-', 'f', 'o', 'r', 'u', 'm', '.', 'g', 'q', '\0',
@@ -8157,17 +8134,16 @@ static const char kSTSHostTable[] = {
   /* "minux.info", true */ 'm', 'i', 'n', 'u', 'x', '.', 'i', 'n', 'f', 'o', '\0',
   /* "mipiaci.co.nz", true */ 'm', 'i', 'p', 'i', 'a', 'c', 'i', '.', 'c', 'o', '.', 'n', 'z', '\0',
   /* "mipiaci.com.au", true */ 'm', 'i', 'p', 'i', 'a', 'c', 'i', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "mipla.ch", true */ 'm', 'i', 'p', 'l', 'a', '.', 'c', 'h', '\0',
   /* "miragrow.com", true */ 'm', 'i', 'r', 'a', 'g', 'r', 'o', 'w', '.', 'c', 'o', 'm', '\0',
   /* "miraidenshi.com", true */ 'm', 'i', 'r', 'a', 'i', 'd', 'e', 'n', 's', 'h', 'i', '.', 'c', 'o', 'm', '\0',
   /* "mireservaonline.es", true */ 'm', 'i', 'r', 'e', 's', 'e', 'r', 'v', 'a', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'e', 's', '\0',
   /* "mirkofranz.de", true */ 'm', 'i', 'r', 'k', 'o', 'f', 'r', 'a', 'n', 'z', '.', 'd', 'e', '\0',
-  /* "mirodasilva.be", true */ 'm', 'i', 'r', 'o', 'd', 'a', 's', 'i', 'l', 'v', 'a', '.', 'b', 'e', '\0',
   /* "mironet.cz", true */ 'm', 'i', 'r', 'o', 'n', 'e', 't', '.', 'c', 'z', '\0',
   /* "mirtes.cz", true */ 'm', 'i', 'r', 't', 'e', 's', '.', 'c', 'z', '\0',
   /* "mirucon.com", true */ 'm', 'i', 'r', 'u', 'c', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "misakiya.co.jp", true */ 'm', 'i', 's', 'a', 'k', 'i', 'y', 'a', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "misconfigured.io", true */ 'm', 'i', 's', 'c', 'o', 'n', 'f', 'i', 'g', 'u', 'r', 'e', 'd', '.', 'i', 'o', '\0',
   /* "misiondelosangeles-mailing.com", true */ 'm', 'i', 's', 'i', 'o', 'n', 'd', 'e', 'l', 'o', 's', 'a', 'n', 'g', 'e', 'l', 'e', 's', '-', 'm', 'a', 'i', 'l', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "miskatonic.org", true */ 'm', 'i', 's', 'k', 'a', 't', 'o', 'n', 'i', 'c', '.', 'o', 'r', 'g', '\0',
   /* "miss-inventory.co.uk", true */ 'm', 'i', 's', 's', '-', 'i', 'n', 'v', 'e', 'n', 't', 'o', 'r', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0',
@@ -8204,16 +8180,17 @@ static const char kSTSHostTable[] = {
   /* "mkcert.org", true */ 'm', 'k', 'c', 'e', 'r', 't', '.', 'o', 'r', 'g', '\0',
   /* "mkes.com", false */ 'm', 'k', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "mkoppmann.at", true */ 'm', 'k', 'o', 'p', 'p', 'm', 'a', 'n', 'n', '.', 'a', 't', '\0',
   /* "mkp-deutschland.de", true */ 'm', 'k', 'p', '-', 'd', 'e', 'u', 't', 's', 'c', 'h', 'l', 'a', 'n', 'd', '.', 'd', 'e', '\0',
   /* "mkpef.org", true */ 'm', 'k', 'p', 'e', 'f', '.', 'o', 'r', 'g', '\0',
   /* "mktemp.org", true */ 'm', 'k', 't', 'e', 'm', 'p', '.', 'o', 'r', 'g', '\0',
   /* "mkuznets.com", true */ 'm', 'k', 'u', 'z', 'n', 'e', 't', 's', '.', 'c', 'o', 'm', '\0',
   /* "mkw.st", true */ 'm', 'k', 'w', '.', 's', 't', '\0',
+  /* "mlcdn.co", true */ 'm', 'l', 'c', 'd', 'n', '.', 'c', 'o', '\0',
   /* "mlcnfriends.com", true */ 'm', 'l', 'c', 'n', 'f', 'r', 'i', 'e', 'n', 'd', 's', '.', 'c', 'o', 'm', '\0',
   /* "mlemay.com", true */ 'm', 'l', 'e', 'm', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "mlp.ee", true */ 'm', 'l', 'p', '.', 'e', 'e', '\0',
   /* "mlsrv.de", true */ 'm', 'l', 's', 'r', 'v', '.', 'd', 'e', '\0',
   /* "mm13.at", true */ 'm', 'm', '1', '3', '.', 'a', 't', '\0',
   /* "mm404.com", true */ 'm', 'm', '4', '0', '4', '.', 'c', 'o', 'm', '\0',
   /* "mma-acareporting.com", true */ 'm', 'm', 'a', '-', 'a', 'c', 'a', 'r', 'e', 'p', 'o', 'r', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "mmalisz.com", true */ 'm', 'm', 'a', 'l', 'i', 's', 'z', '.', 'c', 'o', 'm', '\0',
@@ -8659,17 +8636,17 @@ static const char kSTSHostTable[] = {
   /* "neko.li", true */ 'n', 'e', 'k', 'o', '.', 'l', 'i', '\0',
   /* "nekomimi.pl", true */ 'n', 'e', 'k', 'o', 'm', 'i', 'm', 'i', '.', 'p', 'l', '\0',
   /* "nekosc.com", true */ 'n', 'e', 'k', 'o', 's', 'c', '.', 'c', 'o', 'm', '\0',
   /* "nelhage.com", true */ 'n', 'e', 'l', 'h', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0',
   /* "nemecl.eu", true */ 'n', 'e', 'm', 'e', 'c', 'l', '.', 'e', 'u', '\0',
   /* "nemo.run", true */ 'n', 'e', 'm', 'o', '.', 'r', 'u', 'n', '\0',
   /* "nemunai.re", true */ 'n', 'e', 'm', 'u', 'n', 'a', 'i', '.', 'r', 'e', '\0',
   /* "neo19.com", true */ 'n', 'e', 'o', '1', '9', '.', 'c', 'o', 'm', '\0',
-  /* "neo2shyalien.eu", true */ 'n', 'e', 'o', '2', 's', 'h', 'y', 'a', 'l', 'i', 'e', 'n', '.', 'e', 'u', '\0',
+  /* "neo2shyalien.eu", false */ 'n', 'e', 'o', '2', 's', 'h', 'y', 'a', 'l', 'i', 'e', 'n', '.', 'e', 'u', '\0',
   /* "neoani.me", true */ 'n', 'e', 'o', 'a', 'n', 'i', '.', 'm', 'e', '\0',
   /* "neons.org", true */ 'n', 'e', 'o', 'n', 's', '.', 'o', 'r', 'g', '\0',
   /* "neophilus.net", true */ 'n', 'e', 'o', 'p', 'h', 'i', 'l', 'u', 's', '.', 'n', 'e', 't', '\0',
   /* "neosolution.ca", true */ 'n', 'e', 'o', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', '.', 'c', 'a', '\0',
   /* "neoxcrf.com", true */ 'n', 'e', 'o', 'x', 'c', 'r', 'f', '.', 'c', 'o', 'm', '\0',
   /* "nephy.jp", true */ 'n', 'e', 'p', 'h', 'y', '.', 'j', 'p', '\0',
   /* "nercp.org.uk", true */ 'n', 'e', 'r', 'c', 'p', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0',
   /* "nerd42.de", true */ 'n', 'e', 'r', 'd', '4', '2', '.', 'd', 'e', '\0',
@@ -8689,22 +8666,22 @@ static const char kSTSHostTable[] = {
   /* "netba.net", true */ 'n', 'e', 't', 'b', 'a', '.', 'n', 'e', 't', '\0',
   /* "netbank.com.au", true */ 'n', 'e', 't', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "netbrief.ml", true */ 'n', 'e', 't', 'b', 'r', 'i', 'e', 'f', '.', 'm', 'l', '\0',
   /* "netbulls.io", true */ 'n', 'e', 't', 'b', 'u', 'l', 'l', 's', '.', 'i', 'o', '\0',
   /* "netconnect.at", true */ 'n', 'e', 't', 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'a', 't', '\0',
   /* "netcoolusers.org", true */ 'n', 'e', 't', 'c', 'o', 'o', 'l', 'u', 's', 'e', 'r', 's', '.', 'o', 'r', 'g', '\0',
   /* "netera.se", true */ 'n', 'e', 't', 'e', 'r', 'a', '.', 's', 'e', '\0',
   /* "netfs.pl", false */ 'n', 'e', 't', 'f', 's', '.', 'p', 'l', '\0',
+  /* "netfxharmonics.com", false */ 'n', 'e', 't', 'f', 'x', 'h', 'a', 'r', 'm', 'o', 'n', 'i', 'c', 's', '.', 'c', 'o', 'm', '\0',
   /* "nethackwiki.com", true */ 'n', 'e', 't', 'h', 'a', 'c', 'k', 'w', 'i', 'k', 'i', '.', 'c', 'o', 'm', '\0',
   /* "nethruster.com", true */ 'n', 'e', 't', 'h', 'r', 'u', 's', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "netica.fr", true */ 'n', 'e', 't', 'i', 'c', 'a', '.', 'f', 'r', '\0',
   /* "netloanusa.com", true */ 'n', 'e', 't', 'l', 'o', 'a', 'n', 'u', 's', 'a', '.', 'c', 'o', 'm', '\0',
   /* "netlocal.ru", true */ 'n', 'e', 't', 'l', 'o', 'c', 'a', 'l', '.', 'r', 'u', '\0',
-  /* "netmagik.com", true */ 'n', 'e', 't', 'm', 'a', 'g', 'i', 'k', '.', 'c', 'o', 'm', '\0',
   /* "netmazk.net", true */ 'n', 'e', 't', 'm', 'a', 'z', 'k', '.', 'n', 'e', 't', '\0',
   /* "netnodes.net", true */ 'n', 'e', 't', 'n', 'o', 'd', 'e', 's', '.', 'n', 'e', 't', '\0',
   /* "netprofile.com.au", true */ 'n', 'e', 't', 'p', 'r', 'o', 'f', 'i', 'l', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "netraising.com", true */ 'n', 'e', 't', 'r', 'a', 'i', 's', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0',
   /* "netrelay.email", true */ 'n', 'e', 't', 'r', 'e', 'l', 'a', 'y', '.', 'e', 'm', 'a', 'i', 'l', '\0',
   /* "netrider.net.au", false */ 'n', 'e', 't', 'r', 'i', 'd', 'e', 'r', '.', 'n', 'e', 't', '.', 'a', 'u', '\0',
   /* "netronix.be", true */ 'n', 'e', 't', 'r', 'o', 'n', 'i', 'x', '.', 'b', 'e', '\0',
   /* "netsigna.de", true */ 'n', 'e', 't', 's', 'i', 'g', 'n', 'a', '.', 'd', 'e', '\0',
@@ -8854,27 +8831,27 @@ static const char kSTSHostTable[] = {
   /* "niouininon.eu", true */ 'n', 'i', 'o', 'u', 'i', 'n', 'i', 'n', 'o', 'n', '.', 'e', 'u', '\0',
   /* "nippon-oku.com", true */ 'n', 'i', 'p', 'p', 'o', 'n', '-', 'o', 'k', 'u', '.', 'c', 'o', 'm', '\0',
   /* "nippon.fr", true */ 'n', 'i', 'p', 'p', 'o', 'n', '.', 'f', 'r', '\0',
   /* "nirada.info", true */ 'n', 'i', 'r', 'a', 'd', 'a', '.', 'i', 'n', 'f', 'o', '\0',
   /* "nitrix.me", true */ 'n', 'i', 't', 'r', 'i', 'x', '.', 'm', 'e', '\0',
   /* "nitropur.com", true */ 'n', 'i', 't', 'r', 'o', 'p', 'u', 'r', '.', 'c', 'o', 'm', '\0',
   /* "nitropur.de", true */ 'n', 'i', 't', 'r', 'o', 'p', 'u', 'r', '.', 'd', 'e', '\0',
   /* "nivi.ca", true */ 'n', 'i', 'v', 'i', '.', 'c', 'a', '\0',
+  /* "nixien.fr", true */ 'n', 'i', 'x', 'i', 'e', 'n', '.', 'f', 'r', '\0',
   /* "nixmag.net", true */ 'n', 'i', 'x', 'm', 'a', 'g', '.', 'n', 'e', 't', '\0',
   /* "nkadvertising.online", true */ 'n', 'k', 'a', 'd', 'v', 'e', 'r', 't', 'i', 's', 'i', 'n', 'g', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0',
   /* "nl-ix.net", true */ 'n', 'l', '-', 'i', 'x', '.', 'n', 'e', 't', '\0',
   /* "nl.search.yahoo.com", false */ 'n', 'l', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "nlegall.fr", true */ 'n', 'l', 'e', 'g', 'a', 'l', 'l', '.', 'f', 'r', '\0',
   /* "nmd.so", true */ 'n', 'm', 'd', '.', 's', 'o', '\0',
   /* "nmsnj.com", true */ 'n', 'm', 's', 'n', 'j', '.', 'c', 'o', 'm', '\0',
   /* "nnote.net", true */ 'n', 'n', 'o', 't', 'e', '.', 'n', 'e', 't', '\0',
   /* "nnqc.nl", true */ 'n', 'n', 'q', 'c', '.', 'n', 'l', '\0',
   /* "no.search.yahoo.com", false */ 'n', 'o', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
-  /* "nobly.de", true */ 'n', 'o', 'b', 'l', 'y', '.', 'd', 'e', '\0',
   /* "nocit.dk", true */ 'n', 'o', 'c', 'i', 't', '.', 'd', 'k', '\0',
   /* "noclegi-online.pl", true */ 'n', 'o', 'c', 'l', 'e', 'g', 'i', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'p', 'l', '\0',
   /* "nodecompat.com", true */ 'n', 'o', 'd', 'e', 'c', 'o', 'm', 'p', 'a', 't', '.', 'c', 'o', 'm', '\0',
   /* "nodelia.com", true */ 'n', 'o', 'd', 'e', 'l', 'i', 'a', '.', 'c', 'o', 'm', '\0',
   /* "nodespin.com", true */ 'n', 'o', 'd', 'e', 's', 'p', 'i', 'n', '.', 'c', 'o', 'm', '\0',
   /* "nodi.at", true */ 'n', 'o', 'd', 'i', '.', 'a', 't', '\0',
   /* "noedidacticos.com", true */ 'n', 'o', 'e', 'd', 'i', 'd', 'a', 'c', 't', 'i', 'c', 'o', 's', '.', 'c', 'o', 'm', '\0',
   /* "noemax.com", true */ 'n', 'o', 'e', 'm', 'a', 'x', '.', 'c', 'o', 'm', '\0',
@@ -9230,30 +9207,28 @@ static const char kSTSHostTable[] = {
   /* "osm.is", true */ 'o', 's', 'm', '.', 'i', 's', '\0',
   /* "osmanlitorunu.com", true */ 'o', 's', 'm', 'a', 'n', 'l', 'i', 't', 'o', 'r', 'u', 'n', 'u', '.', 'c', 'o', 'm', '\0',
   /* "osmosis.org", true */ 'o', 's', 'm', 'o', 's', 'i', 's', '.', 'o', 'r', 'g', '\0',
   /* "osp.cx", true */ 'o', 's', 'p', '.', 'c', 'x', '\0',
   /* "osquery.io", true */ 'o', 's', 'q', 'u', 'e', 'r', 'y', '.', 'i', 'o', '\0',
   /* "ostan-collections.net", true */ 'o', 's', 't', 'a', 'n', '-', 'c', 'o', 'l', 'l', 'e', 'c', 't', 'i', 'o', 'n', 's', '.', 'n', 'e', 't', '\0',
   /* "ostendorf.com", true */ 'o', 's', 't', 'e', 'n', 'd', 'o', 'r', 'f', '.', 'c', 'o', 'm', '\0',
   /* "osterkraenzchen.de", true */ 'o', 's', 't', 'e', 'r', 'k', 'r', 'a', 'e', 'n', 'z', 'c', 'h', 'e', 'n', '.', 'd', 'e', '\0',
-  /* "osticketawesome.com", true */ 'o', 's', 't', 'i', 'c', 'k', 'e', 't', 'a', 'w', 'e', 's', 'o', 'm', 'e', '.', 'c', 'o', 'm', '\0',
   /* "ostr.io", true */ 'o', 's', 't', 'r', '.', 'i', 'o', '\0',
   /* "osusume-houhou.com", true */ 'o', 's', 'u', 's', 'u', 'm', 'e', '-', 'h', 'o', 'u', 'h', 'o', 'u', '.', 'c', 'o', 'm', '\0',
   /* "oszri.hu", true */ 'o', 's', 'z', 'r', 'i', '.', 'h', 'u', '\0',
   /* "otakubox.de", true */ 'o', 't', 'a', 'k', 'u', 'b', 'o', 'x', '.', 'd', 'e', '\0',
   /* "otakurepublic.com", true */ 'o', 't', 'a', 'k', 'u', 'r', 'e', 'p', 'u', 'b', 'l', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "otchecker.com", true */ 'o', 't', 'c', 'h', 'e', 'c', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "oticasvisao.net.br", true */ 'o', 't', 'i', 'c', 'a', 's', 'v', 'i', 's', 'a', 'o', '.', 'n', 'e', 't', '.', 'b', 'r', '\0',
   /* "otoy.com", true */ 'o', 't', 'o', 'y', '.', 'c', 'o', 'm', '\0',
   /* "otpsmart.com.ua", true */ 'o', 't', 'p', 's', 'm', 'a', 'r', 't', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0',
   /* "otrm.de", true */ 'o', 't', 'r', 'm', '.', 'd', 'e', '\0',
   /* "otrsdemo.hu", true */ 'o', 't', 'r', 's', 'd', 'e', 'm', 'o', '.', 'h', 'u', '\0',
   /* "ottoproject.io", true */ 'o', 't', 't', 'o', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'i', 'o', '\0',
-  /* "otvaracie-hodiny.sk", true */ 'o', 't', 'v', 'a', 'r', 'a', 'c', 'i', 'e', '-', 'h', 'o', 'd', 'i', 'n', 'y', '.', 's', 'k', '\0',
   /* "otya.me", true */ 'o', 't', 'y', 'a', '.', 'm', 'e', '\0',
   /* "ouaibe.qc.ca", true */ 'o', 'u', 'a', 'i', 'b', 'e', '.', 'q', 'c', '.', 'c', 'a', '\0',
   /* "ourchoice2016.com", true */ 'o', 'u', 'r', 'c', 'h', 'o', 'i', 'c', 'e', '2', '0', '1', '6', '.', 'c', 'o', 'm', '\0',
   /* "ourcloud.at", true */ 'o', 'u', 'r', 'c', 'l', 'o', 'u', 'd', '.', 'a', 't', '\0',
   /* "ourcodinglives.com", true */ 'o', 'u', 'r', 'c', 'o', 'd', 'i', 'n', 'g', 'l', 'i', 'v', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "ourevents.net", true */ 'o', 'u', 'r', 'e', 'v', 'e', 'n', 't', 's', '.', 'n', 'e', 't', '\0',
   /* "outgress.com", true */ 'o', 'u', 't', 'g', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "outline.ski", true */ 'o', 'u', 't', 'l', 'i', 'n', 'e', '.', 's', 'k', 'i', '\0',
@@ -9309,16 +9284,17 @@ static const char kSTSHostTable[] = {
   /* "palava.tv", true */ 'p', 'a', 'l', 'a', 'v', 'a', '.', 't', 'v', '\0',
   /* "pamplona.tv", true */ 'p', 'a', 'm', 'p', 'l', 'o', 'n', 'a', '.', 't', 'v', '\0',
   /* "pan.digital", true */ 'p', 'a', 'n', '.', 'd', 'i', 'g', 'i', 't', 'a', 'l', '\0',
   /* "panamaequity.com", false */ 'p', 'a', 'n', 'a', 'm', 'a', 'e', 'q', 'u', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "panamateakforestry.com", true */ 'p', 'a', 'n', 'a', 'm', 'a', 't', 'e', 'a', 'k', 'f', 'o', 'r', 'e', 's', 't', 'r', 'y', '.', 'c', 'o', 'm', '\0',
   /* "panaxis.ch", true */ 'p', 'a', 'n', 'a', 'x', 'i', 's', '.', 'c', 'h', '\0',
   /* "pandoraflora.com", true */ 'p', 'a', 'n', 'd', 'o', 'r', 'a', 'f', 'l', 'o', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "pandymic.com", true */ 'p', 'a', 'n', 'd', 'y', 'm', 'i', 'c', '.', 'c', 'o', 'm', '\0',
+  /* "panelomix.net", true */ 'p', 'a', 'n', 'e', 'l', 'o', 'm', 'i', 'x', '.', 'n', 'e', 't', '\0',
   /* "paneu.de", true */ 'p', 'a', 'n', 'e', 'u', '.', 'd', 'e', '\0',
   /* "panmetro.com", true */ 'p', 'a', 'n', 'm', 'e', 't', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "panni.me", false */ 'p', 'a', 'n', 'n', 'i', '.', 'm', 'e', '\0',
   /* "panoti.com", false */ 'p', 'a', 'n', 'o', 't', 'i', '.', 'c', 'o', 'm', '\0',
   /* "pansu.space", true */ 'p', 'a', 'n', 's', 'u', '.', 's', 'p', 'a', 'c', 'e', '\0',
   /* "panthur.com.au", false */ 'p', 'a', 'n', 't', 'h', 'u', 'r', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0',
   /* "pantou.org", false */ 'p', 'a', 'n', 't', 'o', 'u', '.', 'o', 'r', 'g', '\0',
   /* "pap.la", false */ 'p', 'a', 'p', '.', 'l', 'a', '\0',
@@ -9350,16 +9326,17 @@ static const char kSTSHostTable[] = {
   /* "parlamento.gub.uy", true */ 'p', 'a', 'r', 'l', 'a', 'm', 'e', 'n', 't', 'o', '.', 'g', 'u', 'b', '.', 'u', 'y', '\0',
   /* "parleu2016.nl", true */ 'p', 'a', 'r', 'l', 'e', 'u', '2', '0', '1', '6', '.', 'n', 'l', '\0',
   /* "parleur.net", true */ 'p', 'a', 'r', 'l', 'e', 'u', 'r', '.', 'n', 'e', 't', '\0',
   /* "parolu.io", true */ 'p', 'a', 'r', 'o', 'l', 'u', '.', 'i', 'o', '\0',
   /* "parsemail.org", true */ 'p', 'a', 'r', 's', 'e', 'm', 'a', 'i', 'l', '.', 'o', 'r', 'g', '\0',
   /* "parser.nu", true */ 'p', 'a', 'r', 's', 'e', 'r', '.', 'n', 'u', '\0',
   /* "partecipa.tn.it", true */ 'p', 'a', 'r', 't', 'e', 'c', 'i', 'p', 'a', '.', 't', 'n', '.', 'i', 't', '\0',
   /* "partiono.com", true */ 'p', 'a', 'r', 't', 'i', 'o', 'n', 'o', '.', 'c', 'o', 'm', '\0',
+  /* "partirkyoto.jp", true */ 'p', 'a', 'r', 't', 'i', 'r', 'k', 'y', 'o', 't', 'o', '.', 'j', 'p', '\0',
   /* "partnerbeam.com", true */ 'p', 'a', 'r', 't', 'n', 'e', 'r', 'b', 'e', 'a', 'm', '.', 'c', 'o', 'm', '\0',
   /* "partnercardservices.com", true */ 'p', 'a', 'r', 't', 'n', 'e', 'r', 'c', 'a', 'r', 'd', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "partnersfcu.org", true */ 'p', 'a', 'r', 't', 'n', 'e', 'r', 's', 'f', 'c', 'u', '.', 'o', 'r', 'g', '\0',
   /* "partou.de", true */ 'p', 'a', 'r', 't', 'o', 'u', '.', 'd', 'e', '\0',
   /* "partyhaus.ovh", true */ 'p', 'a', 'r', 't', 'y', 'h', 'a', 'u', 's', '.', 'o', 'v', 'h', '\0',
   /* "partyvan.eu", true */ 'p', 'a', 'r', 't', 'y', 'v', 'a', 'n', '.', 'e', 'u', '\0',
   /* "partyvan.io", true */ 'p', 'a', 'r', 't', 'y', 'v', 'a', 'n', '.', 'i', 'o', '\0',
   /* "pasadenapooch.org", true */ 'p', 'a', 's', 'a', 'd', 'e', 'n', 'a', 'p', 'o', 'o', 'c', 'h', '.', 'o', 'r', 'g', '\0',
@@ -9391,16 +9368,17 @@ static const char kSTSHostTable[] = {
   /* "paternitydnatest.com", true */ 'p', 'a', 't', 'e', 'r', 'n', 'i', 't', 'y', 'd', 'n', 'a', 't', 'e', 's', 't', '.', 'c', 'o', 'm', '\0',
   /* "patflix.com", true */ 'p', 'a', 't', 'f', 'l', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "patfs.com", true */ 'p', 'a', 't', 'f', 's', '.', 'c', 'o', 'm', '\0',
   /* "patralos.at", false */ 'p', 'a', 't', 'r', 'a', 'l', 'o', 's', '.', 'a', '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',
@@ -9490,17 +9468,16 @@ static const char kSTSHostTable[] = {
   /* "pensiunealido.ro", true */ 'p', 'e', 'n', 's', 'i', 'u', 'n', 'e', 'a', 'l', 'i', 'd', 'o', '.', 'r', 'o', '\0',
   /* "pentandra.com", true */ 'p', 'e', 'n', 't', 'a', 'n', 'd', 'r', 'a', '.', 'c', 'o', 'm', '\0',
   /* "pentano.net", true */ 'p', 'e', 'n', 't', 'a', 'n', 'o', '.', 'n', 'e', 't', '\0',
   /* "pentest.nl", true */ 'p', 'e', 'n', 't', 'e', 's', 't', '.', 'n', 'l', '\0',
   /* "pentesterlab.com", true */ 'p', 'e', 'n', 't', 'e', 's', 't', 'e', 'r', 'l', 'a', 'b', '.', 'c', 'o', 'm', '\0',
   /* "penz.media", true */ 'p', 'e', 'n', 'z', '.', 'm', 'e', 'd', 'i', 'a', '\0',
   /* "people-mozilla.org", true */ 'p', 'e', 'o', 'p', 'l', 'e', '-', 'm', 'o', 'z', 'i', 'l', 'l', 'a', '.', 'o', 'r', 'g', '\0',
   /* "peoplesbankal.com", true */ 'p', 'e', 'o', 'p', 'l', 'e', 's', 'b', 'a', 'n', 'k', 'a', 'l', '.', 'c', 'o', 'm', '\0',
-  /* "pepchid.com", false */ 'p', 'e', 'p', 'c', 'h', 'i', 'd', '.', 'c', 'o', 'm', '\0',
   /* "pepsicoemployeepreferencesurvey.com", true */ 'p', 'e', 'p', 's', 'i', 'c', 'o', 'e', 'm', 'p', 'l', 'o', 'y', 'e', 'e', 'p', 'r', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 's', 'u', 'r', 'v', 'e', 'y', '.', 'c', 'o', 'm', '\0',
   /* "per-pedes.at", true */ 'p', 'e', 'r', '-', 'p', 'e', 'd', 'e', 's', '.', 'a', 't', '\0',
   /* "percolate.com", true */ 'p', 'e', 'r', 'c', 'o', 'l', 'a', 't', 'e', '.', 'c', 'o', 'm', '\0',
   /* "percy.io", true */ 'p', 'e', 'r', 'c', 'y', '.', 'i', 'o', '\0',
   /* "perdel.cn", true */ 'p', 'e', 'r', 'd', 'e', 'l', '.', 'c', 'n', '\0',
   /* "pereuda.com", true */ 'p', 'e', 'r', 'e', 'u', 'd', 'a', '.', 'c', 'o', 'm', '\0',
   /* "perezdecastro.org", true */ 'p', 'e', 'r', 'e', 'z', 'd', 'e', 'c', 'a', 's', 't', 'r', 'o', '.', 'o', 'r', 'g', '\0',
   /* "perfect.in.th", true */ 'p', 'e', 'r', 'f', 'e', 'c', 't', '.', 'i', 'n', '.', 't', 'h', '\0',
@@ -9512,17 +9489,16 @@ static const char kSTSHostTable[] = {
   /* "perfumeaz.com", true */ 'p', 'e', 'r', 'f', 'u', 'm', 'e', 'a', 'z', '.', 'c', 'o', 'm', '\0',
   /* "perfumes.com.br", true */ 'p', 'e', 'r', 'f', 'u', 'm', 'e', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0',
   /* "perfumista.vn", true */ 'p', 'e', 'r', 'f', 'u', 'm', 'i', 's', 't', 'a', '.', 'v', 'n', '\0',
   /* "periscope.tv", true */ 'p', 'e', 'r', 'i', 's', 'c', 'o', 'p', 'e', '.', 't', 'v', '\0',
   /* "periscopeliveweb.com", true */ 'p', 'e', 'r', 'i', 's', 'c', 'o', 'p', 'e', 'l', 'i', 'v', 'e', 'w', 'e', 'b', '.', 'c', 'o', 'm', '\0',
   /* "perishablepress.com", true */ 'p', 'e', 'r', 'i', 's', 'h', 'a', 'b', 'l', 'e', 'p', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\0',
   /* "perot.me", true */ 'p', 'e', 'r', 'o', 't', '.', 'm', 'e', '\0',
   /* "perspectivum.com", true */ 'p', 'e', 'r', 's', 'p', 'e', 'c', 't', 'i', 'v', 'u', 'm', '.', 'c', 'o', 'm', '\0',
-  /* "persson.im", true */ 'p', 'e', 'r', 's', 's', 'o', 'n', '.', 'i', 'm', '\0',
   /* "persson.me", true */ 'p', 'e', 'r', 's', 's', 'o', 'n', '.', 'm', 'e', '\0',
   /* "pestici.de", true */ 'p', 'e', 's', 't', 'i', 'c', 'i', '.', 'd', 'e', '\0',
   /* "pet-hotel-mura.net", true */ 'p', 'e', 't', '-', 'h', 'o', 't', 'e', 'l', '-', 'm', 'u', 'r', 'a', '.', 'n', 'e', 't', '\0',
   /* "petabits.de", true */ 'p', 'e', 't', 'a', 'b', 'i', 't', 's', '.', 'd', 'e', '\0',
   /* "peter.org.ua", true */ 'p', 'e', 't', 'e', 'r', '.', 'o', 'r', 'g', '.', 'u', 'a', '\0',
   /* "peterboers.info", true */ 'p', 'e', 't', 'e', 'r', 'b', 'o', 'e', 'r', 's', '.', 'i', 'n', 'f', 'o', '\0',
   /* "peterdavehello.org", true */ 'p', 'e', 't', 'e', 'r', 'd', 'a', 'v', 'e', 'h', 'e', 'l', 'l', 'o', '.', 'o', 'r', 'g', '\0',
   /* "peterfolta.net", true */ 'p', 'e', 't', 'e', 'r', 'f', 'o', 'l', 't', 'a', '.', 'n', 'e', 't', '\0',
@@ -9554,16 +9530,17 @@ static const char kSTSHostTable[] = {
   /* "pgmann.cf", true */ 'p', 'g', 'm', 'a', 'n', 'n', '.', 'c', 'f', '\0',
   /* "pgmsource.com", true */ 'p', 'g', 'm', 's', 'o', 'u', 'r', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "pgnetwork.net", true */ 'p', 'g', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'n', 'e', 't', '\0',
   /* "pgpmail.cc", true */ 'p', 'g', 'p', 'm', 'a', 'i', 'l', '.', 'c', 'c', '\0',
   /* "pgregg.com", false */ 'p', 'g', 'r', 'e', 'g', 'g', '.', 'c', 'o', 'm', '\0',
   /* "pgtb.be", true */ 'p', 'g', 't', 'b', '.', 'b', 'e', '\0',
   /* "ph.search.yahoo.com", false */ 'p', 'h', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "phalconist.com", true */ 'p', 'h', 'a', 'l', 'c', 'o', 'n', 'i', 's', 't', '.', 'c', 'o', 'm', '\0',
+  /* "phantasie.cc", true */ 'p', 'h', 'a', 'n', 't', 'a', 's', 'i', 'e', '.', 'c', 'c', '\0',
   /* "phantastikon.de", true */ 'p', 'h', 'a', 'n', 't', 'a', 's', 't', 'i', 'k', 'o', 'n', '.', 'd', 'e', '\0',
   /* "pharmaboard.de", true */ 'p', 'h', 'a', 'r', 'm', 'a', 'b', 'o', 'a', 'r', 'd', '.', 'd', 'e', '\0',
   /* "pharmgkb.org", true */ 'p', 'h', 'a', 'r', 'm', 'g', 'k', 'b', '.', 'o', 'r', 'g', '\0',
   /* "pharynks.com", true */ 'p', 'h', 'a', 'r', 'y', 'n', 'k', 's', '.', 'c', 'o', 'm', '\0',
   /* "phcnetworks.net", true */ 'p', 'h', 'c', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'n', 'e', 't', '\0',
   /* "phenomeno-porto.com", true */ 'p', 'h', 'e', 'n', 'o', 'm', 'e', 'n', 'o', '-', 'p', 'o', 'r', 't', 'o', '.', 'c', 'o', 'm', '\0',
   /* "phenomeno.nl", true */ 'p', 'h', 'e', 'n', 'o', 'm', 'e', 'n', 'o', '.', 'n', 'l', '\0',
   /* "phenomenoporto.com", true */ 'p', 'h', 'e', 'n', 'o', 'm', 'e', 'n', 'o', 'p', 'o', 'r', 't', 'o', '.', 'c', 'o', 'm', '\0',
@@ -9697,32 +9674,32 @@ static const char kSTSHostTable[] = {
   /* "pizala.de", true */ 'p', 'i', 'z', 'a', 'l', 'a', '.', 'd', 'e', '\0',
   /* "pjili.com", true */ 'p', 'j', 'i', 'l', 'i', '.', 'c', 'o', 'm', '\0',
   /* "pjuu.com", false */ 'p', 'j', 'u', 'u', '.', 'c', 'o', 'm', '\0',
   /* "pkgt.de", false */ 'p', 'k', 'g', 't', '.', 'd', 'e', '\0',
   /* "pl.search.yahoo.com", false */ 'p', 'l', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0',
   /* "placehold.co", true */ 'p', 'l', 'a', 'c', 'e', 'h', 'o', 'l', 'd', '.', 'c', 'o', '\0',
   /* "placker.com", true */ 'p', 'l', 'a', 'c', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0',
   /* "plainjs.com", false */ 'p', 'l', 'a', 'i', 'n', 'j', 's', '.', 'c', 'o', 'm', '\0',
+  /* "plaintech.net.au", true */ 'p', 'l', 'a', 'i', 'n', 't', 'e', 'c', 'h', '.', 'n', 'e', 't', '.', 'a', 'u', '\0',
   /* "plaintray.com", true */ 'p', 'l', 'a', 'i', 'n', 't', 'r', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "planboardapp.com", true */ 'p', 'l', 'a', 'n', 'b', 'o', 'a', 'r', 'd', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0',
   /* "planet-work.com", true */ 'p', 'l', 'a', 'n', 'e', 't', '-', 'w', 'o', 'r', 'k', '.', 'c', 'o', 'm', '\0',
   /* "planete-cocoon.com", true */ 'p', 'l', 'a', 'n', 'e', 't', 'e', '-', 'c', 'o', 'c', 'o', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "planete-lira.fr", true */ 'p', 'l', 'a', 'n', 'e', 't', 'e', '-', 'l', 'i', 'r', 'a', '.', 'f', 'r', '\0',
   /* "planpharmacy.com", false */ 'p', 'l', 'a', 'n', 'p', 'h', 'a', 'r', 'm', 'a', 'c', 'y', '.', 'c', 'o', 'm', '\0',
   /* "plass.hamburg", true */ 'p', 'l', 'a', 's', 's', '.', 'h', 'a', 'm', 'b', 'u', 'r', 'g', '\0',
   /* "plasti-pac.ch", true */ 'p', 'l', 'a', 's', 't', 'i', '-', 'p', 'a', 'c', '.', 'c', 'h', '\0',
   /* "platten-nach-mass.de", true */ 'p', 'l', 'a', 't', 't', 'e', 'n', '-', 'n', 'a', 'c', 'h', '-', 'm', 'a', 's', 's', '.', 'd', 'e', '\0',
   /* "plattner.club", true */ 'p', 'l', 'a', 't', 't', 'n', 'e', 'r', '.', 'c', 'l', 'u', 'b', '\0',
   /* "play.google.com", true */ 'p', 'l', 'a', 'y', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0',
   /* "playanka.com", true */ 'p', 'l', 'a', 'y', 'a', 'n', 'k', 'a', '.', 'c', 'o', 'm', '\0',
   /* "playflick.com", false */ 'p', 'l', 'a', 'y', 'f', 'l', 'i', 'c', 'k', '.', 'c', 'o', 'm', '\0',
   /* "playmyplay.com", true */ 'p', 'l', 'a', 'y', 'm', 'y', 'p', 'l', 'a', 'y', '.', 'c', 'o', 'm', '\0',
   /* "playsharp.com", true */ 'p', 'l', 'a', 'y', 's', 'h', 'a', 'r', 'p', '.', 'c', 'o', 'm', '\0',
-  /* "playsoundevents.be", true */ 'p', 'l', 'a', 'y', 's', 'o', 'u', 'n', 'd', 'e', 'v', 'e', 'n', 't', 's', '.', 'b', 'e', '\0',
   /* "playsprout.industries", true */ 'p', 'l', 'a', 'y', 's', 'p', 'r', 'o', 'u', 't', '.', 'i', 'n', 'd', 'u', 's', 't', 'r', 'i', 'e', 's', '\0',
   /* "please-deny.me", true */ 'p', 'l', 'e', 'a', 's', 'e', '-', 'd', 'e', 'n', 'y', '.', 'm', 'e', '\0',
   /* "pleasure.forsale", true */ 'p', 'l', 'e', 'a', 's', 'u', 'r', 'e', '.', 'f', 'o', 'r', 's', 'a', 'l', 'e', '\0',
   /* "pleier-it.de", true */ 'p', 'l', 'e', 'i', 'e', 'r', '-', 'i', 't', '.', 'd', 'e', '\0',
   /* "pleier.it", true */ 'p', 'l', 'e', 'i', 'e', 'r', '.', 'i', 't', '\0',
   /* "plen.io", true */ 'p', 'l', 'e', 'n', '.', 'i', 'o', '\0',
   /* "plenigo.com", true */ 'p', 'l', 'e', 'n', 'i', 'g', 'o', '.', 'c', 'o', 'm', '\0',
   /* "plexusmd.com", true */ 'p', 'l', 'e', 'x', 'u', 's', 'm', 'd', '.', 'c', 'o', 'm', '\0',
@@ -9842,17 +9819,16 @@ static const char kSTSHostTable[] = {
   /* "poweroff.win", true */ 'p', 'o', 'w', 'e', 'r', 'o', 'f', 'f', '.', 'w', 'i', 'n', '\0',
   /* "powershift.ne.jp", true */ 'p', 'o', 'w', 'e', 'r', 's', 'h', 'i', 'f', 't', '.', 'n', 'e', '.', 'j', 'p', '\0',
   /* "powerwellness-korecki.de", true */ 'p', 'o', 'w', 'e', 'r', 'w', 'e', 'l', 'l', 'n', 'e', 's', 's', '-', 'k', 'o', 'r', 'e', 'c', 'k', 'i', '.', 'd', 'e', '\0',
   /* "pozzo-balbi.com", true */ 'p', 'o', 'z', 'z', 'o', '-', 'b', 'a', 'l', 'b', 'i', '.', 'c', 'o', 'm', '\0',
   /* "ppipe.net", true */ 'p', 'p', 'i', 'p', 'e', '.', 'n', 'e', 't', '\0',
   /* "ppmoon.com", true */ 'p', 'p', 'm', 'o', 'o', 'n', '.', 'c', 'o', 'm', '\0',
   /* "ppro.com", true */ 'p', 'p', 'r', 'o', '.', 'c', 'o', 'm', '\0',
   /* "ppuu.org", false */ 'p', 'p', 'u', 'u', '.', 'o', 'r', 'g', '\0',
-  /* "ppy3.com", true */ 'p', 'p', 'y', '3', '.', 'c', 'o', 'm', '\0',
   /* "pr1sm.com", true */ 'p', 'r', '1', 's', 'm', '.', 'c', 'o', 'm', '\0',
   /* "pr2studio.com", true */ 'p', 'r', '2', 's', 't', 'u', 'd', 'i', 'o', '.', 'c', 'o', 'm', '\0',
   /* "practicallabs.com", true */ 'p', 'r', 'a', 'c', 't', 'i', 'c', 'a', 'l', 'l', 'a', 'b', 's', '.', 'c', 'o', 'm', '\0',
   /* "prado.it", true */ 'p', 'r', 'a', 'd', 'o', '.', 'i', 't', '\0',
   /* "praeparation-keppner.de", true */ 'p', 'r', 'a', 'e', 'p', 'a', 'r', 'a', 't', 'i', 'o', 'n', '-', 'k', 'e', 'p', 'p', 'n', 'e', 'r', '.', 'd', 'e', '\0',
   /* "praguepsychology.com", true */ 'p', 'r', 'a', 'g', 'u', 'e', 'p', 's', 'y', 'c', 'h', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'o', 'm', '\0',
   /* "praguepsychology.cz", true */ 'p', 'r', 'a', 'g', 'u', 'e', 'p', 's', 'y', 'c', 'h', 'o', 'l', 'o', 'g', 'y', '.', 'c', 'z', '\0',
   /* "prakharprasad.com", true */ 'p', 'r', 'a', 'k', 'h', 'a', 'r', 'p', 'r', 'a', 's', 'a', 'd', '.', 'c', 'o', 'm', '\0',
@@ -9987,16 +9963,17 @@ static const char kSTSHostTable[] = {
   /* "proxybay.top", true */ 'p', 'r', 'o', 'x', 'y', 'b', 'a', 'y', '.', 't', 'o', 'p', '\0',
   /* "proxybay.tv", true */ 'p', 'r', 'o', 'x', 'y', 'b', 'a', 'y', '.', 't', 'v', '\0',
   /* "proxyportal.org", true */ 'p', 'r', 'o', 'x', 'y', 'p', 'o', 'r', 't', 'a', 'l', '.', 'o', 'r', 'g', '\0',
   /* "proxyweb.us", true */ 'p', 'r', 'o', 'x', 'y', 'w', 'e', 'b', '.', 'u', 's', '\0',
   /* "prstatic.com", true */ 'p', 'r', 's', 't', 'a', 't', 'i', 'c', '.', 'c', 'o', 'm', '\0',
   /* "prt.in.th", true */ 'p', 'r', 't', '.', 'i', 'n', '.', 't', 'h', '\0',
   /* "prtpe.com", true */ 'p', 'r', 't', 'p', 'e', '.', 'c', 'o', 'm', '\0',
   /* "prvikvadrat.hr", true */ 'p', 'r', 'v', 'i', 'k', 'v', 'a', 'd', 'r', 'a', 't', '.', 'h', 'r', '\0',
+  /* "prxio.date", true */ 'p', 'r', 'x', 'i', 'o', '.', 'd', 'a', 't', 'e', '\0',
   /* "przemas.pl", true */ 'p', 'r', 'z', 'e', 'm', 'a', 's', '.', 'p', 'l', '\0',
   /* "ps-provider.co.jp", true */ 'p', 's', '-', 'p', 'r', 'o', 'v', 'i', 'd', 'e', 'r', '.', 'c', 'o', '.', 'j', 'p', '\0',
   /* "ps-w.ru", true */ 'p', 's', '-', 'w', '.', 'r', 'u', '\0',
   /* "ps-x.ru", true */ 'p', 's', '-', 'x', '.', 'r', 'u', '\0',
   /* "psb1911.com", true */ 'p', 's', 'b', '1', '9', '1', '1', '.', 'c', 'o', 'm', '\0',
   /* "psbarrett.com", true */ 'p', 's', 'b', 'a', 'r', 'r', 'e', 't', 't', '.', 'c', 'o', 'm', '\0',
   /* "psicologia.co.ve", true */ 'p', 's', 'i', 'c', 'o', 'l', 'o', 'g', 'i', 'a', '.', 'c', 'o', '.', 'v', 'e', '\0',
   /* "psncardplus.be", true */ 'p', 's', 'n', 'c', 'a', 'r', 'd', 'p', 'l', 'u', 's', '.', 'b', 'e', '\0',
@@ -10200,17 +10177,16 @@ static const char kSTSHostTable[] = {
   /* "raidstone.net", true */ 'r', 'a', 'i', 'd', 's', 't', 'o', 'n', 'e', '.', 'n', 'e', 't', '\0',
   /* "raidstone.rocks", true */ 'r', 'a', 'i', 'd', 's', 't', 'o', 'n', 'e', '.', 'r', 'o', 'c', 'k', 's', '\0',
   /* "railgun.ac", true */ 'r', 'a', 'i', 'l', 'g', 'u', 'n', '.', 'a', 'c', '\0',
   /* "railgun.com.cn", true */ 'r', 'a', 'i', 'l', 'g', 'u', 'n', '.', 'c', 'o', 'm', '.', 'c', 'n', '\0',
   /* "railjob.cn", true */ 'r', 'a', 'i', 'l', 'j', 'o', 'b', '.', 'c', 'n', '\0',
   /* "railyardurgentcare.com", true */ 'r', 'a', 'i', 'l', 'y', 'a', 'r', 'd', 'u', 'r', 'g', 'e', 'n', 't', 'c', 'a', 'r', 'e', '.', 'c', 'o', 'm', '\0',
   /* "rainforest.engineering", true */ 'r', 'a', 'i', 'n', 'f', 'o', 'r', 'e', 's', 't', '.', 'e', 'n', 'g', 'i', 'n', 'e', 'e', 'r', 'i', 'n', 'g', '\0',
   /* "raiseyourflag.com", true */ 'r', 'a', 'i', 's', 'e', 'y', 'o', 'u', 'r', 'f', 'l', 'a', 'g', '.', 'c', 'o', 'm', '\0',
-  /* "raissarobles.com", true */ 'r', 'a', 'i', 's', 's', 'a', 'r', 'o', 'b', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0',
   /* "raitza.de", true */ 'r', 'a', 'i', 't', 'z', 'a', '.', 'd', 'e', '\0',
   /* "rak-business-service.com", true */ 'r', 'a', 'k', '-', 'b', 'u', 's', 'i', 'n', 'e', 's', 's', '-', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0',
   /* "ralfs-zusizone.de", true */ 'r', 'a', 'l', 'f', 's', '-', 'z', 'u', 's', 'i', 'z', 'o', 'n', 'e', '.', 'd', 'e', '\0',
   /* "ram-it.nl", true */ 'r', 'a', 'm', '-', 'i', 't', '.', 'n', 'l', '\0',
   /* "ramatola.uk", true */ 'r', 'a', 'm', 'a', 't', 'o', 'l', 'a', '.', 'u', 'k', '\0',
   /* "rametrix.com", true */ 'r', 'a', 'm', 'e', 't', 'r', 'i', 'x', '.', 'c', 'o', 'm', '\0',
   /* "ramon-c.nl", true */ 'r', 'a', 'm', 'o', 'n', '-', 'c', '.', 'n', 'l', '\0',
   /* "ramsor-gaming.de", true */ 'r', 'a', 'm', 's', 'o', 'r', '-', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'd', 'e', '\0',
@@ -10308,17 +10284,16 @@ static const char kSTSHostTable[] = {
   /* "redable.nl", true */ 'r', 'e', 'd', 'a', 'b', 'l', 'e', '.', 'n', 'l', '\0',
   /* "redb.cz", true */ 'r', 'e', 'd', 'b', '.', 'c', 'z', '\0',
   /* "redballoonsecurity.com", true */ 'r', 'e', 'd', 'b', 'a', 'l', 'l', 'o', 'o', 'n', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0',
   /* "redburn.com", true */ 'r', 'e', 'd', 'b', 'u', 'r', 'n', '.', 'c', 'o', 'm', '\0',
   /* "redd.it", true */ 'r', 'e', 'd', 'd', '.', 'i', 't', '\0',
   /* "reddingsbrigade-zwolle.nl", true */ 'r', 'e', 'd', 'd', 'i', 'n', 'g', 's', '