diff --git a/.eslintignore b/.eslintignore index 3435bcf63f71..3749ff069309 100644 --- a/.eslintignore +++ b/.eslintignore @@ -14,7 +14,6 @@ chrome/** config/** db/** docshell/** -dom/** editor/** embedding/** extensions/** @@ -153,6 +152,77 @@ devtools/client/framework/test/code_ugly* devtools/server/tests/unit/babel_and_browserify_script_with_source_map.js devtools/server/tests/unit/setBreakpoint* +# dom/ exclusions +dom/animation/** +dom/archivereader/** +dom/asmjscache/** +dom/audiochannel/** +dom/base/** +dom/battery/** +dom/bindings/** +dom/broadcastchannel/** +dom/browser-element/** +dom/cache/** +dom/canvas/** +dom/commandhandler/** +dom/console/** +dom/crypto/** +dom/devicestorage/** +dom/encoding/** +dom/events/** +dom/fetch/** +dom/file/** +dom/filehandle/** +dom/filesystem/** +dom/flyweb/** +dom/gamepad/** +dom/geolocation/** +dom/grid/** +dom/html/** +dom/imptests/** +dom/interfaces/** +dom/ipc/** +dom/json/** +dom/jsurl/** +dom/locales/** +dom/manifest/** +dom/mathml/** +dom/media/** +dom/messagechannel/** +dom/network/** +dom/notification/** +dom/offline/** +dom/performance/** +dom/permission/** +dom/plugins/** +dom/power/** +dom/presentation/** +dom/promise/** +dom/push/** +dom/quota/** +dom/res/** +dom/secureelement/** +dom/security/** +dom/smil/** +dom/storage/** +dom/svg/** +dom/system/** +dom/tests/** +dom/time/** +dom/u2f/** +dom/url/** +dom/vr/** +dom/webauthn/** +dom/webbrowserpersist/** +dom/webidl/** +dom/workers/** +dom/worklet/** +dom/xbl/** +dom/xhr/** +dom/xml/** +dom/xslt/** +dom/xul/** + # Exclude everything but self-hosted JS js/ductwork/** js/examples/** diff --git a/accessible/ipc/DocAccessibleParent.cpp b/accessible/ipc/DocAccessibleParent.cpp index e41a47159215..8d9327be5cb2 100644 --- a/accessible/ipc/DocAccessibleParent.cpp +++ b/accessible/ipc/DocAccessibleParent.cpp @@ -534,7 +534,6 @@ DocAccessibleParent::SetCOMProxy(const RefPtr& aCOMProxy) } Accessible* outerDoc = OuterDocOfRemoteBrowser(); - MOZ_ASSERT(outerDoc); IAccessible* rawNative = nullptr; if (outerDoc) { diff --git a/accessible/ipc/win/ProxyAccessible.cpp b/accessible/ipc/win/ProxyAccessible.cpp index 1bef1fc3a652..d6aa13cc2b2b 100644 --- a/accessible/ipc/win/ProxyAccessible.cpp +++ b/accessible/ipc/win/ProxyAccessible.cpp @@ -6,6 +6,7 @@ #include "Accessible2.h" #include "ProxyAccessible.h" +#include "ia2AccessibleRelation.h" #include "ia2AccessibleValue.h" #include "IGeckoCustom.h" #include "mozilla/a11y/DocAccessibleParent.h" @@ -80,6 +81,12 @@ struct InterfaceIID static REFIID Value() { return IID_IGeckoCustom; } }; +template<> +struct InterfaceIID +{ + static REFIID Value() { return IID_IAccessible2_2; } +}; + /** * Get the COM proxy for this proxy accessible and QueryInterface it with the * correct IID @@ -363,6 +370,44 @@ ProxyAccessible::Attributes(nsTArray* aAttrs) const aAttrs); } +nsTArray +ProxyAccessible::RelationByType(RelationType aType) const +{ + RefPtr acc = QueryInterface(this); + if (!acc) { + nsTArray(); + } + + _bstr_t relationType; + for (uint32_t idx = 0; idx < ArrayLength(sRelationTypePairs); idx++) { + if (aType == sRelationTypePairs[idx].first) { + relationType = sRelationTypePairs[idx].second; + break; + } + } + + if (!relationType) { + nsTArray(); + } + + IUnknown** targets; + long nTargets = 0; + HRESULT hr = acc->get_relationTargetsOfType(relationType, 0, &targets, &nTargets); + if (FAILED(hr)) { + nsTArray(); + } + + nsTArray proxies; + for (long idx = 0; idx < nTargets; idx++) { + IUnknown* target = targets[idx]; + proxies.AppendElement(GetProxyFor(Document(), target)); + target->Release(); + } + CoTaskMemFree(targets); + + return Move(proxies); +} + double ProxyAccessible::CurValue() { diff --git a/accessible/tests/browser/e10s/browser.ini b/accessible/tests/browser/e10s/browser.ini index 0b7b5adad1dd..79a62c996575 100644 --- a/accessible/tests/browser/e10s/browser.ini +++ b/accessible/tests/browser/e10s/browser.ini @@ -21,7 +21,7 @@ skip-if = e10s && os == 'win' && os_version == '5.1' [browser_caching_name.js] skip-if = e10s && os == 'win' && os_version == '5.1' [browser_caching_relations.js] -skip-if = e10s && os == 'win' # Bug 1288839 +skip-if = e10s && os == 'win' && os_version == '5.1' [browser_caching_states.js] skip-if = e10s && os == 'win' && os_version == '5.1' [browser_caching_value.js] diff --git a/accessible/xpcom/xpcAccessible.cpp b/accessible/xpcom/xpcAccessible.cpp index 10204ae7b270..dede700d19d6 100644 --- a/accessible/xpcom/xpcAccessible.cpp +++ b/accessible/xpcom/xpcAccessible.cpp @@ -504,16 +504,12 @@ xpcAccessible::GetRelationByType(uint32_t aType, return NS_OK; } -#if defined(XP_WIN) - return NS_ERROR_NOT_IMPLEMENTED; -#else ProxyAccessible* proxy = IntlGeneric().AsProxy(); nsTArray targets = proxy->RelationByType(static_cast(aType)); NS_ADDREF(*aRelation = new nsAccessibleRelation(aType, &targets)); return NS_OK; -#endif } NS_IMETHODIMP diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index b37527b4dae5..9743fe5d4409 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -1579,6 +1579,7 @@ pref("services.sync.validation.enabled", true); // Preferences for the form autofill system extension pref("browser.formautofill.experimental", false); +pref("browser.formautofill.enabled", false); // Enable safebrowsing v4 tables (suffixed by "-proto") update. #ifdef NIGHTLY_BUILD diff --git a/browser/components/extensions/schemas/devtools.json b/browser/components/extensions/schemas/devtools.json index 6956b0921600..ee3d26fe641e 100644 --- a/browser/components/extensions/schemas/devtools.json +++ b/browser/components/extensions/schemas/devtools.json @@ -12,5 +12,10 @@ } } ] + }, + { + "namespace": "devtools", + "allowedContexts": ["devtools", "devtools_only"], + "defaultContexts": ["devtools", "devtools_only"] } ] diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_captureVisibleTab.js b/browser/components/extensions/test/browser/browser_ext_tabs_captureVisibleTab.js index 1491a19ab937..d3e4fac7f519 100644 --- a/browser/components/extensions/test/browser/browser_ext_tabs_captureVisibleTab.js +++ b/browser/components/extensions/test/browser/browser_ext_tabs_captureVisibleTab.js @@ -141,8 +141,8 @@ add_task(function* testCaptureVisibleTabPermissions() { }, background() { - browser.test.assertFalse("captureVisibleTab" in browser.tabs, - 'Extension without "" permission should not have access to captureVisibleTab'); + browser.test.assertEq(undefined, browser.tabs.captureVisibleTab, + 'Extension without "" permission should not have access to captureVisibleTab'); browser.test.notifyPass("captureVisibleTabPermissions"); }, }); diff --git a/browser/components/syncedtabs/test/xpcshell/head.js b/browser/components/syncedtabs/test/xpcshell/head.js index 17590109b6b4..1382b3313c12 100644 --- a/browser/components/syncedtabs/test/xpcshell/head.js +++ b/browser/components/syncedtabs/test/xpcshell/head.js @@ -13,12 +13,12 @@ do_get_profile(); // fxa needs a profile directory for storage. // Create a window polyfill so sinon can load let window = { - document: {}, - location: {}, - setTimeout, - setInterval, - clearTimeout, - clearinterval: clearInterval + document: {}, + location: {}, + setTimeout, + setInterval, + clearTimeout, + clearInterval, }; let self = window; diff --git a/browser/extensions/formautofill/FormAutofillParent.jsm b/browser/extensions/formautofill/FormAutofillParent.jsm index c72f88eb7737..b0d8540aa9fd 100644 --- a/browser/extensions/formautofill/FormAutofillParent.jsm +++ b/browser/extensions/formautofill/FormAutofillParent.jsm @@ -31,32 +31,105 @@ const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; +Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "ProfileStorage", "resource://formautofill/ProfileStorage.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "FormAutofillPreferences", + "resource://formautofill/FormAutofillPreferences.jsm"); const PROFILE_JSON_FILE_NAME = "autofill-profiles.json"; +const ENABLED_PREF = "browser.formautofill.enabled"; + +function FormAutofillParent() { +} + +FormAutofillParent.prototype = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports, Ci.nsIObserver]), -let FormAutofillParent = { _profileStore: null, + /** + * Whether Form Autofill is enabled in preferences. + * Caches the latest value of this._getStatus(). + */ + _enabled: false, + /** * Initializes ProfileStorage and registers the message handler. */ init() { - let storePath = - OS.Path.join(OS.Constants.Path.profileDir, PROFILE_JSON_FILE_NAME); - + let storePath = OS.Path.join(OS.Constants.Path.profileDir, PROFILE_JSON_FILE_NAME); this._profileStore = new ProfileStorage(storePath); this._profileStore.initialize(); - let mm = Cc["@mozilla.org/globalmessagemanager;1"] - .getService(Ci.nsIMessageListenerManager); - mm.addMessageListener("FormAutofill:PopulateFieldValues", this); - mm.addMessageListener("FormAutofill:GetProfiles", this); + Services.obs.addObserver(this, "advanced-pane-loaded", false); + + // Observing the pref (and storage) changes + Services.prefs.addObserver(ENABLED_PREF, this, false); + this._enabled = this._getStatus(); + // Force to trigger the onStatusChanged function for setting listeners properly + // while initizlization + this._onStatusChanged(); + Services.mm.addMessageListener("FormAutofill:getEnabledStatus", this); + }, + + observe(subject, topic, data) { + switch (topic) { + case "advanced-pane-loaded": { + let formAutofillPreferences = new FormAutofillPreferences(); + let document = subject.document; + let prefGroup = formAutofillPreferences.init(document); + let parentNode = document.getElementById("mainPrefPane"); + let insertBeforeNode = document.getElementById("locationBarGroup"); + parentNode.insertBefore(prefGroup, insertBeforeNode); + break; + } + + case "nsPref:changed": { + // Observe pref changes and update _enabled cache if status is changed. + let currentStatus = this._getStatus(); + if (currentStatus !== this._enabled) { + this._enabled = currentStatus; + this._onStatusChanged(); + } + break; + } + + default: { + throw new Error(`FormAutofillParent: Unexpected topic observed: ${topic}`); + } + } + }, + + /** + * Add/remove message listener and broadcast the status to frames while the + * form autofill status changed. + */ + _onStatusChanged() { + if (this._enabled) { + Services.mm.addMessageListener("FormAutofill:PopulateFieldValues", this); + Services.mm.addMessageListener("FormAutofill:GetProfiles", this); + } else { + Services.mm.removeMessageListener("FormAutofill:PopulateFieldValues", this); + Services.mm.removeMessageListener("FormAutofill:GetProfiles", this); + } + + Services.mm.broadcastAsyncMessage("FormAutofill:enabledStatus", this._enabled); + }, + + /** + * Query pref (and storage) status to determine the overall status for + * form autofill feature. + * + * @returns {boolean} status of form autofill feature + */ + _getStatus() { + return Services.prefs.getBoolPref(ENABLED_PREF); }, /** @@ -74,6 +147,10 @@ let FormAutofillParent = { case "FormAutofill:GetProfiles": this._getProfiles(data, target); break; + case "FormAutofill:getEnabledStatus": + target.messageManager.sendAsyncMessage("FormAutofill:enabledStatus", + this._enabled); + break; } }, @@ -99,10 +176,10 @@ let FormAutofillParent = { this._profileStore = null; } - let mm = Cc["@mozilla.org/globalmessagemanager;1"] - .getService(Ci.nsIMessageListenerManager); - mm.removeMessageListener("FormAutofill:PopulateFieldValues", this); - mm.removeMessageListener("FormAutofill:GetProfiles", this); + Services.mm.removeMessageListener("FormAutofill:PopulateFieldValues", this); + Services.mm.removeMessageListener("FormAutofill:GetProfiles", this); + Services.obs.removeObserver(this, "advanced-pane-loaded"); + Services.prefs.removeObserver(ENABLED_PREF, this); }, /** diff --git a/browser/extensions/formautofill/FormAutofillPreferences.jsm b/browser/extensions/formautofill/FormAutofillPreferences.jsm new file mode 100644 index 000000000000..637efe334f48 --- /dev/null +++ b/browser/extensions/formautofill/FormAutofillPreferences.jsm @@ -0,0 +1,136 @@ +/* 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/. */ + +/** + * Injects the form autofill section into about:preferences. + */ + +"use strict"; + +this.EXPORTED_SYMBOLS = ["FormAutofillPreferences"]; + +const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; +const PREF_AUTOFILL_ENABLED = "browser.formautofill.enabled"; +const BUNDLE_URI = "chrome://formautofill/locale/formautofill.properties"; + +Cu.import("resource://gre/modules/Services.jsm"); + +function FormAutofillPreferences() { + this.bundle = Services.strings.createBundle(BUNDLE_URI); +} + +FormAutofillPreferences.prototype = { + /** + * Check if Form Autofill feature is enabled. + * + * @returns {boolean} + */ + get isAutofillEnabled() { + return Services.prefs.getBoolPref(PREF_AUTOFILL_ENABLED); + }, + + /** + * Check if the current page is Preferences/Privacy. + * + * @returns {boolean} + */ + get isPrivacyPane() { + return this.refs.document.location.href == "about:preferences#privacy"; + }, + + /** + * Create the Form Autofill preference group. + * + * @param {XULDocument} document + * @returns {XULElement} + */ + init(document) { + const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; + + let formAutofillGroup = document.createElementNS(XUL_NS, "groupbox"); + let caption = document.createElementNS(XUL_NS, "caption"); + let captionLabel = document.createElementNS(XUL_NS, "label"); + let hbox = document.createElementNS(XUL_NS, "hbox"); + let enabledCheckbox = document.createElementNS(XUL_NS, "checkbox"); + let spacer = document.createElementNS(XUL_NS, "spacer"); + let savedProfilesBtn = document.createElementNS(XUL_NS, "button"); + + this.refs = { + document, + formAutofillGroup, + enabledCheckbox, + savedProfilesBtn, + }; + + formAutofillGroup.id = "formAutofillGroup"; + formAutofillGroup.hidden = !this.isPrivacyPane; + // Use .setAttribute because HTMLElement.dataset is not available on XUL elements + formAutofillGroup.setAttribute("data-category", "panePrivacy"); + + captionLabel.textContent = this.bundle.GetStringFromName("preferenceGroupTitle"); + savedProfilesBtn.setAttribute("label", this.bundle.GetStringFromName("savedProfiles")); + enabledCheckbox.setAttribute("label", this.bundle.GetStringFromName("enableProfileAutofill")); + + // Manually set the checked state + if (this.isAutofillEnabled) { + enabledCheckbox.setAttribute("checked", true); + } + + spacer.flex = 1; + + formAutofillGroup.appendChild(caption); + caption.appendChild(captionLabel); + formAutofillGroup.appendChild(hbox); + hbox.appendChild(enabledCheckbox); + hbox.appendChild(spacer); + hbox.appendChild(savedProfilesBtn); + + this.attachEventListeners(); + + return formAutofillGroup; + }, + + /** + * Remove event listeners and the preference group. + */ + uninit() { + this.detachEventListeners(); + this.refs.formAutofillGroup.remove(); + }, + + /** + * Handle events + * + * @param {DOMEvent} event + */ + handleEvent(event) { + switch (event.type) { + case "command": { + let target = event.target; + + if (target == this.refs.enabledCheckbox) { + // Set preference directly instead of relying on + Services.prefs.setBoolPref(PREF_AUTOFILL_ENABLED, target.checked); + } else if (target == this.refs.savedProfilesBtn) { + // TODO: Open Saved Profiles dialog + } + break; + } + } + }, + + /** + * Attach event listener + */ + attachEventListeners() { + this.refs.formAutofillGroup.addEventListener("command", this); + }, + + /** + * Remove event listener + */ + detachEventListeners() { + this.refs.formAutofillGroup.removeEventListener("command", this); + }, +}; diff --git a/browser/extensions/formautofill/bootstrap.js b/browser/extensions/formautofill/bootstrap.js index 580bb028588b..c140b8dd76ef 100644 --- a/browser/extensions/formautofill/bootstrap.js +++ b/browser/extensions/formautofill/bootstrap.js @@ -21,7 +21,8 @@ function startup() { return; } - FormAutofillParent.init(); + let parent = new FormAutofillParent(); + parent.init(); Services.mm.loadFrameScript("chrome://formautofill/content/FormAutofillContent.js", true); } diff --git a/browser/extensions/formautofill/content/FormAutofillContent.js b/browser/extensions/formautofill/content/FormAutofillContent.js index 1f2466e48d0d..1404f1d98f0d 100644 --- a/browser/extensions/formautofill/content/FormAutofillContent.js +++ b/browser/extensions/formautofill/content/FormAutofillContent.js @@ -340,9 +340,16 @@ let ProfileAutocomplete = { */ var FormAutofillContent = { init() { - ProfileAutocomplete.ensureRegistered(); - addEventListener("DOMContentLoaded", this); + + addMessageListener("FormAutofill:enabledStatus", (result) => { + if (result.data) { + ProfileAutocomplete.ensureRegistered(); + } else { + ProfileAutocomplete.ensureUnregistered(); + } + }); + sendAsyncMessage("FormAutofill:getEnabledStatus"); }, handleEvent(evt) { diff --git a/browser/extensions/formautofill/locale/en-US/formautofill.properties b/browser/extensions/formautofill/locale/en-US/formautofill.properties new file mode 100644 index 000000000000..76baf35cd0ad --- /dev/null +++ b/browser/extensions/formautofill/locale/en-US/formautofill.properties @@ -0,0 +1,7 @@ +# 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/. + +preferenceGroupTitle = Form Autofill +enableProfileAutofill = Enable Profile Autofill +savedProfiles = Saved Profiles… diff --git a/browser/extensions/formautofill/locale/jar.mn b/browser/extensions/formautofill/locale/jar.mn new file mode 100644 index 000000000000..e786254f193f --- /dev/null +++ b/browser/extensions/formautofill/locale/jar.mn @@ -0,0 +1,8 @@ +#filter substitution +# 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/. + +@AB_CD@.jar: +% locale formautofill @AB_CD@ %locale/@AB_CD@/ + locale/@AB_CD@/ (en-US/*) diff --git a/browser/extensions/formautofill/locale/moz.build b/browser/extensions/formautofill/locale/moz.build new file mode 100644 index 000000000000..aac3a838c4c2 --- /dev/null +++ b/browser/extensions/formautofill/locale/moz.build @@ -0,0 +1,7 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +JAR_MANIFESTS += ['jar.mn'] diff --git a/browser/extensions/formautofill/moz.build b/browser/extensions/formautofill/moz.build index 5ad3be98d6ff..419486ac4c42 100644 --- a/browser/extensions/formautofill/moz.build +++ b/browser/extensions/formautofill/moz.build @@ -7,6 +7,8 @@ DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION'] DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION'] +DIRS += ['locale'] + FINAL_TARGET_FILES.features['formautofill@mozilla.org'] += [ 'bootstrap.js' ] diff --git a/browser/extensions/formautofill/test/browser/browser.ini b/browser/extensions/formautofill/test/browser/browser.ini index 500224636708..71f0ddd97463 100644 --- a/browser/extensions/formautofill/test/browser/browser.ini +++ b/browser/extensions/formautofill/test/browser/browser.ini @@ -1,3 +1,4 @@ [DEFAULT] [browser_check_installed.js] +[browser_privacyPreferences.js] diff --git a/browser/extensions/formautofill/test/browser/browser_privacyPreferences.js b/browser/extensions/formautofill/test/browser/browser_privacyPreferences.js new file mode 100644 index 000000000000..86d4e590d440 --- /dev/null +++ b/browser/extensions/formautofill/test/browser/browser_privacyPreferences.js @@ -0,0 +1,49 @@ +"use strict"; + +const PAGE_PREFS = "about:preferences"; +const PAGE_PRIVACY = PAGE_PREFS + "#privacy"; +const GROUP_AUTOFILL = "#formAutofillGroup"; +const CHECKBOX_AUTOFILL = GROUP_AUTOFILL + " checkbox"; +const PREF_AUTOFILL_ENABLED = "browser.formautofill.enabled"; +const TEST_SELECTORS = { + group: GROUP_AUTOFILL, + checkbox: CHECKBOX_AUTOFILL, +}; + +// Visibility of form autofill group should be hidden when opening +// preferences page. +add_task(function* test_aboutPreferences() { + yield BrowserTestUtils.withNewTab({gBrowser, url: PAGE_PREFS}, function* (browser) { + yield ContentTask.spawn(browser, TEST_SELECTORS, (args) => { + is(content.document.querySelector(args.group).hidden, true, + "Form Autofill group should be hidden"); + }); + }); +}); + +// Visibility of form autofill group should be visible when opening +// directly to privacy page. Checkbox is not checked by default. +add_task(function* test_aboutPreferencesPrivacy() { + yield BrowserTestUtils.withNewTab({gBrowser, url: PAGE_PRIVACY}, function* (browser) { + yield ContentTask.spawn(browser, TEST_SELECTORS, (args) => { + is(content.document.querySelector(args.group).hidden, false, + "Form Autofill group should be visible"); + is(content.document.querySelector(args.checkbox).checked, false, + "Checkbox should be unchecked"); + }); + }); +}); + +// Checkbox should be checked when form autofill is enabled. +add_task(function* test_autofillEnabledCheckbox() { + SpecialPowers.pushPrefEnv({set: [[PREF_AUTOFILL_ENABLED, true]]}); + + yield BrowserTestUtils.withNewTab({gBrowser, url: PAGE_PRIVACY}, function* (browser) { + yield ContentTask.spawn(browser, TEST_SELECTORS, (args) => { + is(content.document.querySelector(args.group).hidden, false, + "Form Autofill group should be visible"); + is(content.document.querySelector(args.checkbox).checked, true, + "Checkbox should be checked when Form Autofill is enabled"); + }); + }); +}); diff --git a/browser/extensions/formautofill/test/unit/head.js b/browser/extensions/formautofill/test/unit/head.js index 43ac5f8e2072..47b927c8b7ee 100644 --- a/browser/extensions/formautofill/test/unit/head.js +++ b/browser/extensions/formautofill/test/unit/head.js @@ -2,7 +2,7 @@ * Provides infrastructure for automated formautofill components tests. */ -/* exported loadFormAutofillContent, getTempFile */ +/* exported loadFormAutofillContent, getTempFile, sinon */ "use strict"; @@ -18,6 +18,14 @@ XPCOMUtils.defineLazyModuleGetter(this, "DownloadPaths", XPCOMUtils.defineLazyModuleGetter(this, "FileUtils", "resource://gre/modules/FileUtils.jsm"); +do_get_profile(); + +// Setup the environment for sinon. +Cu.import("resource://gre/modules/Timer.jsm"); +let self = {}; // eslint-disable-line no-unused-vars +var sinon; +Services.scriptloader.loadSubScript("resource://testing-common/sinon-1.16.1.js"); + // Load our bootstrap extension manifest so we can access our chrome/resource URIs. const EXTENSION_ID = "formautofill@mozilla.org"; let extensionDir = Services.dirsvc.get("GreD", Ci.nsIFile); @@ -40,6 +48,8 @@ let gFileCounter = Math.floor(Math.random() * 1000000); function loadFormAutofillContent() { let facGlobal = { addEventListener() {}, + addMessageListener() {}, + sendAsyncMessage() {}, }; let loader = Cc["@mozilla.org/moz/jssubscript-loader;1"] .getService(Ci.mozIJSSubScriptLoader); @@ -83,12 +93,12 @@ function getTempFile(leafName) { return file; } -add_task(function* test_common_initialize() { +add_task(function* head_initialize() { Services.prefs.setBoolPref("browser.formautofill.experimental", true); Services.prefs.setBoolPref("dom.forms.autocomplete.experimental", true); // Clean up after every test. - do_register_cleanup(() => { + do_register_cleanup(function head_cleanup() { Services.prefs.clearUserPref("browser.formautofill.experimental"); Services.prefs.clearUserPref("dom.forms.autocomplete.experimental"); }); diff --git a/browser/extensions/formautofill/test/unit/test_enabledStatus.js b/browser/extensions/formautofill/test/unit/test_enabledStatus.js new file mode 100644 index 000000000000..75479d524c25 --- /dev/null +++ b/browser/extensions/formautofill/test/unit/test_enabledStatus.js @@ -0,0 +1,50 @@ +/* + * Test for status handling in Form Autofill Parent. + */ + +"use strict"; + +Cu.import("resource://formautofill/FormAutofillParent.jsm"); + +add_task(function* test_enabledStatus_init() { + let formAutofillParent = new FormAutofillParent(); + sinon.spy(formAutofillParent, "_onStatusChanged"); + + // Default status is false before initialization + do_check_eq(formAutofillParent._enabled, false); + + formAutofillParent.init(); + do_check_eq(formAutofillParent._onStatusChanged.called, true); + + formAutofillParent._uninit(); +}); + +add_task(function* test_enabledStatus_observe() { + let formAutofillParent = new FormAutofillParent(); + sinon.stub(formAutofillParent, "_getStatus"); + sinon.spy(formAutofillParent, "_onStatusChanged"); + + // _enabled = _getStatus() => No need to trigger onStatusChanged + formAutofillParent._enabled = true; + formAutofillParent._getStatus.returns(true); + formAutofillParent.observe(null, "nsPref:changed", "browser.formautofill.enabled"); + do_check_eq(formAutofillParent._onStatusChanged.called, false); + + // _enabled != _getStatus() => Need to trigger onStatusChanged + formAutofillParent._getStatus.returns(false); + formAutofillParent.observe(null, "nsPref:changed", "browser.formautofill.enabled"); + do_check_eq(formAutofillParent._onStatusChanged.called, true); +}); + +add_task(function* test_enabledStatus_getStatus() { + let formAutofillParent = new FormAutofillParent(); + do_register_cleanup(function cleanup() { + Services.prefs.clearUserPref("browser.formautofill.enabled"); + }); + + Services.prefs.setBoolPref("browser.formautofill.enabled", true); + do_check_eq(formAutofillParent._getStatus(), true); + + Services.prefs.setBoolPref("browser.formautofill.enabled", false); + do_check_eq(formAutofillParent._getStatus(), false); +}); diff --git a/browser/extensions/formautofill/test/unit/test_populateFieldValues.js b/browser/extensions/formautofill/test/unit/test_populateFieldValues.js index becb95e9366c..91c09a673480 100644 --- a/browser/extensions/formautofill/test/unit/test_populateFieldValues.js +++ b/browser/extensions/formautofill/test/unit/test_populateFieldValues.js @@ -34,9 +34,10 @@ const TEST_PROFILE = { }; add_task(function* test_populateFieldValues() { - FormAutofillParent.init(); + let formAutofillParent = new FormAutofillParent(); + formAutofillParent.init(); - let store = FormAutofillParent.getProfileStore(); + let store = formAutofillParent.getProfileStore(); do_check_neq(store, null); store.get = function(guid) { @@ -51,7 +52,7 @@ add_task(function* test_populateFieldValues() { }; yield new Promise((resolve) => { - FormAutofillParent.receiveMessage({ + formAutofillParent.receiveMessage({ name: "FormAutofill:PopulateFieldValues", data: { guid: TEST_GUID, @@ -78,15 +79,16 @@ add_task(function* test_populateFieldValues() { do_check_eq(notifyUsedCalledCount, 1); - FormAutofillParent._uninit(); - do_check_null(FormAutofillParent.getProfileStore()); + formAutofillParent._uninit(); + do_check_null(formAutofillParent.getProfileStore()); }); add_task(function* test_populateFieldValues_with_invalid_guid() { - FormAutofillParent.init(); + let formAutofillParent = new FormAutofillParent(); + formAutofillParent.init(); Assert.throws(() => { - FormAutofillParent.receiveMessage({ + formAutofillParent.receiveMessage({ name: "FormAutofill:PopulateFieldValues", data: { guid: "invalid-guid", @@ -96,5 +98,5 @@ add_task(function* test_populateFieldValues_with_invalid_guid() { }); }, /No matching profile\./); - FormAutofillParent._uninit(); + formAutofillParent._uninit(); }); diff --git a/browser/extensions/formautofill/test/unit/xpcshell.ini b/browser/extensions/formautofill/test/unit/xpcshell.ini index 6ec2c03cb2c8..110b698ec742 100644 --- a/browser/extensions/formautofill/test/unit/xpcshell.ini +++ b/browser/extensions/formautofill/test/unit/xpcshell.ini @@ -5,6 +5,7 @@ support-files = [test_autofillFormFields.js] [test_collectFormFields.js] +[test_enabledStatus.js] [test_getFormInputDetails.js] [test_markAsAutofillField.js] [test_populateFieldValues.js] diff --git a/browser/locales/Makefile.in b/browser/locales/Makefile.in index 7f76774f8bca..bf7892b382a0 100644 --- a/browser/locales/Makefile.in +++ b/browser/locales/Makefile.in @@ -97,6 +97,9 @@ libs-%: @$(MAKE) -C ../../toolkit/locales libs-$* XPI_ROOT_APPID='$(XPI_ROOT_APPID)' @$(MAKE) -C ../../services/sync/locales AB_CD=$* XPI_NAME=locale-$* @$(MAKE) -C ../../extensions/spellcheck/locales AB_CD=$* XPI_NAME=locale-$* +ifndef RELEASE_OR_BETA + @$(MAKE) -C ../extensions/formautofill/locale AB_CD=$* XPI_NAME=locale-$* +endif @$(MAKE) -C ../extensions/pocket/locale AB_CD=$* XPI_NAME=locale-$* ifndef RELEASE_OR_BETA @$(MAKE) -C ../extensions/presentation/locale AB_CD=$* XPI_NAME=locale-$* diff --git a/devtools/client/devtools-startup.js b/devtools/client/devtools-startup.js index 2271dd7909c1..8dda5949eabe 100644 --- a/devtools/client/devtools-startup.js +++ b/devtools/client/devtools-startup.js @@ -104,12 +104,14 @@ DevToolsStartup.prototype = { return Services.prefs.getBoolPref(pref); }); } catch (ex) { + let { console } = Cu.import("resource://gre/modules/Console.jsm", {}); console.error(ex); return false; } if (!remoteDebuggingEnabled) { let errorMsg = "Could not run chrome debugger! You need the following " + "prefs to be set to true: " + kDebuggerPrefs.join(", "); + let { console } = Cu.import("resource://gre/modules/Console.jsm", {}); console.error(new Error(errorMsg)); // Dump as well, as we're doing this from a commandline, make sure people // don't miss it: diff --git a/devtools/client/inspector/inspector.js b/devtools/client/inspector/inspector.js index 44a8190f78c5..068eeb526990 100644 --- a/devtools/client/inspector/inspector.js +++ b/devtools/client/inspector/inspector.js @@ -34,6 +34,8 @@ const {CommandUtils} = require("devtools/client/shared/developer-toolbar"); const {ViewHelpers} = require("devtools/client/shared/widgets/view-helpers"); const clipboardHelper = require("devtools/shared/platform/clipboard"); +const Store = require("devtools/client/inspector/store"); + const {LocalizationHelper, localizeMarkup} = require("devtools/shared/l10n"); const INSPECTOR_L10N = new LocalizationHelper("devtools/client/locales/inspector.properties"); @@ -92,6 +94,7 @@ function Inspector(toolbox) { this.panelWin.inspector = this; this.highlighters = new HighlightersOverlay(this); + this.store = Store(); this.telemetry = new Telemetry(); this.nodeMenuTriggerInfo = null; @@ -910,7 +913,6 @@ Inspector.prototype = { this.cancelUpdate(); this.target.off("will-navigate", this._onBeforeNavigate); - this.target.off("thread-paused", this.updateDebuggerPausedWarning); this.target.off("thread-resumed", this.updateDebuggerPausedWarning); this._toolbox.off("select", this.updateDebuggerPausedWarning); @@ -942,8 +944,6 @@ Inspector.prototype = { this.teardownSplitter(); - this.sidebar = null; - this.teardownToolbar(); this.breadcrumbs.destroy(); this.selection.off("new-node-front", this.onNewSelection); @@ -951,12 +951,14 @@ Inspector.prototype = { let markupDestroyer = this._destroyMarkup(); - this.panelWin.inspector = null; - this.target = null; - this.panelDoc = null; - this.panelWin = null; - this.breadcrumbs = null; this._toolbox = null; + this.breadcrumbs = null; + this.panelDoc = null; + this.panelWin.inspector = null; + this.panelWin = null; + this.sidebar = null; + this.store = null; + this.target = null; this.highlighters.destroy(); this.highlighters = null; diff --git a/devtools/client/inspector/layout/layout.js b/devtools/client/inspector/layout/layout.js index 768b3d89dad5..fa2e96087c24 100644 --- a/devtools/client/inspector/layout/layout.js +++ b/devtools/client/inspector/layout/layout.js @@ -26,7 +26,6 @@ const { } = require("./actions/highlighter-settings"); const App = createFactory(require("./components/App")); -const Store = require("./store"); const EditingSession = require("./utils/editing-session"); @@ -42,7 +41,7 @@ function LayoutView(inspector, window) { this.document = window.document; this.highlighters = inspector.highlighters; this.inspector = inspector; - this.store = null; + this.store = inspector.store; this.walker = this.inspector.walker; this.updateBoxModel = this.updateBoxModel.bind(this); @@ -72,7 +71,6 @@ LayoutView.prototype = { } this.layoutInspector = yield this.inspector.walker.getLayoutInspector(); - let store = this.store = Store(); this.loadHighlighterSettings(); @@ -232,7 +230,7 @@ LayoutView.prototype = { }); let provider = createElement(Provider, { - store, + store: this.store, id: "layoutview", title: INSPECTOR_L10N.getStr("inspector.sidebar.layoutViewTitle2"), key: "layoutview", diff --git a/devtools/client/inspector/layout/moz.build b/devtools/client/inspector/layout/moz.build index 8575deedfb74..4d425f932182 100644 --- a/devtools/client/inspector/layout/moz.build +++ b/devtools/client/inspector/layout/moz.build @@ -13,6 +13,5 @@ DIRS += [ DevToolsModules( 'layout.js', - 'store.js', 'types.js', ) diff --git a/devtools/client/inspector/layout/reducers/index.js b/devtools/client/inspector/layout/reducers/index.js deleted file mode 100644 index 4ab7d2eb949d..000000000000 --- a/devtools/client/inspector/layout/reducers/index.js +++ /dev/null @@ -1,9 +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/. */ - -"use strict"; - -exports.boxModel = require("./box-model"); -exports.grids = require("./grids"); -exports.highlighterSettings = require("./highlighter-settings"); diff --git a/devtools/client/inspector/layout/reducers/moz.build b/devtools/client/inspector/layout/reducers/moz.build index 5e157a4bd728..50e631af17b1 100644 --- a/devtools/client/inspector/layout/reducers/moz.build +++ b/devtools/client/inspector/layout/reducers/moz.build @@ -8,5 +8,4 @@ DevToolsModules( 'box-model.js', 'grids.js', 'highlighter-settings.js', - 'index.js', ) diff --git a/devtools/client/inspector/moz.build b/devtools/client/inspector/moz.build index 9b35cf590f22..1c5f3e58dd4c 100644 --- a/devtools/client/inspector/moz.build +++ b/devtools/client/inspector/moz.build @@ -17,10 +17,12 @@ DevToolsModules( 'inspector-commands.js', 'inspector-search.js', 'panel.js', + 'reducers.js', + 'store.js', 'toolsidebar.js', ) BROWSER_CHROME_MANIFESTS += ['test/browser.ini'] -with Files('**'): - BUG_COMPONENT = ('Firefox', 'Developer Tools: Inspector') +with Files('**'): + BUG_COMPONENT = ('Firefox', 'Developer Tools: Inspector') diff --git a/devtools/client/inspector/reducers.js b/devtools/client/inspector/reducers.js new file mode 100644 index 000000000000..6c09e49c49e4 --- /dev/null +++ b/devtools/client/inspector/reducers.js @@ -0,0 +1,12 @@ +/* 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/. */ + +"use strict"; + +// This file exposes the Redux reducers of the box model, grid and grid highlighter +// settings. + +exports.boxModel = require("devtools/client/inspector/layout/reducers/box-model"); +exports.grids = require("devtools/client/inspector/layout/reducers/grids"); +exports.highlighterSettings = require("devtools/client/inspector/layout/reducers/highlighter-settings"); diff --git a/devtools/client/inspector/layout/store.js b/devtools/client/inspector/store.js similarity index 92% rename from devtools/client/inspector/layout/store.js rename to devtools/client/inspector/store.js index 5069dda2649e..2b406e5781aa 100644 --- a/devtools/client/inspector/layout/store.js +++ b/devtools/client/inspector/store.js @@ -6,7 +6,7 @@ const { combineReducers } = require("devtools/client/shared/vendor/redux"); const createStore = require("devtools/client/shared/redux/create-store"); -const reducers = require("./reducers/index"); +const reducers = require("devtools/client/inspector/reducers"); const flags = require("devtools/shared/flags"); module.exports = function () { diff --git a/docshell/base/PendingGlobalHistoryEntry.cpp b/docshell/base/PendingGlobalHistoryEntry.cpp index ec587e6727f7..116a77a00193 100644 --- a/docshell/base/PendingGlobalHistoryEntry.cpp +++ b/docshell/base/PendingGlobalHistoryEntry.cpp @@ -39,7 +39,7 @@ PendingGlobalHistoryEntry::ApplyChanges(IHistory* aHistory) mVisits.Clear(); for (const URITitle& title : mTitles) { - aHistory->SetURITitle(title.mURI, title.mTitle); + rv = aHistory->SetURITitle(title.mURI, title.mTitle); NS_ENSURE_SUCCESS(rv, rv); } mTitles.Clear(); diff --git a/dom/base/nsFrameMessageManager.cpp b/dom/base/nsFrameMessageManager.cpp index 837f2ddbb56d..ebccf50c8598 100644 --- a/dom/base/nsFrameMessageManager.cpp +++ b/dom/base/nsFrameMessageManager.cpp @@ -1655,7 +1655,7 @@ nsMessageManagerScriptExecutor::InitChildGlobalInternal( const uint32_t flags = nsIXPConnect::INIT_JS_STANDARD_CLASSES; JS::CompartmentOptions options; - options.creationOptions().setZone(JS::SystemZone); + options.creationOptions().setSystemZone(); options.behaviors().setVersion(JSVERSION_LATEST); if (xpc::SharedMemoryEnabled()) { diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp index d8ab0709fbd9..a0fca5dfaa65 100644 --- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -2736,7 +2736,7 @@ CreateNativeGlobalForInner(JSContext* aCx, } if (top && top->GetGlobalJSObject()) { - options.creationOptions().setSameZoneAs(top->GetGlobalJSObject()); + options.creationOptions().setExistingZone(top->GetGlobalJSObject()); } options.creationOptions().setSecureContext(aIsSecureContext); diff --git a/dom/base/nsJSEnvironment.cpp b/dom/base/nsJSEnvironment.cpp index af44f2d8815e..d2e56e8160f4 100644 --- a/dom/base/nsJSEnvironment.cpp +++ b/dom/base/nsJSEnvironment.cpp @@ -111,7 +111,8 @@ const size_t gStackSize = 8192; // Maximum amount of time that should elapse between incremental GC slices #define NS_INTERSLICE_GC_DELAY 100 // ms -// If we haven't painted in 100ms, we allow for a longer GC budget +// If we haven't painted in 100ms, or we're in e10s parent process and +// user isn't active, we allow for a longer GC budget. #define NS_INTERSLICE_GC_BUDGET 40 // ms // The amount of time we wait between a request to CC (after GC ran) @@ -188,7 +189,8 @@ static bool sNeedsFullGC = false; static bool sNeedsGCAfterCC = false; static bool sIncrementalCC = false; static bool sDidPaintAfterPreviousICCSlice = false; - +static bool sUserActive = false; +static int32_t sActiveIntersliceGCBudget = 0; // ms; static nsScriptNameSpaceManager *gNameSpaceManager; static PRTime sFirstCollectionTime; @@ -348,10 +350,12 @@ nsJSEnvironmentObserver::Observe(nsISupports* aSubject, const char* aTopic, } } } else if (!nsCRT::strcmp(aTopic, "user-interaction-inactive")) { + sUserActive = false; if (sCompactOnUserInactive) { nsJSContext::PokeShrinkingGC(); } } else if (!nsCRT::strcmp(aTopic, "user-interaction-active")) { + sUserActive = true; nsJSContext::KillShrinkingGCTimer(); if (sIsCompactingOnUserInactive) { JS::AbortIncrementalGC(sContext); @@ -1726,10 +1730,13 @@ void InterSliceGCTimerFired(nsITimer *aTimer, void *aClosure) { nsJSContext::KillInterSliceGCTimer(); + bool e10sParent = XRE_IsParentProcess() && BrowserTabsRemoteAutostart(); + int64_t budget = e10sParent && sUserActive && sActiveIntersliceGCBudget ? + sActiveIntersliceGCBudget : NS_INTERSLICE_GC_BUDGET; nsJSContext::GarbageCollectNow(JS::gcreason::INTER_SLICE_GC, nsJSContext::IncrementalGC, nsJSContext::NonShrinkingGC, - NS_INTERSLICE_GC_BUDGET); + budget); } // static @@ -2320,6 +2327,7 @@ SetMemoryGCSliceTimePrefChangedCallback(const char* aPrefName, void* aClosure) int32_t pref = Preferences::GetInt(aPrefName, -1); // handle overflow and negative pref values if (pref > 0 && pref < 100000) + sActiveIntersliceGCBudget = pref; JS_SetGCParameter(sContext, JSGC_SLICE_TIME_BUDGET, pref); } diff --git a/dom/bindings/Codegen.py b/dom/bindings/Codegen.py index dfecbfdfa1a7..886489132774 100644 --- a/dom/bindings/Codegen.py +++ b/dom/bindings/Codegen.py @@ -2389,7 +2389,7 @@ class MethodDefiner(PropertyDefiner): "methodInfo": False, "selfHostedName": "ArrayValues", "length": 0, - "flags": "JSPROP_ENUMERATE", + "flags": "0", # Not enumerable, per spec. "condition": MemberCondition() }) @@ -3073,25 +3073,28 @@ class CGCreateInterfaceObjectsMethod(CGAbstractMethod): symbolJSID=symbolJSID)) defineFn = "JS_DefinePropertyById" prop = "iteratorId" + enumFlags = "0" # Not enumerable, per spec. elif alias.startswith("@@"): raise TypeError("Can't handle any well-known Symbol other than @@iterator") else: getSymbolJSID = None defineFn = "JS_DefineProperty" prop = '"%s"' % alias - return CGList([ - getSymbolJSID, # XXX If we ever create non-enumerable properties that can # be aliased, we should consider making the aliases # match the enumerability of the property being aliased. + enumFlags = "JSPROP_ENUMERATE" + return CGList([ + getSymbolJSID, CGGeneric(fill( """ - if (!${defineFn}(aCx, proto, ${prop}, aliasedVal, JSPROP_ENUMERATE)) { + if (!${defineFn}(aCx, proto, ${prop}, aliasedVal, ${enumFlags})) { $*{failureCode} } """, defineFn=defineFn, prop=prop, + enumFlags=enumFlags, failureCode=failureCode)) ], "\n") diff --git a/dom/bindings/ErrorResult.h b/dom/bindings/ErrorResult.h index 6d485661b092..2aaa2b4cab4a 100644 --- a/dom/bindings/ErrorResult.h +++ b/dom/bindings/ErrorResult.h @@ -186,6 +186,17 @@ public: nsresult StealNSResult() { nsresult rv = ErrorCode(); SuppressException(); + // Don't propagate out our internal error codes that have special meaning. + if (rv == NS_ERROR_TYPE_ERR || + rv == NS_ERROR_RANGE_ERR || + rv == NS_ERROR_DOM_JS_EXCEPTION || + rv == NS_ERROR_DOM_DOMEXCEPTION) { + // What about NS_ERROR_DOM_EXCEPTION_ON_JSCONTEXT? I guess that can be + // legitimately passed on through.... + // What to pick here? + return NS_ERROR_DOM_INVALID_STATE_ERR; + } + return rv; } @@ -395,7 +406,15 @@ private: MOZ_ASSERT(aRv != NS_ERROR_XPC_NOT_ENOUGH_ARGS, "May need to bring back ThrowNotEnoughArgsError"); MOZ_ASSERT(aRv != NS_ERROR_DOM_EXCEPTION_ON_JSCONTEXT, "Use NoteJSContextException"); - mResult = aRv; + // Don't trust people anyway, though. + if (aRv == NS_ERROR_TYPE_ERR || + aRv == NS_ERROR_RANGE_ERR || + aRv == NS_ERROR_DOM_JS_EXCEPTION || + aRv == NS_ERROR_DOM_DOMEXCEPTION) { + mResult = NS_ERROR_UNEXPECTED; + } else { + mResult = aRv; + } } void ClearMessage(); diff --git a/dom/bindings/SimpleGlobalObject.cpp b/dom/bindings/SimpleGlobalObject.cpp index d4d1787f10a3..5659138c852f 100644 --- a/dom/bindings/SimpleGlobalObject.cpp +++ b/dom/bindings/SimpleGlobalObject.cpp @@ -110,7 +110,7 @@ SimpleGlobalObject::Create(GlobalType globalType, JS::Handle proto) // lots of zones for what are probably very short-lived // compartments. This should help them be GCed quicker and take up // less memory before they're GCed. - .setZone(JS::SystemZone); + .setSystemZone(); if (NS_IsMainThread()) { nsCOMPtr principal = nsNullPrincipal::Create(); diff --git a/dom/canvas/TexUnpackBlob.cpp b/dom/canvas/TexUnpackBlob.cpp index e964a58fd957..4f003a7130e6 100644 --- a/dom/canvas/TexUnpackBlob.cpp +++ b/dom/canvas/TexUnpackBlob.cpp @@ -314,15 +314,16 @@ TexUnpackBlob::ConvertIfNeeded(WebGLContext* webgl, const char* funcName, const auto dstOrigin = gl::OriginPos::BottomLeft; if (srcFormat != dstFormat) { - webgl->GenerateWarning("%s: Conversion requires pixel reformatting.", funcName); + webgl->GeneratePerfWarning("%s: Conversion requires pixel reformatting.", + funcName); } else if (mSrcIsPremult != dstIsPremult) { - webgl->GenerateWarning("%s: Conversion requires change in" - "alpha-premultiplication.", - funcName); + webgl->GeneratePerfWarning("%s: Conversion requires change in" + "alpha-premultiplication.", + funcName); } else if (srcOrigin != dstOrigin) { - webgl->GenerateWarning("%s: Conversion requires y-flip.", funcName); + webgl->GeneratePerfWarning("%s: Conversion requires y-flip.", funcName); } else if (srcStride != dstStride) { - webgl->GenerateWarning("%s: Conversion requires change in stride.", funcName); + webgl->GeneratePerfWarning("%s: Conversion requires change in stride.", funcName); } else { return true; } @@ -642,9 +643,9 @@ TexUnpackImage::TexOrSubImage(bool isSubImage, bool needsRespec, const char* fun return true; } while (false); - webgl->GenerateWarning("%s: Failed to hit GPU-copy fast-path. Falling back to CPU" - " upload.", - funcName); + webgl->GeneratePerfWarning("%s: Failed to hit GPU-copy fast-path. Falling back to CPU" + " upload.", + funcName); const RefPtr surf = mImage->GetAsSourceSurface(); diff --git a/dom/html/test/test_formSubmission.html b/dom/html/test/test_formSubmission.html index aeaabc3cff92..96f4e1ff503d 100644 --- a/dom/html/test/test_formSubmission.html +++ b/dom/html/test/test_formSubmission.html @@ -681,9 +681,7 @@ function setDisabled(list, state) { var gen; function onFilesSet() { gen = runTest(); - addLoadEvent(function() { - gen.next(); - }); + gen.next(); } function* runTest() { diff --git a/dom/indexedDB/test/helpers.js b/dom/indexedDB/test/helpers.js index 9a167d73d5c9..def9d9472b55 100644 --- a/dom/indexedDB/test/helpers.js +++ b/dom/indexedDB/test/helpers.js @@ -44,7 +44,7 @@ function clearAllDatabases(callback) { var testHarnessGenerator = testHarnessSteps(); testHarnessGenerator.next(); -function testHarnessSteps() { +function* testHarnessSteps() { function nextTestHarnessStep(val) { testHarnessGenerator.next(val); } diff --git a/dom/indexedDB/test/unit/test_bad_origin_directory.js b/dom/indexedDB/test/unit/test_bad_origin_directory.js index c2db1c82bdae..2330722a740f 100644 --- a/dom/indexedDB/test/unit/test_bad_origin_directory.js +++ b/dom/indexedDB/test/unit/test_bad_origin_directory.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const url = "ftp://ftp.example.com"; const name = "test_bad_origin_directory.js"; diff --git a/dom/indexedDB/test/unit/test_bug1056939.js b/dom/indexedDB/test/unit/test_bug1056939.js index 49bccd9ffded..9d733690be43 100644 --- a/dom/indexedDB/test/unit/test_bug1056939.js +++ b/dom/indexedDB/test/unit/test_bug1056939.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const dbName1 = "upgrade_test"; const dbName2 = "testing.foobar"; diff --git a/dom/indexedDB/test/unit/test_cleanup_transaction.js b/dom/indexedDB/test/unit/test_cleanup_transaction.js index d21b871fc2a1..ea6b578e673d 100644 --- a/dom/indexedDB/test/unit/test_cleanup_transaction.js +++ b/dom/indexedDB/test/unit/test_cleanup_transaction.js @@ -7,7 +7,7 @@ var disableWorkerTest = "Need a way to set temporary prefs from a worker"; var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const spec = "http://foo.com"; const name = diff --git a/dom/indexedDB/test/unit/test_cursor_cycle.js b/dom/indexedDB/test/unit/test_cursor_cycle.js index 795a9b63d708..38255ba4c940 100644 --- a/dom/indexedDB/test/unit/test_cursor_cycle.js +++ b/dom/indexedDB/test/unit/test_cursor_cycle.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const Bob = { ss: "237-23-7732", name: "Bob" }; diff --git a/dom/indexedDB/test/unit/test_database_close_without_onclose.js b/dom/indexedDB/test/unit/test_database_close_without_onclose.js index e4ba62335b31..d0a9b7d73479 100644 --- a/dom/indexedDB/test/unit/test_database_close_without_onclose.js +++ b/dom/indexedDB/test/unit/test_database_close_without_onclose.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const name = this.window ? window.location.pathname : "test_database_close_without_onclose.js"; diff --git a/dom/indexedDB/test/unit/test_defaultStorageUpgrade.js b/dom/indexedDB/test/unit/test_defaultStorageUpgrade.js index b2ad3c7e5023..36243358dbdc 100644 --- a/dom/indexedDB/test/unit/test_defaultStorageUpgrade.js +++ b/dom/indexedDB/test/unit/test_defaultStorageUpgrade.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const openParams = [ // This one lives in storage/default/http+++localhost diff --git a/dom/indexedDB/test/unit/test_file_copy_failure.js b/dom/indexedDB/test/unit/test_file_copy_failure.js index 586149233f26..20b607cc8275 100644 --- a/dom/indexedDB/test/unit/test_file_copy_failure.js +++ b/dom/indexedDB/test/unit/test_file_copy_failure.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const name = "test_file_copy_failure.js"; const objectStoreName = "Blobs"; diff --git a/dom/indexedDB/test/unit/test_globalObjects_ipc.js b/dom/indexedDB/test/unit/test_globalObjects_ipc.js index 641af0febcff..cc1d139f284d 100644 --- a/dom/indexedDB/test/unit/test_globalObjects_ipc.js +++ b/dom/indexedDB/test/unit/test_globalObjects_ipc.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { // Test for IDBKeyRange and indexedDB availability in ipcshell. run_test_in_child("./GlobalObjectsChild.js", function() { diff --git a/dom/indexedDB/test/unit/test_globalObjects_other.js b/dom/indexedDB/test/unit/test_globalObjects_other.js index a1338459c83b..69d3d725a5c9 100644 --- a/dom/indexedDB/test/unit/test_globalObjects_other.js +++ b/dom/indexedDB/test/unit/test_globalObjects_other.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { let ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); diff --git a/dom/indexedDB/test/unit/test_globalObjects_xpc.js b/dom/indexedDB/test/unit/test_globalObjects_xpc.js index 57611d046900..c85eb87bbbfc 100644 --- a/dom/indexedDB/test/unit/test_globalObjects_xpc.js +++ b/dom/indexedDB/test/unit/test_globalObjects_xpc.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const name = "Splendid Test"; diff --git a/dom/indexedDB/test/unit/test_idbSubdirUpgrade.js b/dom/indexedDB/test/unit/test_idbSubdirUpgrade.js index 09f4fd525e74..bf5766ee93bc 100644 --- a/dom/indexedDB/test/unit/test_idbSubdirUpgrade.js +++ b/dom/indexedDB/test/unit/test_idbSubdirUpgrade.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const openParams = [ // This one lives in storage/default/http+++www.mozilla.org diff --git a/dom/indexedDB/test/unit/test_idle_maintenance.js b/dom/indexedDB/test/unit/test_idle_maintenance.js index bb554697c5e3..51bcf0b11c93 100644 --- a/dom/indexedDB/test/unit/test_idle_maintenance.js +++ b/dom/indexedDB/test/unit/test_idle_maintenance.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { let uri = Cc["@mozilla.org/network/io-service;1"]. getService(Ci.nsIIOService). diff --git a/dom/indexedDB/test/unit/test_invalidate.js b/dom/indexedDB/test/unit/test_invalidate.js index fa96ae9ed84e..b9aad4814842 100644 --- a/dom/indexedDB/test/unit/test_invalidate.js +++ b/dom/indexedDB/test/unit/test_invalidate.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const databaseName = ("window" in this) ? window.location.pathname : "Test"; diff --git a/dom/indexedDB/test/unit/test_metadata2Restore.js b/dom/indexedDB/test/unit/test_metadata2Restore.js index e1f53284471e..b454025404f1 100644 --- a/dom/indexedDB/test/unit/test_metadata2Restore.js +++ b/dom/indexedDB/test/unit/test_metadata2Restore.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const openParams = [ // This one lives in storage/permanent/chrome diff --git a/dom/indexedDB/test/unit/test_metadataRestore.js b/dom/indexedDB/test/unit/test_metadataRestore.js index d5ac96b000f3..b4d36ab2de0c 100644 --- a/dom/indexedDB/test/unit/test_metadataRestore.js +++ b/dom/indexedDB/test/unit/test_metadataRestore.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const openParams = [ // This one lives in storage/permanent/chrome diff --git a/dom/indexedDB/test/unit/test_mutableFileUpgrade.js b/dom/indexedDB/test/unit/test_mutableFileUpgrade.js index 7862c7a90d64..829281e353f1 100644 --- a/dom/indexedDB/test/unit/test_mutableFileUpgrade.js +++ b/dom/indexedDB/test/unit/test_mutableFileUpgrade.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const dbNames = [ "No files", diff --git a/dom/indexedDB/test/unit/test_oldDirectories.js b/dom/indexedDB/test/unit/test_oldDirectories.js index 2e7a194530ad..f118c4003c4c 100644 --- a/dom/indexedDB/test/unit/test_oldDirectories.js +++ b/dom/indexedDB/test/unit/test_oldDirectories.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { // This lives in storage/default/http+++www.mozilla.org const url = "http://www.mozilla.org"; diff --git a/dom/indexedDB/test/unit/test_open_for_principal.js b/dom/indexedDB/test/unit/test_open_for_principal.js index 9b58ea47623d..dde9c2522b16 100644 --- a/dom/indexedDB/test/unit/test_open_for_principal.js +++ b/dom/indexedDB/test/unit/test_open_for_principal.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const name = this.window ? window.location.pathname : "Splendid Test"; diff --git a/dom/indexedDB/test/unit/test_persistenceType.js b/dom/indexedDB/test/unit/test_persistenceType.js index 0f5dd72a2deb..3953acbb01d2 100644 --- a/dom/indexedDB/test/unit/test_persistenceType.js +++ b/dom/indexedDB/test/unit/test_persistenceType.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const name = "Splendid Test"; const version = 1; diff --git a/dom/indexedDB/test/unit/test_quotaExceeded_recovery.js b/dom/indexedDB/test/unit/test_quotaExceeded_recovery.js index 4ba7c77c4b6b..596667bac842 100644 --- a/dom/indexedDB/test/unit/test_quotaExceeded_recovery.js +++ b/dom/indexedDB/test/unit/test_quotaExceeded_recovery.js @@ -7,7 +7,7 @@ var disableWorkerTest = "Need a way to set temporary prefs from a worker"; var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const spec = "http://foo.com"; const name = diff --git a/dom/indexedDB/test/unit/test_schema18upgrade.js b/dom/indexedDB/test/unit/test_schema18upgrade.js index f2069018f9f5..17fea4af9e5a 100644 --- a/dom/indexedDB/test/unit/test_schema18upgrade.js +++ b/dom/indexedDB/test/unit/test_schema18upgrade.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const testName = "schema18upgrade"; const testKeys = [ diff --git a/dom/indexedDB/test/unit/test_schema21upgrade.js b/dom/indexedDB/test/unit/test_schema21upgrade.js index 2cd6e45b24ed..5c9730f602bc 100644 --- a/dom/indexedDB/test/unit/test_schema21upgrade.js +++ b/dom/indexedDB/test/unit/test_schema21upgrade.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const testName = "schema21upgrade"; const testKeys = [ diff --git a/dom/indexedDB/test/unit/test_schema23upgrade.js b/dom/indexedDB/test/unit/test_schema23upgrade.js index a5758f2888d8..2954ea8ae797 100644 --- a/dom/indexedDB/test/unit/test_schema23upgrade.js +++ b/dom/indexedDB/test/unit/test_schema23upgrade.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const openParams = [ // This one lives in storage/default/http+++www.mozilla.org diff --git a/dom/indexedDB/test/unit/test_setVersion_events.js b/dom/indexedDB/test/unit/test_setVersion_events.js index 18e3f003c241..f22a0e0bb779 100644 --- a/dom/indexedDB/test/unit/test_setVersion_events.js +++ b/dom/indexedDB/test/unit/test_setVersion_events.js @@ -20,8 +20,12 @@ function* testSteps() try { request.result; ok(false, "Getter should have thrown!"); - } catch (e if e.result == 0x8053000b /* NS_ERROR_DOM_INVALID_STATE_ERR */) { - ok(true, "Getter threw the right exception"); + } catch (e) { + if (e.result == 0x8053000b /* NS_ERROR_DOM_INVALID_STATE_ERR */) { + ok(true, "Getter threw the right exception"); + } else { + throw e; + } } request.onerror = errorHandler; diff --git a/dom/indexedDB/test/unit/test_snappyUpgrade.js b/dom/indexedDB/test/unit/test_snappyUpgrade.js index c2c1b1668da3..07df913e8c96 100644 --- a/dom/indexedDB/test/unit/test_snappyUpgrade.js +++ b/dom/indexedDB/test/unit/test_snappyUpgrade.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const name = "test_snappyUpgrade.js"; const objectStoreName = "test"; diff --git a/dom/indexedDB/test/unit/test_storagePersistentUpgrade.js b/dom/indexedDB/test/unit/test_storagePersistentUpgrade.js index 6d4724afe44e..73f6d7001bbf 100644 --- a/dom/indexedDB/test/unit/test_storagePersistentUpgrade.js +++ b/dom/indexedDB/test/unit/test_storagePersistentUpgrade.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const openParams = [ // This one lives in storage/default/http+++www.mozilla.org diff --git a/dom/indexedDB/test/unit/test_temporary_storage.js b/dom/indexedDB/test/unit/test_temporary_storage.js index e175a1c4a755..3d0e21c4eb4c 100644 --- a/dom/indexedDB/test/unit/test_temporary_storage.js +++ b/dom/indexedDB/test/unit/test_temporary_storage.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const name = this.window ? window.location.pathname : diff --git a/dom/indexedDB/test/unit/test_wasm_recompile.js b/dom/indexedDB/test/unit/test_wasm_recompile.js index 92a60a9cec75..2efef1a5ea54 100644 --- a/dom/indexedDB/test/unit/test_wasm_recompile.js +++ b/dom/indexedDB/test/unit/test_wasm_recompile.js @@ -5,7 +5,7 @@ var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const name = "test_wasm_recompile.js"; diff --git a/dom/indexedDB/test/unit/test_writer_starvation.js b/dom/indexedDB/test/unit/test_writer_starvation.js index 141bd1d93a79..40def18e70d9 100644 --- a/dom/indexedDB/test/unit/test_writer_starvation.js +++ b/dom/indexedDB/test/unit/test_writer_starvation.js @@ -12,7 +12,7 @@ if (!this.window) { var testGenerator = testSteps(); -function testSteps() +function* testSteps() { const name = this.window ? window.location.pathname : "Splendid Test"; diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp index 19f42ffa68d3..6c47609e9212 100644 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -1343,7 +1343,7 @@ ContentParent::ShutDownMessageManager() } void -ContentParent::MarkAsDead() +ContentParent::MarkAsTroubled() { if (sBrowserContentParents) { nsTArray* contentParents = @@ -1367,7 +1367,13 @@ ContentParent::MarkAsDead() sPrivateContent = nullptr; } } + mIsAvailable = false; +} +void +ContentParent::MarkAsDead() +{ + MarkAsTroubled(); mIsAlive = false; } @@ -1667,8 +1673,8 @@ ContentParent::ShouldKeepProcessAlive() const return false; } - // If we have already been marked as dead, don't prevent shutdown. - if (!IsAlive()) { + // If we have already been marked as troubled/dead, don't prevent shutdown. + if (!IsAvailable()) { return false; } @@ -1812,6 +1818,7 @@ ContentParent::InitializeMembers() mChildID = gContentChildID++; mGeolocationWatchID = -1; mNumDestroyingTabs = 0; + mIsAvailable = true; mIsAlive = true; mSendPermissionUpdates = false; mCalledClose = false; @@ -4705,9 +4712,14 @@ ContentParent::RecvNotifyPushSubscriptionModifiedObservers(const nsCString& aSco mozilla::ipc::IPCResult ContentParent::RecvNotifyLowMemory() { + MarkAsTroubled(); + + Telemetry::ScalarAdd(Telemetry::ScalarID::DOM_CONTENTPROCESS_TROUBLED_DUE_TO_MEMORY, 1); + #ifdef MOZ_CRASHREPORTER nsThread::SaveMemoryReportNearOOM(nsThread::ShouldSaveMemoryReport::kForceReport); #endif + return IPC_OK(); } diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h index 6aafb0bcc656..8095addae39e 100644 --- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -354,6 +354,10 @@ public: bool RequestRunToCompletion(); + bool IsAvailable() const + { + return mIsAvailable; + } bool IsAlive() const override; virtual bool IsForBrowser() const override @@ -615,6 +619,14 @@ protected: void OnCompositorUnexpectedShutdown() override; private: + /** + * A map of the remote content process type to a list of content parents + * currently available to host *new* tabs/frames of that type. + * + * If a content process is identified as troubled or dead, it will be + * removed from this list, but will still be in the sContentParents list for + * the GetAll/GetAllEvenIfDead APIs. + */ static nsClassHashtable>* sBrowserContentParents; static nsTArray* sPrivateContent; static StaticAutoPtr > sContentParents; @@ -694,6 +706,12 @@ private: */ bool ShouldKeepProcessAlive() const; + /** + * Mark this ContentParent as "troubled". This means that it is still alive, + * but it won't be returned for new tabs in GetNewOrUsedBrowserProcess. + */ + void MarkAsTroubled(); + /** * Mark this ContentParent as dead for the purposes of Get*(). * This method is idempotent. @@ -1138,10 +1156,12 @@ private: // sequence. Precisely, how many TabParents have called // NotifyTabDestroying() but not called NotifyTabDestroyed(). int32_t mNumDestroyingTabs; - // True only while this is ready to be used to host remote tabs. - // This must not be used for new purposes after mIsAlive goes to - // false, but some previously scheduled IPC traffic may still pass - // through. + // True only while this process is in "good health" and may be used for + // new remote tabs. + bool mIsAvailable; + // True only while remote content is being actively used from this process. + // After mIsAlive goes to false, some previously scheduled IPC traffic may + // still pass through. bool mIsAlive; bool mSendPermissionUpdates; diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp index 27c0897060f5..327a851215d3 100644 --- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp @@ -1075,10 +1075,10 @@ public: mWorkerPrivate = nullptr; } - nsresult Initialize(JSContext* aParentContext) + nsresult Initialize(JSRuntime* aParentRuntime) { nsresult rv = - CycleCollectedJSContext::Initialize(aParentContext, + CycleCollectedJSContext::Initialize(aParentRuntime, WORKER_DEFAULT_RUNTIME_HEAPSIZE, WORKER_DEFAULT_NURSERY_SIZE); if (NS_WARN_IF(NS_FAILED(rv))) { @@ -1187,7 +1187,7 @@ class WorkerThreadPrimaryRunnable final : public Runnable { WorkerPrivate* mWorkerPrivate; RefPtr mThread; - JSContext* mParentContext; + JSRuntime* mParentRuntime; class FinishedRunnable final : public Runnable { @@ -1213,8 +1213,8 @@ class WorkerThreadPrimaryRunnable final : public Runnable public: WorkerThreadPrimaryRunnable(WorkerPrivate* aWorkerPrivate, WorkerThread* aThread, - JSContext* aParentContext) - : mWorkerPrivate(aWorkerPrivate), mThread(aThread), mParentContext(aParentContext) + JSRuntime* aParentRuntime) + : mWorkerPrivate(aWorkerPrivate), mThread(aThread), mParentRuntime(aParentRuntime) { MOZ_ASSERT(aWorkerPrivate); MOZ_ASSERT(aThread); @@ -1893,7 +1893,7 @@ RuntimeService::ScheduleWorker(WorkerPrivate* aWorkerPrivate) JSContext* cx = CycleCollectedJSContext::Get()->Context(); nsCOMPtr runnable = new WorkerThreadPrimaryRunnable(aWorkerPrivate, thread, - JS_GetParentContext(cx)); + JS_GetParentRuntime(cx)); if (NS_FAILED(thread->DispatchPrimaryRunnable(friendKey, runnable.forget()))) { UnregisterWorker(aWorkerPrivate); return false; @@ -2861,7 +2861,7 @@ WorkerThreadPrimaryRunnable::Run() nsCycleCollector_startup(); WorkerJSContext context(mWorkerPrivate); - nsresult rv = context.Initialize(mParentContext); + nsresult rv = context.Initialize(mParentRuntime); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } diff --git a/extensions/cookie/test/unit/head_cookies.js b/extensions/cookie/test/unit/head_cookies.js index fe4c0a53dc53..40eceb31865d 100644 --- a/extensions/cookie/test/unit/head_cookies.js +++ b/extensions/cookie/test/unit/head_cookies.js @@ -42,8 +42,7 @@ function do_run_generator(generator) try { generator.next(); } catch (e) { - if (e != StopIteration) - do_throw("caught exception " + e, Components.stack.caller); + do_throw("caught exception " + e, Components.stack.caller); } } @@ -51,7 +50,7 @@ function do_run_generator(generator) function do_finish_generator_test(generator) { do_execute_soon(function() { - generator.close(); + generator.return(); do_test_finished(); }); } diff --git a/extensions/cookie/test/unit/test_cookies_async_failure.js b/extensions/cookie/test/unit/test_cookies_async_failure.js index 628553a4e653..dadd80d0a2a0 100644 --- a/extensions/cookie/test/unit/test_cookies_async_failure.js +++ b/extensions/cookie/test/unit/test_cookies_async_failure.js @@ -27,12 +27,12 @@ function run_test() { function finish_test() { do_execute_soon(function() { - test_generator.close(); + test_generator.return(); do_test_finished(); }); } -function do_run_test() { +function* do_run_test() { // Set up a profile. this.profile = do_get_profile(); @@ -118,7 +118,7 @@ function do_corrupt_db(file) return size; } -function run_test_1(generator) +function* run_test_1(generator) { // Load the profile and populate it. let uri = NetUtil.newURI("http://foo.com/"); @@ -207,7 +207,7 @@ function run_test_1(generator) do_run_generator(generator); } -function run_test_2(generator) +function* run_test_2(generator) { // Load the profile and populate it. do_load_profile(); @@ -273,7 +273,7 @@ function run_test_2(generator) do_run_generator(generator); } -function run_test_3(generator) +function* run_test_3(generator) { // Set the maximum cookies per base domain limit to a large value, so that // corrupting the database is easier. @@ -368,7 +368,7 @@ function run_test_3(generator) do_run_generator(generator); } -function run_test_4(generator) +function* run_test_4(generator) { // Load the profile and populate it. do_load_profile(); @@ -436,7 +436,7 @@ function run_test_4(generator) do_run_generator(generator); } -function run_test_4(generator) +function* run_test_4(generator) { // Load the profile and populate it. do_load_profile(); @@ -508,7 +508,7 @@ function run_test_4(generator) do_run_generator(generator); } -function run_test_5(generator) +function* run_test_5(generator) { // Load the profile and populate it. do_load_profile(); diff --git a/extensions/cookie/test/unit/test_cookies_persistence.js b/extensions/cookie/test/unit/test_cookies_persistence.js index d6de81b728a0..8795257b0e83 100644 --- a/extensions/cookie/test/unit/test_cookies_persistence.js +++ b/extensions/cookie/test/unit/test_cookies_persistence.js @@ -14,12 +14,12 @@ function run_test() { function finish_test() { do_execute_soon(function() { - test_generator.close(); + test_generator.return(); do_test_finished(); }); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_cookies_privatebrowsing.js b/extensions/cookie/test/unit/test_cookies_privatebrowsing.js index ab35f8ef7896..e14b3ed92ca1 100644 --- a/extensions/cookie/test/unit/test_cookies_privatebrowsing.js +++ b/extensions/cookie/test/unit/test_cookies_privatebrowsing.js @@ -12,7 +12,7 @@ function run_test() { function finish_test() { do_execute_soon(function() { - test_generator.close(); + test_generator.return(); do_test_finished(); }); } @@ -22,7 +22,7 @@ function make_channel(url) { .QueryInterface(Ci.nsIHttpChannel); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_cookies_profile_close.js b/extensions/cookie/test/unit/test_cookies_profile_close.js index bae6e3a59a17..0510bca35a91 100644 --- a/extensions/cookie/test/unit/test_cookies_profile_close.js +++ b/extensions/cookie/test/unit/test_cookies_profile_close.js @@ -12,12 +12,12 @@ function run_test() { function finish_test() { do_execute_soon(function() { - test_generator.close(); + test_generator.return(); do_test_finished(); }); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_cookies_read.js b/extensions/cookie/test/unit/test_cookies_read.js index b389ad8cc280..db98b714fe66 100644 --- a/extensions/cookie/test/unit/test_cookies_read.js +++ b/extensions/cookie/test/unit/test_cookies_read.js @@ -14,12 +14,12 @@ function run_test() { function finish_test() { do_execute_soon(function() { - test_generator.close(); + test_generator.return(); do_test_finished(); }); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_cookies_sync_failure.js b/extensions/cookie/test/unit/test_cookies_sync_failure.js index 075d6fc258f5..fcc9827d7596 100644 --- a/extensions/cookie/test/unit/test_cookies_sync_failure.js +++ b/extensions/cookie/test/unit/test_cookies_sync_failure.js @@ -29,12 +29,12 @@ function run_test() { function finish_test() { do_execute_soon(function() { - test_generator.close(); + test_generator.return(); do_test_finished(); }); } -function do_run_test() { +function* do_run_test() { // Set up a profile. this.profile = do_get_profile(); @@ -136,7 +136,7 @@ function check_garbage_file(file) do_check_false(file.exists()); } -function run_test_1(generator) +function* run_test_1(generator) { // Create a garbage database file. create_garbage_file(cookieFile); @@ -165,7 +165,7 @@ function run_test_1(generator) do_run_generator(generator); } -function run_test_2(generator) +function* run_test_2(generator) { // Load the profile and populate it. do_load_profile(); @@ -196,7 +196,7 @@ function run_test_2(generator) do_run_generator(generator); } -function run_test_3(generator, schema) +function* run_test_3(generator, schema) { // Manually create a schema 2 database, populate it, and set the schema // version to the desired number. @@ -224,7 +224,7 @@ function run_test_3(generator, schema) do_run_generator(generator); } -function run_test_4_exists(generator, schema, stmt) +function* run_test_4_exists(generator, schema, stmt) { // Manually create a database, populate it, and add the desired column. let db = new CookieDatabaseConnection(do_get_cookie_file(profile), schema); @@ -254,7 +254,7 @@ function run_test_4_exists(generator, schema, stmt) do_run_generator(generator); } -function run_test_4_baseDomain(generator) +function* run_test_4_baseDomain(generator) { // Manually create a database and populate it with a bad host. let db = new CookieDatabaseConnection(do_get_cookie_file(profile), 2); diff --git a/extensions/cookie/test/unit/test_cookies_thirdparty_session.js b/extensions/cookie/test/unit/test_cookies_thirdparty_session.js index 36e5fb11a361..4c93e97f76f2 100644 --- a/extensions/cookie/test/unit/test_cookies_thirdparty_session.js +++ b/extensions/cookie/test/unit/test_cookies_thirdparty_session.js @@ -14,12 +14,12 @@ function run_test() { function finish_test() { do_execute_soon(function() { - test_generator.close(); + test_generator.return(); do_test_finished(); }); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_domain_eviction.js b/extensions/cookie/test/unit/test_domain_eviction.js index 349f6d77e13a..f852b389e1ef 100644 --- a/extensions/cookie/test/unit/test_domain_eviction.js +++ b/extensions/cookie/test/unit/test_domain_eviction.js @@ -17,7 +17,7 @@ function continue_test() do_run_generator(test_generator); } -function do_run_test() +function* do_run_test() { // Set the base domain limit to 50 so we have a known value. Services.prefs.setIntPref("network.cookie.maxPerHost", 50); diff --git a/extensions/cookie/test/unit/test_eviction.js b/extensions/cookie/test/unit/test_eviction.js index 7b155020831b..907ea7de6d18 100644 --- a/extensions/cookie/test/unit/test_eviction.js +++ b/extensions/cookie/test/unit/test_eviction.js @@ -26,7 +26,7 @@ function repeat_test() gShortExpiry *= 2; do_execute_soon(function() { - test_generator.close(); + test_generator.return(); test_generator = do_run_test(); do_run_generator(test_generator); }); @@ -53,7 +53,7 @@ function get_expiry_delay() return gShortExpiry * 1000 + 100; } -function do_run_test() +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_permmanager_expiration.js b/extensions/cookie/test/unit/test_permmanager_expiration.js index 7ab8e88ae25c..d8692be47612 100644 --- a/extensions/cookie/test/unit/test_permmanager_expiration.js +++ b/extensions/cookie/test/unit/test_permmanager_expiration.js @@ -15,7 +15,7 @@ function continue_test() do_run_generator(test_generator); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_permmanager_migrate_4-7.js b/extensions/cookie/test/unit/test_permmanager_migrate_4-7.js index bf3e81c2a724..f91ed243c0de 100644 --- a/extensions/cookie/test/unit/test_permmanager_migrate_4-7.js +++ b/extensions/cookie/test/unit/test_permmanager_migrate_4-7.js @@ -17,7 +17,7 @@ function run_test() { run_next_test(); } -add_task(function test() { +add_task(function* test() { /* Create and set up the permissions database */ let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_permmanager_migrate_5-7a.js b/extensions/cookie/test/unit/test_permmanager_migrate_5-7a.js index 915f980e5e5a..4d5c1bbaffc1 100644 --- a/extensions/cookie/test/unit/test_permmanager_migrate_5-7a.js +++ b/extensions/cookie/test/unit/test_permmanager_migrate_5-7a.js @@ -17,7 +17,7 @@ function run_test() { run_next_test(); } -add_task(function test() { +add_task(function* test() { /* Create and set up the permissions database */ let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_permmanager_migrate_6-7a.js b/extensions/cookie/test/unit/test_permmanager_migrate_6-7a.js index f9c074a02515..d37780c82cdb 100644 --- a/extensions/cookie/test/unit/test_permmanager_migrate_6-7a.js +++ b/extensions/cookie/test/unit/test_permmanager_migrate_6-7a.js @@ -17,7 +17,7 @@ function run_test() { run_next_test(); } -add_task(function test() { +add_task(function* test() { /* Create and set up the permissions database */ let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_permmanager_migrate_7-8.js b/extensions/cookie/test/unit/test_permmanager_migrate_7-8.js index 8749d306ad5b..4eb556557ed0 100644 --- a/extensions/cookie/test/unit/test_permmanager_migrate_7-8.js +++ b/extensions/cookie/test/unit/test_permmanager_migrate_7-8.js @@ -17,7 +17,7 @@ function run_test() { run_next_test(); } -add_task(function test() { +add_task(function* test() { /* Create and set up the permissions database */ let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_permmanager_notifications.js b/extensions/cookie/test/unit/test_permmanager_notifications.js index 5708fe8ec070..85865e08a337 100644 --- a/extensions/cookie/test/unit/test_permmanager_notifications.js +++ b/extensions/cookie/test/unit/test_permmanager_notifications.js @@ -16,7 +16,7 @@ function continue_test() do_run_generator(test_generator); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_permmanager_removesince.js b/extensions/cookie/test/unit/test_permmanager_removesince.js index 719f7f6f6903..60ec1662a2eb 100644 --- a/extensions/cookie/test/unit/test_permmanager_removesince.js +++ b/extensions/cookie/test/unit/test_permmanager_removesince.js @@ -15,7 +15,7 @@ function continue_test() do_run_generator(test_generator); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_schema_2_migration.js b/extensions/cookie/test/unit/test_schema_2_migration.js index 7dc5e823c62f..5b998d8c5aa8 100644 --- a/extensions/cookie/test/unit/test_schema_2_migration.js +++ b/extensions/cookie/test/unit/test_schema_2_migration.js @@ -13,12 +13,12 @@ function run_test() { function finish_test() { do_execute_soon(function() { - test_generator.close(); + test_generator.return(); do_test_finished(); }); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/extensions/cookie/test/unit/test_schema_3_migration.js b/extensions/cookie/test/unit/test_schema_3_migration.js index 40a23f7e4754..1723a2390084 100644 --- a/extensions/cookie/test/unit/test_schema_3_migration.js +++ b/extensions/cookie/test/unit/test_schema_3_migration.js @@ -13,12 +13,12 @@ function run_test() { function finish_test() { do_execute_soon(function() { - test_generator.close(); + test_generator.return(); do_test_finished(); }); } -function do_run_test() { +function* do_run_test() { // Set up a profile. let profile = do_get_profile(); diff --git a/ipc/testshell/XPCShellEnvironment.cpp b/ipc/testshell/XPCShellEnvironment.cpp index bf8d72e05743..fbc9238fcdaf 100644 --- a/ipc/testshell/XPCShellEnvironment.cpp +++ b/ipc/testshell/XPCShellEnvironment.cpp @@ -451,7 +451,7 @@ XPCShellEnvironment::Init() } JS::CompartmentOptions options; - options.creationOptions().setZone(JS::SystemZone); + options.creationOptions().setSystemZone(); options.behaviors().setVersion(JSVERSION_LATEST); if (xpc::SharedMemoryEnabled()) options.creationOptions().setSharedMemoryAndAtomicsEnabled(true); diff --git a/js/moz.configure b/js/moz.configure index 0c2ec9d5c751..4a8baf4d3342 100644 --- a/js/moz.configure +++ b/js/moz.configure @@ -145,8 +145,11 @@ add_old_configure_assignment('MOZ_PROFILING', profiling) @depends(profiling, target) def imply_vtune(value, target): - if value and (target.kernel == 'WINNT' or (target.kernel == 'Linux' and - target.os == 'GNU')): + ok_cpu = target.cpu in ['x86', 'x86_64'] + ok_kernel = target.kernel == 'WINNT' or \ + (target.kernel == 'Linux' and target.os == 'GNU') + + if value and ok_cpu and ok_kernel: return True set_config('MOZ_PROFILING', profiling) @@ -154,7 +157,7 @@ set_define('MOZ_PROFILING', profiling) imply_option('--enable-vtune', imply_vtune, reason='--enable-profiling') -js_option('--enable-vtune', env='MOZ_VTUNE', help='Enable vtune profiling') +js_option('--enable-vtune', env='MOZ_VTUNE', help='Enable VTune profiling') @depends('--enable-vtune') def vtune(value): diff --git a/js/public/GCAPI.h b/js/public/GCAPI.h index 60b5c2f63d3d..fd20c847d35f 100644 --- a/js/public/GCAPI.h +++ b/js/public/GCAPI.h @@ -697,7 +697,7 @@ ExposeScriptToActiveJS(JSScript* script) static MOZ_ALWAYS_INLINE void MarkStringAsLive(Zone* zone, JSString* string) { - JSRuntime* rt = JS::shadow::Zone::asShadowZone(zone)->runtimeFromMainThread(); + JSRuntime* rt = JS::shadow::Zone::asShadowZone(zone)->runtimeFromActiveCooperatingThread(); js::gc::MarkGCThingAsLive(rt, GCCellPtr(string)); } diff --git a/js/public/HeapAPI.h b/js/public/HeapAPI.h index 0a104336139d..1102899cc41c 100644 --- a/js/public/HeapAPI.h +++ b/js/public/HeapAPI.h @@ -124,7 +124,7 @@ struct Zone return barrierTracer_; } - JSRuntime* runtimeFromMainThread() const { + JSRuntime* runtimeFromActiveCooperatingThread() const { MOZ_ASSERT(js::CurrentThreadCanAccessRuntime(runtime_)); return runtime_; } diff --git a/js/public/Utility.h b/js/public/Utility.h index 631914d23480..42fd8cef5eda 100644 --- a/js/public/Utility.h +++ b/js/public/Utility.h @@ -55,11 +55,11 @@ namespace oom { * To make testing OOM in certain helper threads more effective, * allow restricting the OOM testing to a certain helper thread * type. This allows us to fail e.g. in off-thread script parsing - * without causing an OOM in the main thread first. + * without causing an OOM in the active thread first. */ enum ThreadType { THREAD_TYPE_NONE = 0, // 0 - THREAD_TYPE_MAIN, // 1 + THREAD_TYPE_COOPERATING, // 1 THREAD_TYPE_WASM, // 2 THREAD_TYPE_ION, // 3 THREAD_TYPE_PARSE, // 4 diff --git a/js/src/builtin/Intl.cpp b/js/src/builtin/Intl.cpp index 3d129f11dd46..244b6875ab2a 100644 --- a/js/src/builtin/Intl.cpp +++ b/js/src/builtin/Intl.cpp @@ -1045,7 +1045,7 @@ js::intl_Collator(JSContext* cx, unsigned argc, Value* vp) void CollatorObject::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); const Value& slot = obj->as().getReservedSlot(CollatorObject::UCOLLATOR_SLOT); if (UCollator* coll = static_cast(slot.toPrivate())) @@ -1478,7 +1478,7 @@ js::intl_NumberFormat(JSContext* cx, unsigned argc, Value* vp) void NumberFormatObject::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); const Value& slot = obj->as().getReservedSlot(NumberFormatObject::UNUMBER_FORMAT_SLOT); @@ -2417,7 +2417,7 @@ js::intl_DateTimeFormat(JSContext* cx, unsigned argc, Value* vp) void DateTimeFormatObject::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); const Value& slot = obj->as().getReservedSlot(DateTimeFormatObject::UDATE_FORMAT_SLOT); @@ -3458,7 +3458,7 @@ PluralRules(JSContext* cx, unsigned argc, Value* vp) void PluralRulesObject::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); const Value& slot = obj->as().getReservedSlot(PluralRulesObject::UPLURAL_RULES_SLOT); diff --git a/js/src/builtin/MapObject.cpp b/js/src/builtin/MapObject.cpp index a75f6af7a113..f47e6db4c0ff 100644 --- a/js/src/builtin/MapObject.cpp +++ b/js/src/builtin/MapObject.cpp @@ -209,7 +209,7 @@ MapIteratorObject::create(JSContext* cx, HandleObject mapobj, ValueMap* data, void MapIteratorObject::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); fop->delete_(MapIteratorObjectRange(static_cast(obj))); } @@ -548,7 +548,7 @@ MapObject::create(JSContext* cx, HandleObject proto /* = nullptr */) void MapObject::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); if (ValueMap* map = obj->as().getData()) fop->delete_(map); } @@ -946,7 +946,7 @@ SetIteratorObject::create(JSContext* cx, HandleObject setobj, ValueSet* data, void SetIteratorObject::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); fop->delete_(SetIteratorObjectRange(static_cast(obj))); } @@ -1140,7 +1140,7 @@ SetObject::trace(JSTracer* trc, JSObject* obj) void SetObject::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); SetObject* setobj = static_cast(obj); if (ValueSet* set = setobj->getData()) fop->delete_(set); diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp index 62c7a1eead5e..1e5e2cf4a6c3 100644 --- a/js/src/builtin/ModuleObject.cpp +++ b/js/src/builtin/ModuleObject.cpp @@ -608,7 +608,7 @@ ModuleObject::create(JSContext* cx) /* static */ void ModuleObject::finalize(js::FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->maybeOffMainThread()); + MOZ_ASSERT(fop->maybeOnHelperThread()); ModuleObject* self = &obj->as(); if (self->hasImportBindings()) fop->delete_(&self->importBindings()); diff --git a/js/src/builtin/TestingFunctions.cpp b/js/src/builtin/TestingFunctions.cpp index 83337272b0a7..bd93c5d0b55b 100644 --- a/js/src/builtin/TestingFunctions.cpp +++ b/js/src/builtin/TestingFunctions.cpp @@ -347,6 +347,7 @@ MinorGC(JSContext* cx, unsigned argc, Value* vp) #define FOR_EACH_GC_PARAM(_) \ _("maxBytes", JSGC_MAX_BYTES, true) \ _("maxMallocBytes", JSGC_MAX_MALLOC_BYTES, true) \ + _("maxNurseryBytes", JSGC_MAX_NURSERY_BYTES, true) \ _("gcBytes", JSGC_BYTES, false) \ _("gcNumber", JSGC_NUMBER, false) \ _("mode", JSGC_MODE, true) \ @@ -421,9 +422,16 @@ GCParameter(JSContext* cx, unsigned argc, Value* vp) return false; } - if (disableOOMFunctions && (param == JSGC_MAX_BYTES || param == JSGC_MAX_MALLOC_BYTES)) { - args.rval().setUndefined(); - return true; + if (disableOOMFunctions) { + switch (param) { + case JSGC_MAX_BYTES: + case JSGC_MAX_MALLOC_BYTES: + case JSGC_MAX_NURSERY_BYTES: + args.rval().setUndefined(); + return true; + default: + break; + } } double d; @@ -1335,7 +1343,7 @@ SetupOOMFailure(JSContext* cx, bool failAlways, unsigned argc, Value* vp) return false; } - uint32_t targetThread = js::oom::THREAD_TYPE_MAIN; + uint32_t targetThread = js::oom::THREAD_TYPE_COOPERATING; if (args.length() > 1 && !ToUint32(cx, args[1], &targetThread)) return false; @@ -1409,13 +1417,13 @@ OOMTest(JSContext* cx, unsigned argc, Value* vp) bool verbose = EnvVarIsDefined("OOM_VERBOSE"); - unsigned threadStart = oom::THREAD_TYPE_MAIN; + unsigned threadStart = oom::THREAD_TYPE_COOPERATING; unsigned threadEnd = oom::THREAD_TYPE_MAX; // Test a single thread type if specified by the OOM_THREAD environment variable. int threadOption = 0; if (EnvVarAsInt("OOM_THREAD", &threadOption)) { - if (threadOption < oom::THREAD_TYPE_MAIN || threadOption > oom::THREAD_TYPE_MAX) { + if (threadOption < oom::THREAD_TYPE_COOPERATING || threadOption > oom::THREAD_TYPE_MAX) { JS_ReportErrorASCII(cx, "OOM_THREAD value out of range."); return false; } @@ -4586,18 +4594,16 @@ gc::ZealModeHelpText), JS_FN_HELP("helperThreadCount", HelperThreadCount, 0, 0, "helperThreadCount()", -" Returns the number of helper threads available for off-main-thread tasks."), +" Returns the number of helper threads available for off-thread tasks."), #ifdef JS_TRACE_LOGGING JS_FN_HELP("startTraceLogger", EnableTraceLogger, 0, 0, "startTraceLogger()", -" Start logging the mainThread.\n" -" Note: tracelogging starts automatically. Disable it by setting environment variable\n" -" TLOPTIONS=disableMainThread"), +" Start logging this thread.\n"), JS_FN_HELP("stopTraceLogger", DisableTraceLogger, 0, 0, "stopTraceLogger()", -" Stop logging the mainThread."), +" Stop logging this thread."), #endif JS_FN_HELP("reportOutOfMemory", ReportOutOfMemory, 0, 0, diff --git a/js/src/builtin/WeakMapObject.cpp b/js/src/builtin/WeakMapObject.cpp index 0dc79787f918..eead6c8889bd 100644 --- a/js/src/builtin/WeakMapObject.cpp +++ b/js/src/builtin/WeakMapObject.cpp @@ -233,7 +233,7 @@ WeakMap_trace(JSTracer* trc, JSObject* obj) static void WeakMap_finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->maybeOffMainThread()); + MOZ_ASSERT(fop->maybeOnHelperThread()); if (ObjectValueMap* map = obj->as().getMap()) { #ifdef DEBUG map->~ObjectValueMap(); diff --git a/js/src/devtools/rootAnalysis/annotations.js b/js/src/devtools/rootAnalysis/annotations.js index 71213a2e4160..7e92b89b90de 100644 --- a/js/src/devtools/rootAnalysis/annotations.js +++ b/js/src/devtools/rootAnalysis/annotations.js @@ -222,6 +222,10 @@ var ignoreFunctions = { "EntryType* nsTHashtable::PutEntry(nsTHashtable::KeyType) [with EntryType = nsBaseHashtableET, nsAutoPtr::OrderingEntry> >; nsTHashtable::KeyType = const mozilla::BlockingResourceBase*]" : true, "EntryType* nsTHashtable::GetEntry(nsTHashtable::KeyType) const [with EntryType = nsBaseHashtableET, nsAutoPtr::OrderingEntry> >; nsTHashtable::KeyType = const mozilla::BlockingResourceBase*]" : true, + // VTune internals that lazy-load a shared library and make IndirectCalls. + "iJIT_IsProfilingActive" : true, + "iJIT_NotifyEvent": true, + // The big hammers. "PR_GetCurrentThread" : true, "calloc" : true, diff --git a/js/src/frontend/BytecodeCompiler.cpp b/js/src/frontend/BytecodeCompiler.cpp index 018cf1c234f9..9ca819ad45c2 100644 --- a/js/src/frontend/BytecodeCompiler.cpp +++ b/js/src/frontend/BytecodeCompiler.cpp @@ -518,12 +518,12 @@ frontend::CreateScriptSourceObject(JSContext* cx, const ReadOnlyCompileOptions& } // CompileScript independently returns the ScriptSourceObject (SSO) for the -// compile. This is used by off-main-thread script compilation (OMT-SC). +// compile. This is used by off-thread script compilation (OT-SC). // -// OMT-SC cannot initialize the SSO when it is first constructed because the +// OT-SC cannot initialize the SSO when it is first constructed because the // SSO is allocated initially in a separate compartment. // -// After OMT-SC, the separate compartment is merged with the main compartment, +// After OT-SC, the separate compartment is merged with the main compartment, // at which point the JSScripts created become observable by the debugger via // memory-space scanning. // @@ -610,7 +610,7 @@ frontend::CompileModule(JSContext* cx, const ReadOnlyCompileOptions& options, return nullptr; // This happens in GlobalHelperThreadState::finishModuleParseTask() when a - // module is compiled off main thread. + // module is compiled off thread. if (!ModuleObject::Freeze(cx, module)) return nullptr; diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp index 6c84a4ac50a1..f38b280a3bbb 100644 --- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -3489,7 +3489,7 @@ void BytecodeEmitter::tellDebuggerAboutCompiledScript(JSContext* cx) { // Note: when parsing off thread the resulting scripts need to be handed to - // the debugger after rejoining to the main thread. + // the debugger after rejoining to the active thread. if (cx->helperThread()) return; diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index ba318ae66463..4c0c212dc82b 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -3129,7 +3129,7 @@ Parser::functionDefinition(Node pn, InHandling inHandling, RootedObject proto(context); if (generatorKind == StarGenerator) { - // If we are off the main thread, the generator meta-objects have + // If we are off thread, the generator meta-objects have // already been created by js::StartOffThreadParseTask, so cx will not // be necessary. JSContext* cx = context->helperThread() ? nullptr : context; @@ -7984,7 +7984,7 @@ Parser::generatorComprehensionLambda(unsigned begin) ParseContext* outerpc = pc; - // If we are off the main thread, the generator meta-objects have + // If we are off thread, the generator meta-objects have // already been created by js::StartOffThreadParseScript, so cx will not // be necessary. RootedObject proto(context); diff --git a/js/src/frontend/TokenStream.cpp b/js/src/frontend/TokenStream.cpp index 5897e16c81d8..81a0a1d5f15a 100644 --- a/js/src/frontend/TokenStream.cpp +++ b/js/src/frontend/TokenStream.cpp @@ -648,8 +648,9 @@ TokenStream::reportCompileErrorNumberVA(uint32_t offset, unsigned flags, unsigne warning = false; } - // On the main thread, report the error immediately. When compiling off - // thread, save the error so that the main thread can report it later. + // On the active thread, report the error immediately. When compiling off + // thread, save the error so that the thread finishing the parse can report + // it later. CompileError tempErr; CompileError* tempErrPtr = &tempErr; if (cx->helperThread() && !cx->addPendingCompileError(&tempErrPtr)) diff --git a/js/src/gc/Allocator.cpp b/js/src/gc/Allocator.cpp index 310bf1ce8ef0..1b935b3b3b59 100644 --- a/js/src/gc/Allocator.cpp +++ b/js/src/gc/Allocator.cpp @@ -39,7 +39,7 @@ js::Allocate(JSContext* cx, AllocKind kind, size_t nDynamicSlots, InitialHeap he MOZ_ASSERT_IF(nDynamicSlots != 0, clasp->isNative() || clasp->isProxy()); - // Off-main-thread alloc cannot trigger GC or make runtime assertions. + // Off-thread alloc cannot trigger GC or make runtime assertions. if (cx->helperThread()) { JSObject* obj = GCRuntime::tryNewTenuredObject(cx, kind, thingSize, nDynamicSlots); if (MOZ_UNLIKELY(allowGC && !obj)) @@ -284,15 +284,15 @@ GCRuntime::refillFreeListFromAnyThread(JSContext* cx, AllocKind thingKind, size_ cx->arenas()->checkEmptyFreeList(thingKind); if (!cx->helperThread()) - return refillFreeListFromMainThread(cx, thingKind, thingSize); + return refillFreeListFromActiveCooperatingThread(cx, thingKind, thingSize); - return refillFreeListOffMainThread(cx, thingKind); + return refillFreeListFromHelperThread(cx, thingKind); } /* static */ TenuredCell* -GCRuntime::refillFreeListFromMainThread(JSContext* cx, AllocKind thingKind, size_t thingSize) +GCRuntime::refillFreeListFromActiveCooperatingThread(JSContext* cx, AllocKind thingKind, size_t thingSize) { - // It should not be possible to allocate on the main thread while we are + // It should not be possible to allocate on the active thread while we are // inside a GC. Zone *zone = cx->zone(); MOZ_ASSERT(!JS::CurrentThreadIsHeapBusy(), "allocating while under GC"); @@ -302,9 +302,9 @@ GCRuntime::refillFreeListFromMainThread(JSContext* cx, AllocKind thingKind, size } /* static */ TenuredCell* -GCRuntime::refillFreeListOffMainThread(JSContext* cx, AllocKind thingKind) +GCRuntime::refillFreeListFromHelperThread(JSContext* cx, AllocKind thingKind) { - // A GC may be happening on the main thread, but zones used by off thread + // A GC may be happening on the active thread, but zones used by off thread // tasks are never collected. Zone* zone = cx->zone(); MOZ_ASSERT(!zone->wasGCStarted()); @@ -321,7 +321,7 @@ GCRuntime::refillFreeListInGC(Zone* zone, AllocKind thingKind) */ zone->arenas.checkEmptyFreeList(thingKind); - mozilla::DebugOnly rt = zone->runtimeFromMainThread(); + mozilla::DebugOnly rt = zone->runtimeFromActiveCooperatingThread(); MOZ_ASSERT(JS::CurrentThreadIsHeapCollecting()); MOZ_ASSERT_IF(!JS::CurrentThreadIsHeapMinorCollecting(), !rt->gc.isBackgroundSweeping()); diff --git a/js/src/gc/Barrier.cpp b/js/src/gc/Barrier.cpp index b16f6195a0f9..da6da51232a3 100644 --- a/js/src/gc/Barrier.cpp +++ b/js/src/gc/Barrier.cpp @@ -22,9 +22,9 @@ namespace js { bool -RuntimeFromMainThreadIsHeapMajorCollecting(JS::shadow::Zone* shadowZone) +RuntimeFromActiveCooperatingThreadIsHeapMajorCollecting(JS::shadow::Zone* shadowZone) { - MOZ_ASSERT(CurrentThreadCanAccessRuntime(shadowZone->runtimeFromMainThread())); + MOZ_ASSERT(CurrentThreadCanAccessRuntime(shadowZone->runtimeFromActiveCooperatingThread())); return JS::CurrentThreadIsHeapMajorCollecting(); } @@ -147,9 +147,9 @@ MovableCellHasher::hash(const Lookup& l) return 0; // We have to access the zone from-any-thread here: a worker thread may be - // cloning a self-hosted object from the main-thread-runtime-owned self- - // hosting zone into the off-main-thread runtime. The zone's uid lock will - // protect against multiple workers doing this simultaneously. + // cloning a self-hosted object from the main runtime's self- hosting zone + // into another runtime. The zone's uid lock will protect against multiple + // workers doing this simultaneously. MOZ_ASSERT(CurrentThreadCanAccessZone(l->zoneFromAnyThread()) || l->zoneFromAnyThread()->isSelfHostingZone()); diff --git a/js/src/gc/GCRuntime.h b/js/src/gc/GCRuntime.h index b2acca773ab0..d0275ee25191 100644 --- a/js/src/gc/GCRuntime.h +++ b/js/src/gc/GCRuntime.h @@ -72,8 +72,8 @@ class ChunkPool }; }; -// Performs extra allocation off the main thread so that when memory is -// required on the main thread it will already be available and waiting. +// Performs extra allocation off thread so that when memory is required on the +// active thread it will already be available and waiting. class BackgroundAllocTask : public GCParallelTask { // Guarded by the GC lock. @@ -867,9 +867,9 @@ class GCRuntime static void checkIncrementalZoneState(JSContext* cx, T* t); static TenuredCell* refillFreeListFromAnyThread(JSContext* cx, AllocKind thingKind, size_t thingSize); - static TenuredCell* refillFreeListFromMainThread(JSContext* cx, AllocKind thingKind, - size_t thingSize); - static TenuredCell* refillFreeListOffMainThread(JSContext* cx, AllocKind thingKind); + static TenuredCell* refillFreeListFromActiveCooperatingThread(JSContext* cx, AllocKind thingKind, + size_t thingSize); + static TenuredCell* refillFreeListFromHelperThread(JSContext* cx, AllocKind thingKind); /* * Return the list of chunks that can be released outside the GC lock. @@ -980,8 +980,9 @@ class GCRuntime public: JSRuntime* const rt; - /* Embedders can use this zone however they wish. */ + /* Embedders can use this zone and group however they wish. */ UnprotectedData systemZone; + UnprotectedData systemZoneGroup; // List of all zone groups (protected by the GC lock). ActiveThreadOrGCTaskData groups; @@ -1275,7 +1276,7 @@ class GCRuntime ActiveThreadData arenasEmptyAtShutdown; #endif - /* Synchronize GC heap access among GC helper threads and main threads. */ + /* Synchronize GC heap access among GC helper threads and active threads. */ friend class js::AutoLockGC; js::Mutex lock; diff --git a/js/src/gc/Heap.h b/js/src/gc/Heap.h index a850e1784f6f..edf9e90554d8 100644 --- a/js/src/gc/Heap.h +++ b/js/src/gc/Heap.h @@ -32,19 +32,13 @@ struct JSRuntime; -namespace JS { -namespace shadow { -struct Runtime; -} // namespace shadow -} // namespace JS - namespace js { class AutoLockGC; class FreeOp; extern bool -RuntimeFromMainThreadIsHeapMajorCollecting(JS::shadow::Zone* shadowZone); +RuntimeFromActiveCooperatingThreadIsHeapMajorCollecting(JS::shadow::Zone* shadowZone); #ifdef DEBUG @@ -256,13 +250,11 @@ struct Cell MOZ_ALWAYS_INLINE const TenuredCell& asTenured() const; MOZ_ALWAYS_INLINE TenuredCell& asTenured(); - inline JSRuntime* runtimeFromMainThread() const; - inline JS::shadow::Runtime* shadowRuntimeFromMainThread() const; + inline JSRuntime* runtimeFromActiveCooperatingThread() const; // Note: Unrestricted access to the runtime of a GC thing from an arbitrary // thread can easily lead to races. Use this method very carefully. inline JSRuntime* runtimeFromAnyThread() const; - inline JS::shadow::Runtime* shadowRuntimeFromAnyThread() const; // May be overridden by GC thing kinds that have a compartment pointer. inline JSCompartment* maybeCompartment() const { return nullptr; } @@ -1070,7 +1062,7 @@ class HeapUsage * The approximate number of bytes in use on the GC heap, to the nearest * ArenaSize. This does not include any malloc data. It also does not * include not-actively-used addresses that are still reserved at the OS - * level for GC usage. It is atomic because it is updated by both the main + * level for GC usage. It is atomic because it is updated by both the active * and GC helper threads. */ mozilla::Atomic gcBytes_; @@ -1141,31 +1133,19 @@ Cell::asTenured() } inline JSRuntime* -Cell::runtimeFromMainThread() const +Cell::runtimeFromActiveCooperatingThread() const { JSRuntime* rt = chunk()->trailer.runtime; MOZ_ASSERT(CurrentThreadCanAccessRuntime(rt)); return rt; } -inline JS::shadow::Runtime* -Cell::shadowRuntimeFromMainThread() const -{ - return reinterpret_cast(runtimeFromMainThread()); -} - inline JSRuntime* Cell::runtimeFromAnyThread() const { return chunk()->trailer.runtime; } -inline JS::shadow::Runtime* -Cell::shadowRuntimeFromAnyThread() const -{ - return reinterpret_cast(runtimeFromAnyThread()); -} - inline uintptr_t Cell::address() const { @@ -1305,22 +1285,22 @@ TenuredCell::readBarrier(TenuredCell* thing) // at the moment this can happen e.g. when rekeying tables containing // read-barriered GC things after a moving GC. // - // TODO: Fix this and assert we're not collecting if we're on the main + // TODO: Fix this and assert we're not collecting if we're on the active // thread. JS::shadow::Zone* shadowZone = thing->shadowZoneFromAnyThread(); if (shadowZone->needsIncrementalBarrier()) { - // Barriers are only enabled on the main thread and are disabled while collecting. - MOZ_ASSERT(!RuntimeFromMainThreadIsHeapMajorCollecting(shadowZone)); + // Barriers are only enabled on the active thread and are disabled while collecting. + MOZ_ASSERT(!RuntimeFromActiveCooperatingThreadIsHeapMajorCollecting(shadowZone)); Cell* tmp = thing; TraceManuallyBarrieredGenericPointerEdge(shadowZone->barrierTracer(), &tmp, "read barrier"); MOZ_ASSERT(tmp == thing); } if (thing->isMarked(GRAY)) { - // There shouldn't be anything marked grey unless we're on the main thread. + // There shouldn't be anything marked grey unless we're on the active thread. MOZ_ASSERT(CurrentThreadCanAccessRuntime(thing->runtimeFromAnyThread())); - if (!RuntimeFromMainThreadIsHeapMajorCollecting(shadowZone)) + if (!RuntimeFromActiveCooperatingThreadIsHeapMajorCollecting(shadowZone)) UnmarkGrayCellRecursively(thing, thing->getTraceKind()); } } @@ -1340,10 +1320,10 @@ TenuredCell::writeBarrierPre(TenuredCell* thing) // those on the Atoms Zone. Normally, we never enter a parse task when // collecting in the atoms zone, so will filter out atoms below. // Unfortuantely, If we try that when verifying pre-barriers, we'd never be - // able to handle OMT parse tasks at all as we switch on the verifier any - // time we're not doing GC. This would cause us to deadlock, as OMT parsing + // able to handle off thread parse tasks at all as we switch on the verifier any + // time we're not doing GC. This would cause us to deadlock, as off thread parsing // is meant to resume after GC work completes. Instead we filter out any - // OMT barriers that reach us and assert that they would normally not be + // off thread barriers that reach us and assert that they would normally not be // possible. if (!CurrentThreadCanAccessRuntime(thing->runtimeFromAnyThread())) { AssertSafeToSkipBarrier(thing); @@ -1353,7 +1333,7 @@ TenuredCell::writeBarrierPre(TenuredCell* thing) JS::shadow::Zone* shadowZone = thing->shadowZoneFromAnyThread(); if (shadowZone->needsIncrementalBarrier()) { - MOZ_ASSERT(!RuntimeFromMainThreadIsHeapMajorCollecting(shadowZone)); + MOZ_ASSERT(!RuntimeFromActiveCooperatingThreadIsHeapMajorCollecting(shadowZone)); Cell* tmp = thing; TraceManuallyBarrieredGenericPointerEdge(shadowZone->barrierTracer(), &tmp, "pre barrier"); MOZ_ASSERT(tmp == thing); diff --git a/js/src/gc/Iteration.cpp b/js/src/gc/Iteration.cpp index 1affca054ab9..228380f4740b 100644 --- a/js/src/gc/Iteration.cpp +++ b/js/src/gc/Iteration.cpp @@ -124,7 +124,7 @@ js::IterateGrayObjects(Zone* zone, GCThingCallback cellCallback, void* data) void js::IterateGrayObjectsUnderCC(Zone* zone, GCThingCallback cellCallback, void* data) { - mozilla::DebugOnly rt = zone->runtimeFromMainThread(); + mozilla::DebugOnly rt = zone->runtimeFromActiveCooperatingThread(); MOZ_ASSERT(JS::CurrentThreadIsHeapCycleCollecting()); MOZ_ASSERT(!rt->gc.isIncrementalGCInProgress()); ::IterateGrayObjects(zone, cellCallback, data); diff --git a/js/src/gc/Marking.cpp b/js/src/gc/Marking.cpp index 3c89ea44e67b..5749ef0ca8dd 100644 --- a/js/src/gc/Marking.cpp +++ b/js/src/gc/Marking.cpp @@ -253,7 +253,7 @@ js::CheckTracedThing(JSTracer* trc, T* thing) * either free or uninitialized in which case we check the free list. * * Further complications are that background sweeping may be running and - * concurrently modifiying the free list and that tracing is done off main + * concurrently modifiying the free list and that tracing is done off * thread during compacting GC and reading the contents of the thing by * IsThingPoisoned would be racy in this case. */ @@ -3000,7 +3000,7 @@ TypedUnmarkGrayCellRecursively(T* t) { MOZ_ASSERT(t); - JSRuntime* rt = t->runtimeFromMainThread(); + JSRuntime* rt = t->runtimeFromActiveCooperatingThread(); MOZ_ASSERT(!JS::CurrentThreadIsHeapCollecting()); MOZ_ASSERT(!JS::CurrentThreadIsHeapCycleCollecting()); diff --git a/js/src/gc/Nursery.cpp b/js/src/gc/Nursery.cpp index 1af9968d744a..56d452c318ce 100644 --- a/js/src/gc/Nursery.cpp +++ b/js/src/gc/Nursery.cpp @@ -553,7 +553,6 @@ void js::Nursery::collect(JS::gcreason::Reason reason) { MOZ_ASSERT(!TlsContext.get()->suppressGC); - MOZ_RELEASE_ASSERT(zoneGroup()->ownedByCurrentThread()); if (!isEnabled() || isEmpty()) { // Our barriers are not always exact, and there may be entries in the @@ -802,7 +801,7 @@ js::Nursery::freeMallocedBuffers() } if (!started) - freeMallocedBuffersTask->runFromMainThread(zoneGroup()->runtime); + freeMallocedBuffersTask->runFromActiveCooperatingThread(zoneGroup()->runtime); MOZ_ASSERT(mallocedBuffers.empty()); } diff --git a/js/src/gc/Statistics.h b/js/src/gc/Statistics.h index 31801379a6f4..9af2245ba901 100644 --- a/js/src/gc/Statistics.h +++ b/js/src/gc/Statistics.h @@ -477,7 +477,7 @@ struct MOZ_RAII AutoPhase ~AutoPhase() { if (enabled) { - // Bug 1309651 - we only record mainthread time (including time + // Bug 1309651 - we only record active thread time (including time // spent waiting to join with helper threads), but should start // recording total work on helper threads sometime by calling // endParallelPhase here if task is nonnull. diff --git a/js/src/gc/Zone.cpp b/js/src/gc/Zone.cpp index 3a7f8da031da..2cf801879d59 100644 --- a/js/src/gc/Zone.cpp +++ b/js/src/gc/Zone.cpp @@ -105,7 +105,7 @@ Zone::setNeedsIncrementalBarrier(bool needs, ShouldUpdateJit updateJit) jitUsingBarriers_ = needs; } - MOZ_ASSERT_IF(needs && isAtomsZone(), !runtimeFromMainThread()->exclusiveThreadsPresent()); + MOZ_ASSERT_IF(needs && isAtomsZone(), !runtimeFromActiveCooperatingThread()->exclusiveThreadsPresent()); MOZ_ASSERT_IF(needs, canCollect()); needsIncrementalBarrier_ = needs; } @@ -274,8 +274,8 @@ Zone::discardJitCode(FreeOp* fop, bool discardBaselineCode) /* * Free all control flow graphs that are cached on BaselineScripts. - * Assuming this happens on the mainthread and all control flow - * graph reads happen on the mainthread, this is save. + * Assuming this happens on the active thread and all control flow + * graph reads happen on the active thread, this is safe. */ jitZone()->cfgSpace()->lifoAlloc().freeAll(); } @@ -295,7 +295,7 @@ Zone::gcNumber() { // Zones in use by exclusive threads are not collected, and threads using // them cannot access the main runtime's gcNumber without racing. - return usedByExclusiveThread ? 0 : runtimeFromMainThread()->gc.gcNumber(); + return usedByExclusiveThread ? 0 : runtimeFromActiveCooperatingThread()->gc.gcNumber(); } js::jit::JitZone* diff --git a/js/src/gc/Zone.h b/js/src/gc/Zone.h index e73c78c4de21..6b5b702f756d 100644 --- a/js/src/gc/Zone.h +++ b/js/src/gc/Zone.h @@ -190,7 +190,7 @@ struct Zone : public JS::shadow::Zone, void* reallocPtr = nullptr) { if (!js::CurrentThreadCanAccessRuntime(runtime_)) return nullptr; - return runtimeFromMainThread()->onOutOfMemory(allocFunc, nbytes, reallocPtr); + return runtimeFromActiveCooperatingThread()->onOutOfMemory(allocFunc, nbytes, reallocPtr); } void reportAllocationOverflow() { js::ReportAllocationOverflow(nullptr); } @@ -226,7 +226,7 @@ struct Zone : public JS::shadow::Zone, } bool isCollecting() const { - MOZ_ASSERT(CurrentThreadCanAccessRuntime(runtimeFromMainThread())); + MOZ_ASSERT(CurrentThreadCanAccessRuntime(runtimeFromActiveCooperatingThread())); return isCollectingFromAnyThread(); } @@ -267,7 +267,7 @@ struct Zone : public JS::shadow::Zone, bool compileBarriers() const { return compileBarriers(needsIncrementalBarrier()); } bool compileBarriers(bool needsIncrementalBarrier) const { return needsIncrementalBarrier || - runtimeFromMainThread()->hasZealMode(js::gc::ZealMode::VerifierPre); + runtimeFromActiveCooperatingThread()->hasZealMode(js::gc::ZealMode::VerifierPre); } enum ShouldUpdateJit { DontUpdateJit, UpdateJit }; @@ -539,7 +539,7 @@ struct Zone : public JS::shadow::Zone, void transferUniqueId(js::gc::Cell* tgt, js::gc::Cell* src) { MOZ_ASSERT(src != tgt); MOZ_ASSERT(!IsInsideNursery(tgt)); - MOZ_ASSERT(CurrentThreadCanAccessRuntime(runtimeFromMainThread())); + MOZ_ASSERT(CurrentThreadCanAccessRuntime(runtimeFromActiveCooperatingThread())); MOZ_ASSERT(js::CurrentThreadCanAccessZone(this)); uniqueIds().rekeyIfMoved(src, tgt); } @@ -557,15 +557,11 @@ struct Zone : public JS::shadow::Zone, for (js::gc::UniqueIdMap::Enum e(source->uniqueIds()); !e.empty(); e.popFront()) { MOZ_ASSERT(!uniqueIds().has(e.front().key())); if (!uniqueIds().put(e.front().key(), e.front().value())) - oomUnsafe.crash("failed to transfer unique ids from off-main-thread"); + oomUnsafe.crash("failed to transfer unique ids from off-thread"); } source->uniqueIds().clear(); } - JSContext* contextFromMainThread() { - return runtime_->contextFromMainThread(); - } - #ifdef JSGC_HASH_TABLE_CHECKS // Assert that the UniqueId table has been redirected successfully. void checkUniqueIdTableAfterMovingGC(); diff --git a/js/src/gc/ZoneGroup.cpp b/js/src/gc/ZoneGroup.cpp index 882ad6a47ed2..ada3440b5784 100644 --- a/js/src/gc/ZoneGroup.cpp +++ b/js/src/gc/ZoneGroup.cpp @@ -48,6 +48,9 @@ ZoneGroup::init(size_t maxNurseryBytes) ZoneGroup::~ZoneGroup() { js_delete(jitZoneGroup.ref()); + + if (this == runtime->gc.systemZoneGroup) + runtime->gc.systemZoneGroup = nullptr; } void @@ -60,6 +63,8 @@ ZoneGroup::enter() MOZ_ASSERT(ownerContext().context() == nullptr); MOZ_ASSERT(enterCount == 0); ownerContext_ = CooperatingContext(cx); + if (cx->generationalDisabled) + nursery().disable(); } enterCount++; } diff --git a/js/src/gc/ZoneGroup.h b/js/src/gc/ZoneGroup.h index f563c3bfa9ed..f0b3e10e9b3f 100644 --- a/js/src/gc/ZoneGroup.h +++ b/js/src/gc/ZoneGroup.h @@ -130,42 +130,6 @@ class ZoneGroup mozilla::LinkedList& debuggerList() { return debuggerList_.ref(); } }; -class MOZ_RAII AutoAccessZoneGroup -{ - ZoneGroup* group; - - public: - explicit AutoAccessZoneGroup(ZoneGroup* group) - : group(group) - { - group->enter(); - } - - ~AutoAccessZoneGroup() { - group->leave(); - } -}; - -class MOZ_RAII AutoAccessZoneGroups -{ - Vector acquiredGroups; - - public: - AutoAccessZoneGroups() {} - - ~AutoAccessZoneGroups() { - for (size_t i = 0; i < acquiredGroups.length(); i++) - acquiredGroups[i]->leave(); - } - - void access(ZoneGroup* group) { - group->enter(); - AutoEnterOOMUnsafeRegion oomUnsafe; - if (!acquiredGroups.append(group)) - oomUnsafe.crash("acquiredGroups.append failed"); - } -}; - } // namespace js #endif // gc_Zone_h diff --git a/js/src/irregexp/NativeRegExpMacroAssembler.cpp b/js/src/irregexp/NativeRegExpMacroAssembler.cpp index fea9d1e2a22e..159629973c1e 100644 --- a/js/src/irregexp/NativeRegExpMacroAssembler.cpp +++ b/js/src/irregexp/NativeRegExpMacroAssembler.cpp @@ -36,6 +36,9 @@ # include "jit/PerfSpewer.h" #endif #include "vm/MatchPairs.h" +#ifdef MOZ_VTUNE +# include "vtune/VTuneWrapper.h" +#endif #include "jit/MacroAssembler-inl.h" @@ -499,6 +502,10 @@ NativeRegExpMacroAssembler::GenerateCode(JSContext* cx, bool match_only) writePerfSpewerJitCodeProfile(code, "RegExp"); #endif +#ifdef MOZ_VTUNE + vtune::MarkRegExp(code, match_only); +#endif + for (size_t i = 0; i < labelPatches.length(); i++) { LabelPatch& v = labelPatches[i]; MOZ_ASSERT(!v.label); diff --git a/js/src/irregexp/RegExpEngine.cpp b/js/src/irregexp/RegExpEngine.cpp index e52dc1ab36c9..e9dae923c6dd 100644 --- a/js/src/irregexp/RegExpEngine.cpp +++ b/js/src/irregexp/RegExpEngine.cpp @@ -2254,7 +2254,10 @@ void BoyerMoorePositionInfo::SetInterval(const Interval& interval) { s_ = AddRange(s_, kSpaceRanges, kSpaceRangeCount, interval); - w_ = AddRange(w_, kWordRanges, kWordRangeCount, interval); + if (unicode_ignore_case_) + w_ = AddRange(w_, kIgnoreCaseWordRanges, kIgnoreCaseWordRangeCount, interval); + else + w_ = AddRange(w_, kWordRanges, kWordRangeCount, interval); d_ = AddRange(d_, kDigitRanges, kDigitRangeCount, interval); surrogate_ = AddRange(surrogate_, kSurrogateRanges, kSurrogateRangeCount, interval); @@ -2291,11 +2294,12 @@ BoyerMoorePositionInfo::SetAll() BoyerMooreLookahead::BoyerMooreLookahead(LifoAlloc* alloc, size_t length, RegExpCompiler* compiler) : length_(length), compiler_(compiler), bitmaps_(*alloc) { + bool unicode_ignore_case = compiler->unicode() && compiler->ignore_case(); max_char_ = MaximumCharacter(compiler->ascii()); bitmaps_.reserve(length); for (size_t i = 0; i < length; i++) - bitmaps_.append(alloc->newInfallible(alloc)); + bitmaps_.append(alloc->newInfallible(alloc, unicode_ignore_case)); } // Find the longest range of lookahead that has the fewest number of different @@ -2961,15 +2965,22 @@ EmitNotInSurrogatePair(RegExpCompiler* compiler, RegExpNode* on_success, Trace* // Check for [0-9A-Z_a-z]. static void EmitWordCheck(RegExpMacroAssembler* assembler, - jit::Label* word, jit::Label* non_word, bool fall_through_on_word) + jit::Label* word, jit::Label* non_word, bool fall_through_on_word, + bool unicode_ignore_case) { - if (assembler->CheckSpecialCharacterClass(fall_through_on_word ? 'w' : 'W', + if (!unicode_ignore_case && + assembler->CheckSpecialCharacterClass(fall_through_on_word ? 'w' : 'W', fall_through_on_word ? non_word : word)) { // Optimized implementation available. return; } + if (unicode_ignore_case) { + assembler->CheckCharacter(0x017F, word); + assembler->CheckCharacter(0x212A, word); + } + assembler->CheckCharacterGT('z', non_word); assembler->CheckCharacterLT('0', non_word); assembler->CheckCharacterGT('a' - 1, word); @@ -3018,7 +3029,8 @@ AssertionNode::EmitBoundaryCheck(RegExpCompiler* compiler, Trace* trace) assembler->LoadCurrentCharacter(trace->cp_offset(), &before_non_word); } // Fall through on non-word. - EmitWordCheck(assembler, &before_word, &before_non_word, false); + EmitWordCheck(assembler, &before_word, &before_non_word, false, + compiler->unicode() && compiler->ignore_case()); // Next character is not a word character. assembler->Bind(&before_non_word); jit::Label ok; @@ -3058,7 +3070,8 @@ AssertionNode::BacktrackIfPrevious(RegExpCompiler* compiler, // We already checked that we are not at the start of input so it must be // OK to load the previous character. assembler->LoadCurrentCharacter(new_trace.cp_offset() - 1, &dummy, false); - EmitWordCheck(assembler, word, non_word, backtrack_if_previous == kIsNonWord); + EmitWordCheck(assembler, word, non_word, backtrack_if_previous == kIsNonWord, + compiler->unicode() && compiler->ignore_case()); assembler->Bind(&fall_through); on_success()->Emit(compiler, &new_trace); diff --git a/js/src/irregexp/RegExpEngine.h b/js/src/irregexp/RegExpEngine.h index 78c784aaff49..1a8fd4b22028 100644 --- a/js/src/irregexp/RegExpEngine.h +++ b/js/src/irregexp/RegExpEngine.h @@ -1195,13 +1195,14 @@ AddRange(ContainedInLattice a, class BoyerMoorePositionInfo { public: - explicit BoyerMoorePositionInfo(LifoAlloc* alloc) + explicit BoyerMoorePositionInfo(LifoAlloc* alloc, bool unicode_ignore_case) : map_(*alloc), map_count_(0), w_(kNotYet), s_(kNotYet), d_(kNotYet), - surrogate_(kNotYet) + surrogate_(kNotYet), + unicode_ignore_case_(unicode_ignore_case) { map_.reserve(kMapSize); for (int i = 0; i < kMapSize; i++) @@ -1228,6 +1229,9 @@ class BoyerMoorePositionInfo ContainedInLattice s_; // The \s character class. ContainedInLattice d_; // The \d character class. ContainedInLattice surrogate_; // Surrogate UTF-16 code units. + + // True if the RegExp has unicode and ignoreCase flags. + bool unicode_ignore_case_; }; typedef InfallibleVector BoyerMoorePositionInfoVector; diff --git a/js/src/jit/BaselineCompiler.cpp b/js/src/jit/BaselineCompiler.cpp index d5c5920e2a94..7fbc028b5085 100644 --- a/js/src/jit/BaselineCompiler.cpp +++ b/js/src/jit/BaselineCompiler.cpp @@ -35,6 +35,9 @@ #include "jit/MacroAssembler-inl.h" #include "vm/Interpreter-inl.h" #include "vm/NativeObject-inl.h" +#ifdef MOZ_VTUNE +# include "vtune/VTuneWrapper.h" +#endif using namespace js; using namespace js::jit; @@ -225,10 +228,6 @@ BaselineCompiler::compile() (void*) baselineScript.get(), (void*) code->raw(), script->filename(), script->lineno()); -#ifdef JS_ION_PERF - writePerfSpewerBaselineProfile(script, code); -#endif - MOZ_ASSERT(pcMappingIndexEntries.length() > 0); baselineScript->copyPCMappingIndexEntries(&pcMappingIndexEntries[0]); @@ -307,6 +306,14 @@ BaselineCompiler::compile() script->setBaselineScript(cx->runtime(), baselineScript.release()); +#ifdef JS_ION_PERF + writePerfSpewerBaselineProfile(script, code); +#endif + +#ifdef MOZ_VTUNE + vtune::MarkScript(code, script, "baseline"); +#endif + return Method_Compiled; } diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index 4473139075c6..3ad9633dcf2d 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -1015,7 +1015,7 @@ CanOptimizeDenseOrUnboxedArraySetElem(JSObject* obj, uint32_t index, return false; // Unboxed arrays need to be able to emit floating point code. - if (obj->is() && !obj->runtimeFromMainThread()->jitSupportsFloatingPoint) + if (obj->is() && !obj->runtimeFromActiveCooperatingThread()->jitSupportsFloatingPoint) return false; Shape* shape = obj->maybeShape(); diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp index 21dbb1f92996..939be1872871 100644 --- a/js/src/jit/CodeGenerator.cpp +++ b/js/src/jit/CodeGenerator.cpp @@ -53,6 +53,9 @@ #include "jit/shared/CodeGenerator-shared-inl.h" #include "jit/shared/Lowering-shared-inl.h" #include "vm/Interpreter-inl.h" +#ifdef MOZ_VTUNE +# include "vtune/VTuneWrapper.h" +#endif using namespace js; using namespace js::jit; @@ -1811,6 +1814,9 @@ JitCompartment::generateRegExpMatcherStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "RegExpMatcherStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "RegExpMatcherStub"); +#endif if (cx->zone()->needsIncrementalBarrier()) code->togglePreBarriers(true, DontReprotect); @@ -1968,6 +1974,9 @@ JitCompartment::generateRegExpSearcherStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "RegExpSearcherStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "RegExpSearcherStub"); +#endif if (cx->zone()->needsIncrementalBarrier()) code->togglePreBarriers(true, DontReprotect); @@ -2116,6 +2125,9 @@ JitCompartment::generateRegExpTesterStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "RegExpTesterStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "RegExpTesterStub"); +#endif if (cx->zone()->needsIncrementalBarrier()) code->togglePreBarriers(true, DontReprotect); @@ -7721,6 +7733,9 @@ JitCompartment::generateStringConcatStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "StringConcatStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "StringConcatStub"); +#endif return code; } @@ -7762,6 +7777,9 @@ JitRuntime::generateMallocStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "MallocStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "MallocStub"); +#endif return code; } @@ -7798,6 +7816,9 @@ JitRuntime::generateFreeStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "FreeStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "FreeStub"); +#endif return code; } @@ -7836,6 +7857,9 @@ JitRuntime::generateLazyLinkStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "LazyLinkStub"); +#endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "LazyLinkStub"); #endif return code; } @@ -9905,6 +9929,10 @@ CodeGenerator::link(JSContext* cx, CompilerConstraintList* constraints) perfSpewer_.writeProfile(script, code, masm); #endif +#ifdef MOZ_VTUNE + vtune::MarkScript(code, script, "ion"); +#endif + // for marking during GC. if (safepointIndices_.length()) ionScript->copySafepointIndices(&safepointIndices_[0], masm); diff --git a/js/src/jit/CompileInfo.h b/js/src/jit/CompileInfo.h index f63da91fbd0c..b6b1dc028866 100644 --- a/js/src/jit/CompileInfo.h +++ b/js/src/jit/CompileInfo.h @@ -536,7 +536,7 @@ class CompileInfo AnalysisMode analysisMode_; // Whether a script needs an arguments object is unstable over compilation - // since the arguments optimization could be marked as failed on the main + // since the arguments optimization could be marked as failed on the active // thread, so cache a value here and use it throughout for consistency. bool scriptNeedsArgsObj_; diff --git a/js/src/jit/CompileWrappers.cpp b/js/src/jit/CompileWrappers.cpp index 86752928154d..5d8fe2f0b95a 100644 --- a/js/src/jit/CompileWrappers.cpp +++ b/js/src/jit/CompileWrappers.cpp @@ -251,7 +251,7 @@ const GlobalObject* CompileCompartment::maybeGlobal() { // This uses unsafeUnbarrieredMaybeGlobal() so as not to trigger the read - // barrier on the global from off the main thread. This is safe because we + // barrier on the global from off thread. This is safe because we // abort Ion compilation when we GC. return compartment()->unsafeUnbarrieredMaybeGlobal(); } diff --git a/js/src/jit/CompileWrappers.h b/js/src/jit/CompileWrappers.h index 6a93806970c2..da302b0594f7 100644 --- a/js/src/jit/CompileWrappers.h +++ b/js/src/jit/CompileWrappers.h @@ -16,7 +16,7 @@ class JitRuntime; // During Ion compilation we need access to various bits of the current // compartment, runtime and so forth. However, since compilation can run off -// thread while the main thread is actively mutating the VM, this access needs +// thread while the active thread is mutating the VM, this access needs // to be restricted. The classes below give the compiler an interface to access // all necessary information in a threadsafe fashion. diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp index a22a440b92ed..fa7d0756c197 100644 --- a/js/src/jit/Ion.cpp +++ b/js/src/jit/Ion.cpp @@ -51,6 +51,9 @@ #include "vm/Debugger.h" #include "vm/HelperThreads.h" #include "vm/TraceLogging.h" +#ifdef MOZ_VTUNE +# include "vtune/VTuneWrapper.h" +#endif #include "jscompartmentinlines.h" #include "jsobjinlines.h" @@ -371,7 +374,7 @@ void JitZoneGroup::patchIonBackedges(JSContext* cx, BackedgeTarget target) { if (target == BackedgeLoopHeader) { - // We must be on the main thread. The caller must use + // We must be on the active thread. The caller must use // AutoPreventBackedgePatching to ensure we don't reenter. MOZ_ASSERT(cx->runtime()->jitRuntime()->preventBackedgePatching()); MOZ_ASSERT(CurrentThreadCanAccessRuntime(cx->runtime())); @@ -810,6 +813,10 @@ JitCode::finalize(FreeOp* fop) } #endif +#ifdef MOZ_VTUNE + vtune::UnmarkCode(this); +#endif + MOZ_ASSERT(pool_); // With W^X JIT code, reprotecting memory for each JitCode instance is @@ -828,6 +835,7 @@ JitCode::finalize(FreeOp* fop) // memory instead. if (!PerfEnabled()) pool_->release(headerSize_ + bufferSize_, CodeKind(kind_)); + pool_ = nullptr; } @@ -1379,7 +1387,7 @@ IonScript::unlinkFromRuntime(FreeOp* fop) void jit::ToggleBarriers(JS::Zone* zone, bool needs) { - JSRuntime* rt = zone->runtimeFromMainThread(); + JSRuntime* rt = zone->runtimeFromActiveCooperatingThread(); if (!rt->hasJitRuntime()) return; @@ -2422,8 +2430,8 @@ CheckScriptSize(JSContext* cx, JSScript* script) uint32_t numLocalsAndArgs = NumLocalsAndArgs(script); - if (script->length() > MAX_MAIN_THREAD_SCRIPT_SIZE || - numLocalsAndArgs > MAX_MAIN_THREAD_LOCALS_AND_ARGS) + if (script->length() > MAX_ACTIVE_THREAD_SCRIPT_SIZE || + numLocalsAndArgs > MAX_ACTIVE_THREAD_LOCALS_AND_ARGS) { if (!OffThreadCompilationAvailable(cx)) { JitSpew(JitSpew_IonAbort, "Script too large (%" PRIuSIZE " bytes) (%u locals/args)", @@ -2541,9 +2549,9 @@ bool jit::OffThreadCompilationAvailable(JSContext* cx) { // Even if off thread compilation is enabled, compilation must still occur - // on the main thread in some cases. + // on the active thread in some cases. // - // Require cpuCount > 1 so that Ion compilation jobs and main-thread + // Require cpuCount > 1 so that Ion compilation jobs and active-thread // execution are not competing for the same resources. return cx->runtime()->canUseOffthreadIonCompilation() && HelperThreadState().cpuCount > 1 diff --git a/js/src/jit/Ion.h b/js/src/jit/Ion.h index 09d04271c300..2ea0fbf20d47 100644 --- a/js/src/jit/Ion.h +++ b/js/src/jit/Ion.h @@ -75,7 +75,7 @@ class JitContext JitContext(); ~JitContext(); - // Running context when executing on the main thread. Not available during + // Running context when executing on the active thread. Not available during // compilation. JSContext* cx; diff --git a/js/src/jit/IonBuilder.cpp b/js/src/jit/IonBuilder.cpp index c23855e60614..e2e8e6af4ba8 100644 --- a/js/src/jit/IonBuilder.cpp +++ b/js/src/jit/IonBuilder.cpp @@ -7009,7 +7009,7 @@ static size_t NumFixedSlots(JSObject* object) { // Note: we can't use object->numFixedSlots() here, as this will read the - // shape and can race with the main thread if we are building off thread. + // shape and can race with the active thread if we are building off thread. // The allocation kind and object class (which goes through the type) can // be read freely, however. gc::AllocKind kind = object->asTenured().getAllocKind(); @@ -13076,7 +13076,7 @@ JSObject* IonBuilder::checkNurseryObject(JSObject* obj) { // If we try to use any nursery pointers during compilation, make sure that - // the main thread will cancel this compilation before performing a minor + // the active thread will cancel this compilation before performing a minor // GC. All constants used during compilation should either go through this // function or should come from a type set (which has a similar barrier). if (obj && IsInsideNursery(obj)) { diff --git a/js/src/jit/IonOptimizationLevels.cpp b/js/src/jit/IonOptimizationLevels.cpp index ece02fdc0ea8..b0b8aa3c1ed6 100644 --- a/js/src/jit/IonOptimizationLevels.cpp +++ b/js/src/jit/IonOptimizationLevels.cpp @@ -40,8 +40,8 @@ OptimizationInfo::initNormalOptimizationInfo() registerAllocator_ = RegisterAllocator_Backtracking; - inlineMaxBytecodePerCallSiteMainThread_ = 550; - inlineMaxBytecodePerCallSiteOffThread_ = 1100; + inlineMaxBytecodePerCallSiteActiveCooperatingThread_ = 550; + inlineMaxBytecodePerCallSiteHelperThread_ = 1100; inlineMaxCalleeInlinedBytecodeLength_ = 3550; inlineMaxTotalBytecodeLength_ = 85000; inliningMaxCallerBytecodeLength_ = 1600; @@ -93,17 +93,17 @@ OptimizationInfo::compilerWarmUpThreshold(JSScript* script, jsbytecode* pc) cons warmUpThreshold = JitOptions.forcedDefaultIonSmallFunctionWarmUpThreshold.ref(); } - // If the script is too large to compile on the main thread, we can still + // If the script is too large to compile on the active thread, we can still // compile it off thread. In these cases, increase the warm-up counter // threshold to improve the compilation's type information and hopefully // avoid later recompilation. - if (script->length() > MAX_MAIN_THREAD_SCRIPT_SIZE) - warmUpThreshold *= (script->length() / (double) MAX_MAIN_THREAD_SCRIPT_SIZE); + if (script->length() > MAX_ACTIVE_THREAD_SCRIPT_SIZE) + warmUpThreshold *= (script->length() / (double) MAX_ACTIVE_THREAD_SCRIPT_SIZE); uint32_t numLocalsAndArgs = NumLocalsAndArgs(script); - if (numLocalsAndArgs > MAX_MAIN_THREAD_LOCALS_AND_ARGS) - warmUpThreshold *= (numLocalsAndArgs / (double) MAX_MAIN_THREAD_LOCALS_AND_ARGS); + if (numLocalsAndArgs > MAX_ACTIVE_THREAD_LOCALS_AND_ARGS) + warmUpThreshold *= (numLocalsAndArgs / (double) MAX_ACTIVE_THREAD_LOCALS_AND_ARGS); if (!pc || JitOptions.eagerCompilation) return warmUpThreshold; diff --git a/js/src/jit/IonOptimizationLevels.h b/js/src/jit/IonOptimizationLevels.h index c38eb69a2dd2..450234e37392 100644 --- a/js/src/jit/IonOptimizationLevels.h +++ b/js/src/jit/IonOptimizationLevels.h @@ -98,9 +98,9 @@ class OptimizationInfo // The maximum total bytecode size of an inline call site. We use a lower // value if off-thread compilation is not available, to avoid stalling the - // main thread. - uint32_t inlineMaxBytecodePerCallSiteOffThread_; - uint32_t inlineMaxBytecodePerCallSiteMainThread_; + // active thread. + uint32_t inlineMaxBytecodePerCallSiteHelperThread_; + uint32_t inlineMaxBytecodePerCallSiteActiveCooperatingThread_; // The maximum value we allow for baselineScript->inlinedBytecodeLength_ // when inlining. @@ -248,8 +248,8 @@ class OptimizationInfo uint32_t inlineMaxBytecodePerCallSite(bool offThread) const { return (offThread || !JitOptions.limitScriptSize) - ? inlineMaxBytecodePerCallSiteOffThread_ - : inlineMaxBytecodePerCallSiteMainThread_; + ? inlineMaxBytecodePerCallSiteHelperThread_ + : inlineMaxBytecodePerCallSiteActiveCooperatingThread_; } uint16_t inlineMaxCalleeInlinedBytecodeLength() const { diff --git a/js/src/jit/JitCompartment.h b/js/src/jit/JitCompartment.h index 62141e6778ce..d50567a39720 100644 --- a/js/src/jit/JitCompartment.h +++ b/js/src/jit/JitCompartment.h @@ -330,7 +330,7 @@ class JitZoneGroup ZoneGroupData backedgeTarget_; // List of all backedges in all Ion code. The backedge edge list is accessed - // asynchronously when the main thread is paused and preventBackedgePatching_ + // asynchronously when the active thread is paused and preventBackedgePatching_ // is false. Thus, the list must only be mutated while preventBackedgePatching_ // is true. ZoneGroupData> backedgeList_; @@ -501,7 +501,7 @@ class JitCompartment } // This function is used to call the read barrier, to mark the SIMD template - // type as used. This function can only be called from the main thread. + // type as used. This function can only be called from the active thread. void registerSimdTemplateObjectFor(SimdType type) { ReadBarrieredObject& tpl = simdTemplateObjects_[type]; MOZ_ASSERT(tpl.unbarrieredGet()); @@ -650,7 +650,7 @@ class MOZ_STACK_CLASS AutoWritableJitCode : AutoWritableJitCode(TlsContext.get()->runtime(), addr, size) {} explicit AutoWritableJitCode(JitCode* code) - : AutoWritableJitCode(code->runtimeFromMainThread(), code->raw(), code->bufferSize()) + : AutoWritableJitCode(code->runtimeFromActiveCooperatingThread(), code->raw(), code->bufferSize()) {} ~AutoWritableJitCode() { if (!ExecutableAllocator::makeExecutable(addr_, size_)) diff --git a/js/src/jit/JitFrames.cpp b/js/src/jit/JitFrames.cpp index be1e5e100b47..6e8f682170c9 100644 --- a/js/src/jit/JitFrames.cpp +++ b/js/src/jit/JitFrames.cpp @@ -2760,7 +2760,7 @@ JitFrameIterator::verifyReturnAddressUsingNativeToBytecodeMap() JSRuntime* rt = TlsContext.get()->runtime(); - // Don't verify on non-main-thread. + // Don't verify while off thread. if (!CurrentThreadCanAccessRuntime(rt)) return true; diff --git a/js/src/jit/JitOptions.h b/js/src/jit/JitOptions.h index 37bf120953e6..02195532ff3d 100644 --- a/js/src/jit/JitOptions.h +++ b/js/src/jit/JitOptions.h @@ -16,9 +16,9 @@ namespace js { namespace jit { // Longer scripts can only be compiled off thread, as these compilations -// can be expensive and stall the main thread for too long. -static const uint32_t MAX_MAIN_THREAD_SCRIPT_SIZE = 2 * 1000; -static const uint32_t MAX_MAIN_THREAD_LOCALS_AND_ARGS = 256; +// can be expensive and stall the active thread for too long. +static const uint32_t MAX_ACTIVE_THREAD_SCRIPT_SIZE = 2 * 1000; +static const uint32_t MAX_ACTIVE_THREAD_LOCALS_AND_ARGS = 256; // Possible register allocators which may be used. enum IonRegisterAllocator { diff --git a/js/src/jit/JitSpewer.cpp b/js/src/jit/JitSpewer.cpp index f7f4426511ad..03964f9c0c73 100644 --- a/js/src/jit/JitSpewer.cpp +++ b/js/src/jit/JitSpewer.cpp @@ -211,7 +211,7 @@ IonSpewer::beginFunction() { // If we are doing a synchronous logging then we spew everything as we go, // as this is useful in case of failure during the compilation. On the other - // hand, it is recommended to disabled off main thread compilation. + // hand, it is recommended to disable off thread compilation. if (!getAsyncLogging() && !firstFunction_) { LockGuard guard(outputLock_); jsonOutput_.put(","); // separate functions diff --git a/js/src/jit/JitcodeMap.cpp b/js/src/jit/JitcodeMap.cpp index 40a3a170cba5..e5a41efe0aeb 100644 --- a/js/src/jit/JitcodeMap.cpp +++ b/js/src/jit/JitcodeMap.cpp @@ -454,8 +454,7 @@ JitcodeGlobalTable::lookupForSamplerInfallible(void* ptr, JSRuntime* rt, uint32_ // barrier is not needed. Any JS frames sampled during the sweep phase of // the GC must be on stack, and on-stack frames must already be marked at // the beginning of the sweep phase. It's not possible to assert this here - // as we may not be running on the main thread when called from the gecko - // profiler. + // as we may not be off thread when called from the gecko profiler. return *entry; } diff --git a/js/src/jit/MIR.cpp b/js/src/jit/MIR.cpp index a3937024fe33..321de482fe4f 100644 --- a/js/src/jit/MIR.cpp +++ b/js/src/jit/MIR.cpp @@ -892,12 +892,12 @@ bool jit::IonCompilationCanUseNurseryPointers() { // If we are doing backend compilation, which could occur on a helper - // thread but might actually be on the main thread, check the flag set on + // thread but might actually be on the active thread, check the flag set on // the JSContext by AutoEnterIonCompilation. if (CurrentThreadIsIonCompiling()) return !CurrentThreadIsIonCompilingSafeForMinorGC(); - // Otherwise, we must be on the main thread during MIR construction. The + // Otherwise, we must be on the active thread during MIR construction. The // store buffer must have been notified that minor GCs must cancel pending // or in progress Ion compilations. JSContext* cx = TlsContext.get(); diff --git a/js/src/jit/MIR.h b/js/src/jit/MIR.h index 3a94f8f2b13c..ff3b010b4318 100644 --- a/js/src/jit/MIR.h +++ b/js/src/jit/MIR.h @@ -3986,7 +3986,7 @@ class MInitElemGetterSetter }; // WrappedFunction wraps a JSFunction so it can safely be used off-thread. -// In particular, a function's flags can be modified on the main thread as +// In particular, a function's flags can be modified on the active thread as // functions are relazified and delazified, so we must be careful not to access // these flags off-thread. class WrappedFunction : public TempObject @@ -8351,7 +8351,7 @@ struct LambdaFunctionInfo { // The functions used in lambdas are the canonical original function in // the script, and are immutable except for delazification. Record this - // information while still on the main thread to avoid races. + // information while still on the active thread to avoid races. CompilerFunction fun; uint16_t flags; uint16_t nargs; diff --git a/js/src/jit/MIRGenerator.h b/js/src/jit/MIRGenerator.h index 461cfe702e58..5e686433b87e 100644 --- a/js/src/jit/MIRGenerator.h +++ b/js/src/jit/MIRGenerator.h @@ -80,7 +80,7 @@ class MIRGenerator abortFmt(AbortReason r, const char* message, va_list ap); // Collect the evaluation result of phases after IonBuilder, such that - // off-main-thread compilation can report what error got encountered. + // off-thread compilation can report what error got encountered. void setOffThreadStatus(AbortReasonOr result) { MOZ_ASSERT(offThreadStatus_.isOk()); offThreadStatus_ = result; @@ -113,7 +113,7 @@ class MIRGenerator safeForMinorGC_ = false; } - // Whether the main thread is trying to cancel this build. + // Whether the active thread is trying to cancel this build. bool shouldCancel(const char* why) { maybePause(); return cancelBuild_; diff --git a/js/src/jit/MacroAssembler.cpp b/js/src/jit/MacroAssembler.cpp index f73ef7d3ea0e..b0ad34e14e24 100644 --- a/js/src/jit/MacroAssembler.cpp +++ b/js/src/jit/MacroAssembler.cpp @@ -163,7 +163,7 @@ MacroAssembler::guardObjectType(Register obj, const TypeSet* types, MOZ_ASSERT_IF(types->getObjectCount() > 0, scratch != InvalidReg); // Note: this method elides read barriers on values read from type sets, as - // this may be called off the main thread during Ion compilation. This is + // this may be called off thread during Ion compilation. This is // safe to do as the final JitCode object will be allocated during the // incremental GC (or the compilation canceled before we start sweeping), // see CodeGenerator::link. Other callers should use TypeSet::readBarrier diff --git a/js/src/jit/VMFunctions.cpp b/js/src/jit/VMFunctions.cpp index 2a9db6e24f5a..62f54adab830 100644 --- a/js/src/jit/VMFunctions.cpp +++ b/js/src/jit/VMFunctions.cpp @@ -1207,7 +1207,7 @@ AssertValidObjectPtr(JSContext* cx, JSObject* obj) // Check what we can, so that we'll hopefully assert/crash if we get a // bogus object (pointer). MOZ_ASSERT(obj->compartment() == cx->compartment()); - MOZ_ASSERT(obj->runtimeFromMainThread() == cx->runtime()); + MOZ_ASSERT(obj->runtimeFromActiveCooperatingThread() == cx->runtime()); MOZ_ASSERT_IF(!obj->hasLazyGroup() && obj->maybeShape(), obj->group()->clasp() == obj->maybeShape()->getObjectClass()); diff --git a/js/src/jit/arm/Bailouts-arm.cpp b/js/src/jit/arm/Bailouts-arm.cpp index db7f69d5824c..685c38ff9c02 100644 --- a/js/src/jit/arm/Bailouts-arm.cpp +++ b/js/src/jit/arm/Bailouts-arm.cpp @@ -89,7 +89,7 @@ BailoutFrameInfo::BailoutFrameInfo(const JitActivationIterator& activations, } // Compute the snapshot offset from the bailout ID. - JSRuntime* rt = activation->compartment()->runtimeFromMainThread(); + JSRuntime* rt = activation->compartment()->runtimeFromActiveCooperatingThread(); JitCode* code = rt->jitRuntime()->getBailoutTable(bailout->frameClass()); uintptr_t tableOffset = bailout->tableOffset(); uintptr_t tableStart = reinterpret_cast(Assembler::BailoutTableStart(code->raw())); diff --git a/js/src/jit/mips32/Bailouts-mips32.cpp b/js/src/jit/mips32/Bailouts-mips32.cpp index 1b92d729c937..0a4d94744c65 100644 --- a/js/src/jit/mips32/Bailouts-mips32.cpp +++ b/js/src/jit/mips32/Bailouts-mips32.cpp @@ -32,7 +32,7 @@ BailoutFrameInfo::BailoutFrameInfo(const JitActivationIterator& activations, } // Compute the snapshot offset from the bailout ID. - JSRuntime* rt = activation->compartment()->runtimeFromMainThread(); + JSRuntime* rt = activation->compartment()->runtimeFromActiveCooperatingThread(); JitCode* code = rt->jitRuntime()->getBailoutTable(bailout->frameClass()); uintptr_t tableOffset = bailout->tableOffset(); uintptr_t tableStart = reinterpret_cast(code->raw()); diff --git a/js/src/jit/x64/Trampoline-x64.cpp b/js/src/jit/x64/Trampoline-x64.cpp index 6e2dcbba783d..c2487a44fa68 100644 --- a/js/src/jit/x64/Trampoline-x64.cpp +++ b/js/src/jit/x64/Trampoline-x64.cpp @@ -13,6 +13,9 @@ #endif #include "jit/VMFunctions.h" #include "jit/x64/SharedICHelpers-x64.h" +#ifdef MOZ_VTUNE +# include "vtune/VTuneWrapper.h" +#endif #include "jit/MacroAssembler-inl.h" @@ -340,6 +343,9 @@ JitRuntime::generateEnterJIT(JSContext* cx, EnterJitType type) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "EnterJIT"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "EnterJIT"); +#endif return code; } @@ -389,6 +395,9 @@ JitRuntime::generateInvalidator(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "Invalidator"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "Invalidator"); +#endif return code; } @@ -548,6 +557,9 @@ JitRuntime::generateArgumentsRectifier(JSContext* cx, void** returnAddrOut) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "ArgumentsRectifier"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "ArgumentsRectifier"); +#endif if (returnAddrOut) *returnAddrOut = (void*)(code->raw() + returnOffset); @@ -633,6 +645,9 @@ JitRuntime::generateBailoutHandler(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "BailoutHandler"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "BailoutHandler"); +#endif return code; } @@ -818,6 +833,9 @@ JitRuntime::generateVMWrapper(JSContext* cx, const VMFunction& f) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(wrapper, "VMWrapper"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(wrapper, "VMWrapper"); +#endif // linker.newCode may trigger a GC and sweep functionWrappers_ so we have to // use relookupOrAdd instead of add. @@ -854,6 +872,9 @@ JitRuntime::generatePreBarrier(JSContext* cx, MIRType type) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "PreBarrier"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "PreBarrier"); +#endif return code; } @@ -930,6 +951,9 @@ JitRuntime::generateDebugTrapHandler(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(codeDbg, "DebugTrapHandler"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(codeDbg, "DebugTrapHandler"); +#endif return codeDbg; } @@ -947,6 +971,9 @@ JitRuntime::generateExceptionTailStub(JSContext* cx, void* handler) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "ExceptionTailStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "ExceptionTailStub"); +#endif return code; } @@ -964,6 +991,9 @@ JitRuntime::generateBailoutTailStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "BailoutTailStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "BailoutTailStub"); +#endif return code; } @@ -1298,6 +1328,9 @@ JitRuntime::generateProfilerExitFrameTailStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "ProfilerExitFrameStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "ProfilerExitFrameStub"); +#endif return code; } diff --git a/js/src/jit/x86/Bailouts-x86.cpp b/js/src/jit/x86/Bailouts-x86.cpp index 42dc1468c4c6..568ab648d39a 100644 --- a/js/src/jit/x86/Bailouts-x86.cpp +++ b/js/src/jit/x86/Bailouts-x86.cpp @@ -85,7 +85,7 @@ BailoutFrameInfo::BailoutFrameInfo(const JitActivationIterator& activations, } // Compute the snapshot offset from the bailout ID. - JSRuntime* rt = activation->compartment()->runtimeFromMainThread(); + JSRuntime* rt = activation->compartment()->runtimeFromActiveCooperatingThread(); JitCode* code = rt->jitRuntime()->getBailoutTable(bailout->frameClass()); uintptr_t tableOffset = bailout->tableOffset(); uintptr_t tableStart = reinterpret_cast(code->raw()); diff --git a/js/src/jit/x86/Trampoline-x86.cpp b/js/src/jit/x86/Trampoline-x86.cpp index 9f4a62a4acd2..89bb5d3b4262 100644 --- a/js/src/jit/x86/Trampoline-x86.cpp +++ b/js/src/jit/x86/Trampoline-x86.cpp @@ -19,6 +19,9 @@ #endif #include "jit/VMFunctions.h" #include "jit/x86/SharedICHelpers-x86.h" +#ifdef MOZ_VTUNE +# include "vtune/VTuneWrapper.h" +#endif #include "jsscriptinlines.h" @@ -385,6 +388,9 @@ JitRuntime::generateInvalidator(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "Invalidator"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "Invalidator"); +#endif return code; } @@ -546,6 +552,9 @@ JitRuntime::generateArgumentsRectifier(JSContext* cx, void** returnAddrOut) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "ArgumentsRectifier"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "ArgumentsRectifier"); +#endif if (returnAddrOut) *returnAddrOut = (void*) (code->raw() + returnOffset); @@ -645,7 +654,10 @@ JitRuntime::generateBailoutTable(JSContext* cx, uint32_t frameClass) JitCode* code = linker.newCode(cx, OTHER_CODE); #ifdef JS_ION_PERF - writePerfSpewerJitCodeProfile(code, "BailoutHandler"); + writePerfSpewerJitCodeProfile(code, "BailoutTable"); +#endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "BailoutTable"); #endif return code; @@ -663,6 +675,9 @@ JitRuntime::generateBailoutHandler(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "BailoutHandler"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "BailoutHandler"); +#endif return code; } @@ -843,6 +858,9 @@ JitRuntime::generateVMWrapper(JSContext* cx, const VMFunction& f) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(wrapper, "VMWrapper"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(wrapper, "VMWrapper"); +#endif // linker.newCode may trigger a GC and sweep functionWrappers_ so we have to // use relookupOrAdd instead of add. @@ -884,6 +902,9 @@ JitRuntime::generatePreBarrier(JSContext* cx, MIRType type) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "PreBarrier"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "PreBarrier"); +#endif return code; } @@ -960,6 +981,9 @@ JitRuntime::generateDebugTrapHandler(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(codeDbg, "DebugTrapHandler"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(codeDbg, "DebugTrapHandler"); +#endif return codeDbg; } @@ -977,6 +1001,9 @@ JitRuntime::generateExceptionTailStub(JSContext* cx, void* handler) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "ExceptionTailStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "ExceptionTailStub"); +#endif return code; } @@ -994,6 +1021,9 @@ JitRuntime::generateBailoutTailStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "BailoutTailStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "BailoutTailStub"); +#endif return code; } @@ -1331,6 +1361,9 @@ JitRuntime::generateProfilerExitFrameTailStub(JSContext* cx) #ifdef JS_ION_PERF writePerfSpewerJitCodeProfile(code, "ProfilerExitFrameStub"); #endif +#ifdef MOZ_VTUNE + vtune::MarkStub(code, "ProfilerExitFrameStub"); +#endif return code; } diff --git a/js/src/jsapi-tests/testHashTable.cpp b/js/src/jsapi-tests/testHashTable.cpp index a22ff7847177..0f01165bf2f2 100644 --- a/js/src/jsapi-tests/testHashTable.cpp +++ b/js/src/jsapi-tests/testHashTable.cpp @@ -378,7 +378,7 @@ BEGIN_TEST(testHashMapLookupWithDefaultOOM) { uint32_t timeToFail; for (timeToFail = 1; timeToFail < 1000; timeToFail++) { - js::oom::SimulateOOMAfter(timeToFail, js::oom::THREAD_TYPE_MAIN, false); + js::oom::SimulateOOMAfter(timeToFail, js::oom::THREAD_TYPE_COOPERATING, false); LookupWithDefaultUntilResize(); } diff --git a/js/src/jsapi-tests/testOOM.cpp b/js/src/jsapi-tests/testOOM.cpp index 303bf540314f..6f8b6edd57a6 100644 --- a/js/src/jsapi-tests/testOOM.cpp +++ b/js/src/jsapi-tests/testOOM.cpp @@ -36,7 +36,7 @@ const uint32_t maxAllocsPerTest = 100; testName = name; \ printf("Test %s: started\n", testName); \ for (oomAfter = 1; oomAfter < maxAllocsPerTest; ++oomAfter) { \ - js::oom::SimulateOOMAfter(oomAfter, js::oom::THREAD_TYPE_MAIN, true) + js::oom::SimulateOOMAfter(oomAfter, js::oom::THREAD_TYPE_COOPERATING, true) #define OOM_TEST_FINISHED \ { \ diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 7ea81c652dfd..7331aa495f1a 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -463,18 +463,14 @@ JS_FRIEND_API(bool) JS::isGCEnabled() { return true; } #endif JS_PUBLIC_API(JSContext*) -JS_NewContext(uint32_t maxbytes, uint32_t maxNurseryBytes, JSContext* parentContext) +JS_NewContext(uint32_t maxbytes, uint32_t maxNurseryBytes, JSRuntime* parentRuntime) { MOZ_ASSERT(JS::detail::libraryInitState == JS::detail::InitState::Running, "must call JS_Init prior to creating any JSContexts"); // Make sure that all parent runtimes are the topmost parent. - JSRuntime* parentRuntime = nullptr; - if (parentContext) { - parentRuntime = parentContext->runtime(); - while (parentRuntime && parentRuntime->parentRuntime) - parentRuntime = parentRuntime->parentRuntime; - } + while (parentRuntime && parentRuntime->parentRuntime) + parentRuntime = parentRuntime->parentRuntime; return NewContext(maxbytes, maxNurseryBytes, parentRuntime); } @@ -546,10 +542,10 @@ JS_EndRequest(JSContext* cx) StopRequest(cx); } -JS_PUBLIC_API(JSContext*) -JS_GetParentContext(JSContext* cx) +JS_PUBLIC_API(JSRuntime*) +JS_GetParentRuntime(JSContext* cx) { - return cx->runtime()->parentRuntime ? cx->runtime()->parentRuntime->unsafeContextFromAnyThread() : cx; + return cx->runtime()->parentRuntime ? cx->runtime()->parentRuntime : cx->runtime(); } JS_PUBLIC_API(JSVersion) @@ -1743,16 +1739,42 @@ JS::CompartmentBehaviors::extraWarnings(JSContext* cx) const } JS::CompartmentCreationOptions& -JS::CompartmentCreationOptions::setZone(ZoneSpecifier spec) +JS::CompartmentCreationOptions::setSystemZone() { - zone_.spec = spec; + zoneSpec_ = JS::SystemZone; + zonePointer_ = nullptr; return *this; } JS::CompartmentCreationOptions& -JS::CompartmentCreationOptions::setSameZoneAs(JSObject* obj) +JS::CompartmentCreationOptions::setExistingZone(JSObject* obj) { - zone_.pointer = static_cast(obj->zone()); + zoneSpec_ = JS::ExistingZone; + zonePointer_ = obj->zone(); + return *this; +} + +JS::CompartmentCreationOptions& +JS::CompartmentCreationOptions::setNewZoneInNewZoneGroup() +{ + zoneSpec_ = JS::NewZoneInNewZoneGroup; + zonePointer_ = nullptr; + return *this; +} + +JS::CompartmentCreationOptions& +JS::CompartmentCreationOptions::setNewZoneInSystemZoneGroup() +{ + zoneSpec_ = JS::NewZoneInSystemZoneGroup; + zonePointer_ = nullptr; + return *this; +} + +JS::CompartmentCreationOptions& +JS::CompartmentCreationOptions::setNewZoneInExistingZoneGroup(JSObject* obj) +{ + zoneSpec_ = JS::NewZoneInExistingZoneGroup; + zonePointer_ = obj->zone()->group(); return *this; } @@ -4086,13 +4108,13 @@ JS::CanCompileOffThread(JSContext* cx, const ReadOnlyCompileOptions& options, si // These are heuristics which the caller may choose to ignore (e.g., for // testing purposes). if (!options.forceAsync) { - // Compiling off the main thread inolves creating a new Zone and other + // Compiling off the active thread inolves creating a new Zone and other // significant overheads. Don't bother if the script is tiny. if (length < TINY_LENGTH) return false; // If the parsing task would have to wait for GC to complete, it'll probably - // be faster to just start it synchronously on the main thread unless the + // be faster to just start it synchronously on the active thread unless the // script is huge. if (OffThreadParsingMustWaitForGC(cx->runtime()) && length < HUGE_LENGTH) return false; diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 6a209fa5819f..0a1ec528fcd6 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -981,7 +981,7 @@ JS_IsBuiltinFunctionConstructor(JSFunction* fun); extern JS_PUBLIC_API(JSContext*) JS_NewContext(uint32_t maxbytes, uint32_t maxNurseryBytes = JS::DefaultNurseryBytes, - JSContext* parentContext = nullptr); + JSRuntime* parentRuntime = nullptr); extern JS_PUBLIC_API(void) JS_DestroyContext(JSContext* cx); @@ -992,8 +992,8 @@ JS_GetContextPrivate(JSContext* cx); JS_PUBLIC_API(void) JS_SetContextPrivate(JSContext* cx, void* data); -extern JS_PUBLIC_API(JSContext*) -JS_GetParentContext(JSContext* cx); +extern JS_PUBLIC_API(JSRuntime*) +JS_GetParentRuntime(JSContext* cx); extern JS_PUBLIC_API(void) JS_BeginRequest(JSContext* cx); @@ -1710,6 +1710,9 @@ typedef enum JSGCParamKey { /** Number of JS_malloc bytes before last ditch GC. */ JSGC_MAX_MALLOC_BYTES = 1, + /** Maximum size of the generational GC nurseries. */ + JSGC_MAX_NURSERY_BYTES = 2, + /** Amount of bytes allocated by the GC. */ JSGC_BYTES = 3, @@ -2178,9 +2181,23 @@ JS_GetConstructor(JSContext* cx, JS::Handle proto); namespace JS { +// Specification for which zone a newly created compartment should use. enum ZoneSpecifier { - FreshZone = 0, - SystemZone = 1 + // Use the single runtime wide system zone. The meaning of this zone is + // left to the embedder. + SystemZone, + + // Use a particular existing zone. + ExistingZone, + + // Create a new zone with its own new zone group. + NewZoneInNewZoneGroup, + + // Create a new zone in the same zone group as the system zone. + NewZoneInSystemZoneGroup, + + // Create a new zone in the same zone group as another existing zone. + NewZoneInExistingZoneGroup }; /** @@ -2197,6 +2214,8 @@ class JS_PUBLIC_API(CompartmentCreationOptions) CompartmentCreationOptions() : addonId_(nullptr), traceGlobal_(nullptr), + zoneSpec_(NewZoneInSystemZoneGroup), + zonePointer_(nullptr), invisibleToDebugger_(false), mergeable_(false), preserveJitCode_(false), @@ -2204,9 +2223,7 @@ class JS_PUBLIC_API(CompartmentCreationOptions) experimentalNumberFormatFormatToPartsEnabled_(false), sharedMemoryAndAtomics_(false), secureContext_(false) - { - zone_.spec = JS::FreshZone; - } + {} // A null add-on ID means that the compartment is not associated with an // add-on. @@ -2224,13 +2241,15 @@ class JS_PUBLIC_API(CompartmentCreationOptions) return *this; } - void* zonePointer() const { - MOZ_ASSERT(uintptr_t(zone_.pointer) > uintptr_t(JS::SystemZone)); - return zone_.pointer; - } - ZoneSpecifier zoneSpecifier() const { return zone_.spec; } - CompartmentCreationOptions& setZone(ZoneSpecifier spec); - CompartmentCreationOptions& setSameZoneAs(JSObject* obj); + void* zonePointer() const { return zonePointer_; } + ZoneSpecifier zoneSpecifier() const { return zoneSpec_; } + + // Set the zone to use for the compartment. See ZoneSpecifier above. + CompartmentCreationOptions& setSystemZone(); + CompartmentCreationOptions& setExistingZone(JSObject* obj); + CompartmentCreationOptions& setNewZoneInNewZoneGroup(); + CompartmentCreationOptions& setNewZoneInSystemZoneGroup(); + CompartmentCreationOptions& setNewZoneInExistingZoneGroup(JSObject* obj); // Certain scopes (i.e. XBL compilation scopes) are implementation details // of the embedding, and references to them should never leak out to script. @@ -2299,10 +2318,8 @@ class JS_PUBLIC_API(CompartmentCreationOptions) private: JSAddonId* addonId_; JSTraceOp traceGlobal_; - union { - ZoneSpecifier spec; - void* pointer; // js::Zone* is not exposed in the API. - } zone_; + ZoneSpecifier zoneSpec_; + void* zonePointer_; // Per zoneSpec_, either a Zone, ZoneGroup, or null. bool invisibleToDebugger_; bool mergeable_; bool preserveJitCode_; @@ -4141,9 +4158,9 @@ CanCompileOffThread(JSContext* cx, const ReadOnlyCompileOptions& options, size_t * * After successfully triggering an off thread compile of a script, the * callback will eventually be invoked with the specified data and a token - * for the compilation. The callback will be invoked while off the main thread, + * for the compilation. The callback will be invoked while off thread, * so must ensure that its operations are thread safe. Afterwards, one of the - * following functions must be invoked on the main thread: + * following functions must be invoked on the runtime's active thread: * * - FinishOffThreadScript, to get the result script (or nullptr on failure). * - CancelOffThreadScript, to free the resources without creating a script. @@ -5983,7 +6000,7 @@ DecodeInterpretedFunction(JSContext* cx, TranscodeBuffer& buffer, JS::MutableHan // Register an encoder on the given script source, such that all functions can // be encoded as they are parsed. This strategy is used to avoid blocking the -// main thread in a non-interruptible way. +// active thread in a non-interruptible way. // // The |script| argument of |StartIncrementalEncoding| and // |FinishIncrementalEncoding| should be the top-level script returned either as diff --git a/js/src/jscntxt.cpp b/js/src/jscntxt.cpp index 05bed58213ba..d36810ec963e 100644 --- a/js/src/jscntxt.cpp +++ b/js/src/jscntxt.cpp @@ -176,10 +176,28 @@ js::DestroyContext(JSContext* cx) cx->checkNoGCRooters(); - js_delete(cx->ionPcScriptCache.ref()); + // Cancel all off thread Ion compiles before destroying a cooperative + // context. Completed Ion compiles may try to interrupt arbitrary + // cooperative contexts which they have read off the owner context of a + // zone group. See HelperThread::handleIonWorkload. + CancelOffThreadIonCompile(cx->runtime()); - cx->runtime()->destroyRuntime(); - js_delete(cx->runtime()); + if (cx->runtime()->cooperatingContexts().length() == 1) { + // Destroy the runtime along with its last context. + cx->runtime()->destroyRuntime(); + js_delete(cx->runtime()); + } else { + DebugOnly found = false; + for (size_t i = 0; i < cx->runtime()->cooperatingContexts().length(); i++) { + CooperatingContext& target = cx->runtime()->cooperatingContexts()[i]; + if (cx == target.context()) { + cx->runtime()->cooperatingContexts().erase(&target); + found = true; + break; + } + } + MOZ_ASSERT(found); + } js_delete_poison(cx); } @@ -1034,6 +1052,8 @@ JSContext::~JSContext() /* Free the stuff hanging off of cx. */ MOZ_ASSERT(!resolvingList); + js_delete(ionPcScriptCache.ref()); + if (dtoaState) DestroyDtoaState(dtoaState); diff --git a/js/src/jscntxt.h b/js/src/jscntxt.h index 7605e0265165..a6b11c76be20 100644 --- a/js/src/jscntxt.h +++ b/js/src/jscntxt.h @@ -449,12 +449,12 @@ struct JSContext : public JS::RootingContext, js::ThreadLocalData ionCompilingSafeForMinorGC; // Whether this thread is currently performing GC. This thread could be the - // main thread or a helper thread while the main thread is running the + // active thread or a helper thread while the active thread is running the // collector. js::ThreadLocalData performingGC; // Whether this thread is currently sweeping GC things. This thread could - // be the main thread or a helper thread while the main thread is running + // be the active thread or a helper thread while the active thread is running // the mutator. This is used to assert that destruction of GCPtr only // happens when we are sweeping. js::ThreadLocalData gcSweeping; @@ -516,9 +516,9 @@ struct JSContext : public JS::RootingContext, // with AutoDisableCompactingGC which uses this counter. js::ThreadLocalData compactingDisabledCount; - // Count of AutoKeepAtoms instances on the main thread's stack. When any + // Count of AutoKeepAtoms instances on the current thread's stack. When any // instances exist, atoms in the runtime will not be collected. Threads - // off the main thread do not increment this value, but the presence + // parsing off the active thread do not increment this value, but the presence // of any such threads also inhibits collection of atoms. We don't scan the // stacks of exclusive threads, so we need to avoid collecting their // objects in another way. The only GC thing pointers they have are to @@ -779,9 +779,9 @@ struct JSContext : public JS::RootingContext, RequestInterruptCanWait }; - // Any thread can call requestInterrupt() to request that the main JS thread + // Any thread can call requestInterrupt() to request that this thread // stop running and call the interrupt callback (allowing the interrupt - // callback to halt execution). To stop the main JS thread, requestInterrupt + // callback to halt execution). To stop this thread, requestInterrupt // sets two fields: interrupt_ (set to true) and jitStackLimit_ (set to // UINTPTR_MAX). The JS engine must continually poll one of these fields // and call handleInterrupt if either field has the interrupt value. (The @@ -792,7 +792,7 @@ struct JSContext : public JS::RootingContext, // // Note that the writes to interrupt_ and jitStackLimit_ use a Relaxed // Atomic so, while the writes are guaranteed to eventually be visible to - // the main thread, it can happen in any order. handleInterrupt calls the + // this thread, it can happen in any order. handleInterrupt calls the // interrupt callback if either is set, so it really doesn't matter as long // as the JS engine is continually polling at least one field. In corner // cases, this relaxed ordering could lead to an interrupt handler being @@ -1134,9 +1134,9 @@ class MOZ_RAII AutoLockForExclusiveAccess if (runtime->numExclusiveThreads) { runtime->exclusiveAccessLock.lock(); } else { - MOZ_ASSERT(!runtime->mainThreadHasExclusiveAccess); + MOZ_ASSERT(!runtime->activeThreadHasExclusiveAccess); #ifdef DEBUG - runtime->mainThreadHasExclusiveAccess = true; + runtime->activeThreadHasExclusiveAccess = true; #endif } } @@ -1154,9 +1154,9 @@ class MOZ_RAII AutoLockForExclusiveAccess if (runtime->numExclusiveThreads) { runtime->exclusiveAccessLock.unlock(); } else { - MOZ_ASSERT(runtime->mainThreadHasExclusiveAccess); + MOZ_ASSERT(runtime->activeThreadHasExclusiveAccess); #ifdef DEBUG - runtime->mainThreadHasExclusiveAccess = false; + runtime->activeThreadHasExclusiveAccess = false; #endif } } diff --git a/js/src/jscompartment.cpp b/js/src/jscompartment.cpp index 72cf9656d043..05add3a8f077 100644 --- a/js/src/jscompartment.cpp +++ b/js/src/jscompartment.cpp @@ -103,7 +103,7 @@ JSCompartment::~JSCompartment() reportTelemetry(); // Write the code coverage information in a file. - JSRuntime* rt = runtimeFromMainThread(); + JSRuntime* rt = runtimeFromActiveCooperatingThread(); if (rt->lcovOutput().isEnabled()) rt->lcovOutput().writeLCovResult(lcovOutput); @@ -1124,7 +1124,7 @@ JSCompartment::updateDebuggerObservesFlag(unsigned flag) flag == DebuggerObservesCoverage || flag == DebuggerObservesAsmJS); - GlobalObject* global = zone()->runtimeFromMainThread()->gc.isForegroundSweeping() + GlobalObject* global = zone()->runtimeFromActiveCooperatingThread()->gc.isForegroundSweeping() ? unsafeUnbarrieredMaybeGlobal() : maybeGlobal(); const GlobalObject::DebuggerVector* v = global->getDebuggers(); diff --git a/js/src/jscompartment.h b/js/src/jscompartment.h index 9359785fd4b3..862801bc41c9 100644 --- a/js/src/jscompartment.h +++ b/js/src/jscompartment.h @@ -395,7 +395,7 @@ struct JSCompartment JS::CompartmentBehaviors& behaviors() { return behaviors_; } const JS::CompartmentBehaviors& behaviors() const { return behaviors_; } - JSRuntime* runtimeFromMainThread() const { + JSRuntime* runtimeFromActiveCooperatingThread() const { MOZ_ASSERT(CurrentThreadCanAccessRuntime(runtime_)); return runtime_; } @@ -406,10 +406,6 @@ struct JSCompartment return runtime_; } - JSContext* contextFromMainThread() const { - return runtime_->contextFromMainThread(); - } - /* * Nb: global_ might be nullptr, if (a) it's the atoms compartment, or * (b) the compartment's global has been collected. The latter can happen diff --git a/js/src/jsexn.cpp b/js/src/jsexn.cpp index fa7efb13149b..49cca69eeb3e 100644 --- a/js/src/jsexn.cpp +++ b/js/src/jsexn.cpp @@ -324,7 +324,7 @@ js::ComputeStackString(JSContext* cx) static void exn_finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->maybeOffMainThread()); + MOZ_ASSERT(fop->maybeOnHelperThread()); if (JSErrorReport* report = obj->as().getErrorReport()) fop->free_(report); } diff --git a/js/src/jsfriendapi.cpp b/js/src/jsfriendapi.cpp index 737def76ead8..8b72a58f1d07 100644 --- a/js/src/jsfriendapi.cpp +++ b/js/src/jsfriendapi.cpp @@ -169,7 +169,7 @@ JS_SetCompartmentPrincipals(JSCompartment* compartment, JSPrincipals* principals // Any compartment with the trusted principals -- and there can be // multiple -- is a system compartment. - const JSPrincipals* trusted = compartment->runtimeFromMainThread()->trustedPrincipals(); + const JSPrincipals* trusted = compartment->runtimeFromActiveCooperatingThread()->trustedPrincipals(); bool isSystem = principals && principals == trusted; // Clear out the old principals, if any. @@ -390,7 +390,7 @@ js::NotifyAnimationActivity(JSObject* obj) { int64_t timeNow = PRMJ_Now(); obj->compartment()->lastAnimationTime = timeNow; - obj->runtimeFromMainThread()->lastAnimationTime = timeNow; + obj->runtimeFromActiveCooperatingThread()->lastAnimationTime = timeNow; } JS_FRIEND_API(uint32_t) diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp index 2c957f476431..01f9728f5efc 100644 --- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -618,7 +618,7 @@ js::XDRInterpretedFunction(XDRState* xdr, HandleScope enclosingScope, if (mode == XDR_DECODE) { RootedObject proto(cx); if (firstword & IsStarGenerator) { - // If we are off the main thread, the generator meta-objects have + // If we are off thread, the generator meta-objects have // already been created by js::StartOffThreadParseTask, so // JSContext* will not be necessary. JSContext* context = cx->helperThread() ? nullptr : cx; diff --git a/js/src/jsgc.cpp b/js/src/jsgc.cpp index 9cdad9f56a96..ae5ee9f7047f 100644 --- a/js/src/jsgc.cpp +++ b/js/src/jsgc.cpp @@ -324,7 +324,7 @@ struct js::gc::FinalizePhase }; /* - * Finalization order for GC things swept incrementally on the main thrad. + * Finalization order for GC things swept incrementally on the active thread. */ static const FinalizePhase IncrementalFinalizePhases[] = { { @@ -508,12 +508,12 @@ FinalizeTypedArenas(FreeOp* fop, { // When operating in the foreground, take the lock at the top. Maybe maybeLock; - if (fop->onMainThread()) + if (fop->onActiveCooperatingThread()) maybeLock.emplace(fop->runtime()); // During background sweeping free arenas are released later on in // sweepBackgroundThings(). - MOZ_ASSERT_IF(!fop->onMainThread(), keepArenas == ArenaLists::KEEP_ARENAS); + MOZ_ASSERT_IF(!fop->onActiveCooperatingThread(), keepArenas == ArenaLists::KEEP_ARENAS); size_t thingSize = Arena::thingSize(thingKind); size_t thingsPerArena = Arena::thingsPerArena(thingKind); @@ -810,6 +810,7 @@ GCRuntime::releaseArena(Arena* arena, const AutoLockGC& lock) GCRuntime::GCRuntime(JSRuntime* rt) : rt(rt), systemZone(nullptr), + systemZoneGroup(nullptr), atomsZone(nullptr), stats_(rt), marker(rt), @@ -1044,6 +1045,7 @@ GCRuntime::init(uint32_t maxbytes, uint32_t maxNurseryBytes) * for default backward API compatibility. */ MOZ_ALWAYS_TRUE(tunables.setParameter(JSGC_MAX_BYTES, maxbytes, lock)); + MOZ_ALWAYS_TRUE(tunables.setParameter(JSGC_MAX_NURSERY_BYTES, maxNurseryBytes, lock)); setMaxMallocBytes(maxbytes); const char* size = getenv("JSGC_MARK_STACK_LIMIT"); @@ -1165,6 +1167,9 @@ GCSchedulingTunables::setParameter(JSGCParamKey key, uint32_t value, const AutoL case JSGC_MAX_BYTES: gcMaxBytes_ = value; break; + case JSGC_MAX_NURSERY_BYTES: + gcMaxNurseryBytes_ = value; + break; case JSGC_HIGH_FREQUENCY_TIME_LIMIT: highFrequencyThresholdUsec_ = value * PRMJ_USEC_PER_MSEC; break; @@ -1999,7 +2004,7 @@ bool ArenaLists::relocateArenas(Zone* zone, Arena*& relocatedListOut, JS::gcreason::Reason reason, SliceBudget& sliceBudget, gcstats::Statistics& stats) { - // This is only called from the main thread while we are doing a GC, so + // This is only called from the active thread while we are doing a GC, so // there is no need to lock. MOZ_ASSERT(CurrentThreadCanAccessRuntime(runtime_)); MOZ_ASSERT(runtime_->gc.isHeapCompacting()); @@ -2128,7 +2133,7 @@ MovingTracer::onScopeEdge(Scope** scopep) void Zone::prepareForCompacting() { - FreeOp* fop = runtimeFromMainThread()->defaultFreeOp(); + FreeOp* fop = runtimeFromActiveCooperatingThread()->defaultFreeOp(); discardJitCode(fop); } @@ -2410,7 +2415,7 @@ GCRuntime::updateCellPointers(MovingTracer* trc, Zone* zone, AllocKinds kinds, s } } - fgTask->runFromMainThread(rt); + fgTask->runFromActiveCooperatingThread(rt); { AutoLockHelperThreadState lock; @@ -2976,7 +2981,7 @@ bool GCRuntime::triggerGC(JS::gcreason::Reason reason) { /* - * Don't trigger GCs if this is being called off the main thread from + * Don't trigger GCs if this is being called off the active thread from * onTooMuchMalloc(). */ if (!CurrentThreadCanAccessRuntime(rt)) @@ -3117,7 +3122,7 @@ GCRuntime::startDecommit() MOZ_ASSERT(!chunk->info.numArenasFreeCommitted); // Since we release the GC lock while doing the decommit syscall below, - // it is dangerous to iterate the available list directly, as the main + // it is dangerous to iterate the available list directly, as the active // thread could modify it concurrently. Instead, we build and pass an // explicit Vector containing the Chunks we want to visit. MOZ_ASSERT(availableChunks(lock).verify()); @@ -3133,7 +3138,7 @@ GCRuntime::startDecommit() if (sweepOnBackgroundThread && decommitTask.start()) return; - decommitTask.runFromMainThread(rt); + decommitTask.runFromActiveCooperatingThread(rt); } void @@ -3198,7 +3203,7 @@ GCRuntime::sweepBackgroundThings(ZoneList& zones, LifoAlloc& freeBlocks) AutoLockGC lock(rt); // Release swept areans, dropping and reaquiring the lock every so often to - // avoid blocking the main thread from allocating chunks. + // avoid blocking the active thread from allocating chunks. static const size_t LockReleasePeriod = 32; size_t releaseCount = 0; Arena* next; @@ -3369,7 +3374,7 @@ GCHelperState::waitBackgroundSweepEnd() void GCHelperState::doSweep(AutoLockGC& lock) { - // The main thread may call queueZonesForBackgroundSweep() while this is + // The active thread may call queueZonesForBackgroundSweep() while this is // running so we must check there is no more work to do before exiting. do { @@ -3452,7 +3457,7 @@ JS::Zone::sweepUniqueIds(js::FreeOp* fop) void Zone::sweepCompartments(FreeOp* fop, bool keepAtleastOne, bool destroyingRuntime) { - JSRuntime* rt = runtimeFromMainThread(); + JSRuntime* rt = runtimeFromActiveCooperatingThread(); JSDestroyCompartmentCallback callback = rt->destroyCompartmentCallback; JSCompartment** read = compartments().begin(); @@ -3550,9 +3555,7 @@ GCRuntime::sweepZoneGroups(FreeOp* fop, bool destroyingRuntime) ZoneGroup* group = *read++; sweepZones(fop, group, destroyingRuntime); - // For now, the singleton zone group is not destroyed until the runtime - // itself is, bug 1323066. - if (group->zones().empty() && group != rt->zoneGroupFromMainThread()) { + if (group->zones().empty()) { MOZ_ASSERT(numActiveZoneIters == 0); fop->delete_(group); } else { @@ -3756,7 +3759,7 @@ RelazifyFunctions(Zone* zone, AllocKind kind) AutoAssertEmptyNursery empty(TlsContext.get()); - JSRuntime* rt = zone->runtimeFromMainThread(); + JSRuntime* rt = zone->runtimeFromActiveCooperatingThread(); for (auto i = zone->cellIter(kind, empty); !i.done(); i.next()) { JSFunction* fun = &i->as(); if (fun->hasScript()) @@ -3842,9 +3845,9 @@ GCRuntime::beginMarkPhase(JS::gcreason::Reason reason, AutoLockForExclusiveAcces * Note that only affects the first slice of an incremental GC since root * marking is completed before we return to the mutator. * - * Off-main-thread parsing is inhibited after the start of GC which prevents + * Off-thread parsing is inhibited after the start of GC which prevents * races between creating atoms during parsing and sweeping atoms on the - * main thread. + * active thread. * * Otherwise, we always schedule a GC in the atoms zone so that atoms which * the other collected zones are using are marked, and we can update the @@ -4474,7 +4477,7 @@ Zone::findOutgoingEdges(ZoneComponentFinder& finder) * Any compartment may have a pointer to an atom in the atoms * compartment, and these aren't in the cross compartment map. */ - JSRuntime* rt = runtimeFromMainThread(); + JSRuntime* rt = runtimeFromActiveCooperatingThread(); Zone* atomsZone = rt->atomsCompartment(finder.lock)->zone(); if (atomsZone->isGCMarking()) finder.addEdgeTo(atomsZone); @@ -4968,7 +4971,7 @@ GCRuntime::startTask(GCParallelTask& task, gcstats::Phase phase, AutoLockHelperT if (!task.startWithLockHeld(locked)) { AutoUnlockHelperThreadState unlock(locked); gcstats::AutoPhase ap(stats(), phase); - task.runFromMainThread(rt); + task.runFromActiveCooperatingThread(rt); } } @@ -4982,12 +4985,12 @@ GCRuntime::joinTask(GCParallelTask& task, gcstats::Phase phase, AutoLockHelperTh using WeakCacheTaskVector = mozilla::Vector; static void -SweepWeakCachesFromMainThread(JSRuntime* rt) +SweepWeakCachesFromActiveCooperatingThread(JSRuntime* rt) { for (GCZoneGroupIter zone(rt); !zone.done(); zone.next()) { for (JS::WeakCache* cache : zone->weakCaches()) { SweepWeakCacheTask task(rt, *cache); - task.runFromMainThread(rt); + task.runFromActiveCooperatingThread(rt); } } } @@ -4999,7 +5002,7 @@ PrepareWeakCacheTasks(JSRuntime* rt) for (GCZoneGroupIter zone(rt); !zone.done(); zone.next()) { for (JS::WeakCache* cache : zone->weakCaches()) { if (!out.append(SweepWeakCacheTask(rt, *cache))) { - SweepWeakCachesFromMainThread(rt); + SweepWeakCachesFromActiveCooperatingThread(rt); return WeakCacheTaskVector(); } } @@ -5095,7 +5098,7 @@ GCRuntime::beginSweepingZoneGroup(AutoLockForExclusiveAccess& lock) startTask(task, gcstats::PHASE_SWEEP_MISC, helperLock); } - // The remainder of the of the tasks run in parallel on the main + // The remainder of the of the tasks run in parallel on the active // thread until we join, below. { gcstats::AutoPhase ap(stats(), gcstats::PHASE_SWEEP_MISC); @@ -5153,7 +5156,7 @@ GCRuntime::beginSweepingZoneGroup(AutoLockForExclusiveAccess& lock) } } - // Rejoin our off-main-thread tasks. + // Rejoin our off-thread tasks. if (sweepingAtoms) { AutoLockHelperThreadState helperLock; joinTask(sweepAtomsTask, gcstats::PHASE_SWEEP_ATOMS, helperLock); @@ -6169,7 +6172,6 @@ namespace { class AutoScheduleZonesForGC { JSRuntime* rt_; - AutoAccessZoneGroups aazg; public: explicit AutoScheduleZonesForGC(JSRuntime* rt) : rt_(rt) { @@ -6187,9 +6189,6 @@ class AutoScheduleZonesForGC { zone->scheduleGC(); } - - if (zone->isGCScheduled() && !zone->isAtomsZone()) - aazg.access(zone->group()); } } @@ -6263,7 +6262,7 @@ GCRuntime::gcCycle(bool nonincrementalByAPI, SliceBudget& budget, JS::gcreason:: if (!isIncrementalGCInProgress()) incMajorGcNumber(); - // It's ok if threads other than the main thread have suppressGC set, as + // It's ok if threads other than the active thread have suppressGC set, as // they are operating on zones which will not be collected from here. MOZ_ASSERT(!TlsContext.get()->suppressGC); @@ -6287,7 +6286,7 @@ GCRuntime::gcCycle(bool nonincrementalByAPI, SliceBudget& budget, JS::gcreason:: allocTask.cancel(GCParallelTask::CancelAndWait); } - // We don't allow off-main-thread parsing to start while we're doing an + // We don't allow off-thread parsing to start while we're doing an // incremental GC. MOZ_ASSERT_IF(rt->activeGCInAtomsZone(), !rt->exclusiveThreadsPresent()); @@ -6753,15 +6752,61 @@ AutoPrepareForTracing::AutoPrepareForTracing(JSContext* cx, ZoneSelector selecto } JSCompartment* -js::NewCompartment(JSContext* cx, Zone* zone, JSPrincipals* principals, +js::NewCompartment(JSContext* cx, JSPrincipals* principals, const JS::CompartmentOptions& options) { JSRuntime* rt = cx->runtime(); JS_AbortIfWrongThread(cx); + ScopedJSDeletePtr groupHolder; ScopedJSDeletePtr zoneHolder; + + Zone* zone = nullptr; + ZoneGroup* group = nullptr; + JS::ZoneSpecifier zoneSpec = options.creationOptions().zoneSpecifier(); + switch (zoneSpec) { + case JS::SystemZone: + // systemZone and possibly systemZoneGroup might be null here, in which + // case we'll make a zone/group and set these fields below. + zone = rt->gc.systemZone; + group = rt->gc.systemZoneGroup; + break; + case JS::ExistingZone: + zone = static_cast(options.creationOptions().zonePointer()); + MOZ_ASSERT(zone); + group = zone->group(); + break; + case JS::NewZoneInNewZoneGroup: + break; + case JS::NewZoneInSystemZoneGroup: + // As above, systemZoneGroup might be null here. + group = rt->gc.systemZoneGroup; + break; + case JS::NewZoneInExistingZoneGroup: + group = static_cast(options.creationOptions().zonePointer()); + MOZ_ASSERT(group); + break; + } + + if (!group) { + MOZ_ASSERT(!zone); + group = cx->new_(rt); + if (!group) + return nullptr; + + groupHolder.reset(group); + + if (!group->init(rt->gc.tunables.gcMaxNurseryBytes())) { + ReportOutOfMemory(cx); + return nullptr; + } + + if (cx->generationalDisabled) + group->nursery().disable(); + } + if (!zone) { - zone = cx->new_(cx->runtime(), rt->zoneGroupFromMainThread()); + zone = cx->new_(cx->runtime(), group); if (!zone) return nullptr; @@ -6789,12 +6834,35 @@ js::NewCompartment(JSContext* cx, Zone* zone, JSPrincipals* principals, return nullptr; } - if (zoneHolder && zoneHolder->group() && !zoneHolder->group()->zones().append(zone)) { - ReportOutOfMemory(cx); - return nullptr; + if (zoneHolder) { + if (!group->zones().append(zone)) { + ReportOutOfMemory(cx); + return nullptr; + } + + // Lazily set the runtime's sytem zone. + if (zoneSpec == JS::SystemZone) { + MOZ_RELEASE_ASSERT(!rt->gc.systemZone); + rt->gc.systemZone = zone; + zone->isSystem = true; + } + } + + if (groupHolder) { + if (!rt->gc.groups.ref().append(group)) { + ReportOutOfMemory(cx); + return nullptr; + } + + // Lazily set the runtime's system zone group. + if (zoneSpec == JS::SystemZone || zoneSpec == JS::NewZoneInSystemZoneGroup) { + MOZ_RELEASE_ASSERT(!rt->gc.systemZoneGroup); + rt->gc.systemZoneGroup = group; + } } zoneHolder.forget(); + groupHolder.forget(); return compartment.forget(); } @@ -6809,7 +6877,7 @@ gc::MergeCompartments(JSCompartment* source, JSCompartment* target) MOZ_ASSERT(source->creationOptions().addonIdOrNull() == target->creationOptions().addonIdOrNull()); - JSContext* cx = source->runtimeFromMainThread()->activeContextFromOwnThread(); + JSContext* cx = source->runtimeFromActiveCooperatingThread()->activeContextFromOwnThread(); AutoPrepareForTracing prepare(cx, SkipAtoms); @@ -7767,7 +7835,7 @@ js::gc::detail::CellIsMarkedGrayIfKnown(const Cell* cell) // that is not being collected. Gray targets of CCWs that are marked black // by a barrier will eventually be marked black in the next GC slice. auto tc = &cell->asTenured(); - auto rt = tc->runtimeFromMainThread(); + auto rt = tc->runtimeFromActiveCooperatingThread(); if (!rt->gc.areGrayBitsValid() || (rt->gc.isIncrementalGCInProgress() && !tc->zone()->wasGCStarted())) { diff --git a/js/src/jsgc.h b/js/src/jsgc.h index 258a2b3e6122..e31d643960ec 100644 --- a/js/src/jsgc.h +++ b/js/src/jsgc.h @@ -170,7 +170,7 @@ CanBeFinalizedInBackground(AllocKind kind, const Class* clasp) MOZ_ASSERT(IsObjectAllocKind(kind)); /* If the class has no finalizer or a finalizer that is safe to call on * a different thread, we change the alloc kind. For example, - * AllocKind::OBJECT0 calls the finalizer on the main thread, + * AllocKind::OBJECT0 calls the finalizer on the active thread, * AllocKind::OBJECT0_BACKGROUND calls the finalizer on the gcHelperThread. * IsBackgroundFinalized is called to prevent recursively incrementing * the alloc kind; kind may already be a background finalize kind. @@ -855,10 +855,10 @@ NotifyGCPostSwap(JSObject* a, JSObject* b, unsigned preResult); /* * Helper state for use when JS helper threads sweep and allocate GC thing kinds - * that can be swept and allocated off the main thread. + * that can be swept and allocated off thread. * * In non-threadsafe builds, all actual sweeping and allocation is performed - * on the main thread, but GCHelperState encapsulates this from clients as + * on the active thread, but GCHelperState encapsulates this from clients as * much as possible. */ class GCHelperState @@ -871,7 +871,7 @@ class GCHelperState // Associated runtime. JSRuntime* const rt; - // Condvar for notifying the main thread when work has finished. This is + // Condvar for notifying the active thread when work has finished. This is // associated with the runtime's GC lock --- the worker thread state // condvars can't be used here due to lock ordering issues. js::ConditionVariable done; @@ -986,8 +986,8 @@ class GCParallelTask bool startWithLockHeld(AutoLockHelperThreadState& locked); void joinWithLockHeld(AutoLockHelperThreadState& locked); - // Instead of dispatching to a helper, run the task on the main thread. - void runFromMainThread(JSRuntime* rt); + // Instead of dispatching to a helper, run the task on the current thread. + void runFromActiveCooperatingThread(JSRuntime* rt); // Dispatch a cancelation request. enum CancelMode { CancelNoWait, CancelAndWait}; @@ -1057,7 +1057,7 @@ extern void FinalizeStringRT(JSRuntime* rt, JSString* str); JSCompartment* -NewCompartment(JSContext* cx, JS::Zone* zone, JSPrincipals* principals, +NewCompartment(JSContext* cx, JSPrincipals* principals, const JS::CompartmentOptions& options); namespace gc { diff --git a/js/src/jsobj.h b/js/src/jsobj.h index daa79c724936..f1c3c210c21f 100644 --- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -479,7 +479,7 @@ class JSObject : public js::gc::Cell // // These cases are: // 1) The off-thread parsing task uses a dummy global since it cannot - // share with the actual global being used concurrently on the main + // share with the actual global being used concurrently on the active // thread. // 2) A GC may occur when creating the GlobalObject, in which case the // compartment global pointer may not yet be set. In this case there is diff --git a/js/src/jsobjinlines.h b/js/src/jsobjinlines.h index 9b397ebaba1c..710406edb490 100644 --- a/js/src/jsobjinlines.h +++ b/js/src/jsobjinlines.h @@ -74,7 +74,7 @@ JSObject::finalize(js::FreeOp* fop) #ifdef DEBUG MOZ_ASSERT(isTenured()); if (!IsBackgroundFinalized(asTenured().getAllocKind())) { - /* Assert we're on the main thread. */ + /* Assert we're on the active thread. */ MOZ_ASSERT(CurrentThreadCanAccessZone(zone())); } #endif @@ -299,7 +299,7 @@ SetNewObjectMetadata(JSContext* cx, JSObject* obj) { MOZ_ASSERT(!cx->compartment()->hasObjectPendingMetadata()); - // The metadata builder is invoked for each object created on the main + // The metadata builder is invoked for each object created on the active // thread, except when analysis/compilation is active, to avoid recursion. if (!cx->helperThread()) { if (MOZ_UNLIKELY((size_t)cx->compartment()->hasAllocationMetadataBuilder()) && @@ -337,7 +337,7 @@ JSObject::create(JSContext* cx, js::gc::AllocKind kind, js::gc::InitialHeap heap uint32_t finalizeFlags = flags & FinalizeMask; // Classes with a finalizer must specify whether instances will be finalized - // on the main thread or in the background, except proxies whose behaviour + // on the active thread or in the background, except proxies whose behaviour // depends on the target object. if (clasp->hasFinalize() && !clasp->isProxy()) { MOZ_ASSERT(finalizeFlags == JSCLASS_FOREGROUND_FINALIZE || diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp index 26b6a4584058..acc3212b6391 100644 --- a/js/src/jsscript.cpp +++ b/js/src/jsscript.cpp @@ -51,6 +51,9 @@ #include "vm/Shape.h" #include "vm/SharedImmutableStringsCache.h" #include "vm/Xdr.h" +#ifdef MOZ_VTUNE +# include "vtune/VTuneWrapper.h" +#endif #include "jsfuninlines.h" #include "jsobjinlines.h" @@ -1329,7 +1332,7 @@ ScriptSourceObject::trace(JSTracer* trc, JSObject* obj) void ScriptSourceObject::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); ScriptSourceObject* sso = &obj->as(); // If code coverage is enabled, record the filename associated with this @@ -1804,8 +1807,8 @@ ScriptSource::setSourceCopy(JSContext* cx, SourceBufferHolder& srcBuf, // helper threads: // - If we are on a helper thread, there must be another helper thread to // execute our compression task. - // - If we are on the main thread, there must be at least two helper - // threads since at most one helper thread can be blocking on the main + // - If we are on the active thread, there must be at least two helper + // threads since at most one helper thread can be blocking on the active // thread (see HelperThreadState::canStartParseTask) which would cause a // deadlock if there wasn't a second helper thread that could make // progress on our compression task. @@ -2532,6 +2535,10 @@ JSScript::Create(JSContext* cx, const ReadOnlyCompileOptions& options, script->sourceStart_ = bufStart; script->sourceEnd_ = bufEnd; +#ifdef MOZ_VTUNE + script->vtuneMethodId_ = vtune::GenerateUniqueMethodID(); +#endif + return script; } diff --git a/js/src/jsscript.h b/js/src/jsscript.h index 0c2fb360bc50..c6f2569199ca 100644 --- a/js/src/jsscript.h +++ b/js/src/jsscript.h @@ -360,8 +360,8 @@ class ScriptSource uint32_t refs; // Note: while ScriptSources may be compressed off thread, they are only - // modified by the main thread, and all members are always safe to access - // on the main thread. + // modified by the active thread, and all members are always safe to access + // on the active thread. // Indicate which field in the |data| union is active. @@ -890,6 +890,14 @@ class JSScript : public js::gc::TenuredCell uint32_t sourceStart_; uint32_t sourceEnd_; +#ifdef MOZ_VTUNE + // Unique Method ID passed to the VTune profiler, or 0 if unset. + // Allows attribution of different jitcode to the same source script. + uint32_t vtuneMethodId_; + // Extra padding to maintain JSScript as a multiple of gc::CellSize. + uint32_t __vtune_unused_padding_; +#endif + // Number of times the script has been called or has had backedges taken. // When running in ion, also increased for any inlined scripts. Reset if // the script's JIT code is forcibly discarded. @@ -1556,6 +1564,10 @@ class JSScript : public js::gc::TenuredCell const char* filename() const { return scriptSource()->filename(); } const char* maybeForwardedFilename() const { return maybeForwardedScriptSource()->filename(); } +#ifdef MOZ_VTUNE + uint32_t vtuneMethodID() const { return vtuneMethodId_; } +#endif + public: /* Return whether this script was compiled for 'eval' */ diff --git a/js/src/jsutil.cpp b/js/src/jsutil.cpp index bb9f33df969f..86b72cc9b8f1 100644 --- a/js/src/jsutil.cpp +++ b/js/src/jsutil.cpp @@ -70,7 +70,7 @@ SimulateOOMAfter(uint64_t allocations, uint32_t thread, bool always) { void ResetSimulatedOOM() { - if (targetThread != THREAD_TYPE_NONE && targetThread != THREAD_TYPE_MAIN) + if (targetThread != THREAD_TYPE_NONE && targetThread != THREAD_TYPE_COOPERATING) HelperThreadState().waitForAllThreads(); targetThread = THREAD_TYPE_NONE; maxAllocations = UINT64_MAX; diff --git a/js/src/jsweakmap.h b/js/src/jsweakmap.h index e914d16969ef..6b496fa81a18 100644 --- a/js/src/jsweakmap.h +++ b/js/src/jsweakmap.h @@ -286,7 +286,7 @@ class WeakMap : public HashMap, if (!obj) return nullptr; - MOZ_ASSERT(obj->runtimeFromMainThread() == zone()->runtimeFromMainThread()); + MOZ_ASSERT(obj->runtimeFromActiveCooperatingThread() == zone()->runtimeFromActiveCooperatingThread()); return obj; } @@ -304,7 +304,7 @@ class WeakMap : public HashMap, * Check if the delegate is marked with any color to properly handle * gray marking when the key's delegate is black and the map is gray. */ - return delegate && gc::IsMarkedUnbarriered(zone()->runtimeFromMainThread(), &delegate); + return delegate && gc::IsMarkedUnbarriered(zone()->runtimeFromActiveCooperatingThread(), &delegate); } bool keyNeedsMark(JSScript* script) const { diff --git a/js/src/moz.build b/js/src/moz.build index 9141c5e632be..79255d11d0d0 100644 --- a/js/src/moz.build +++ b/js/src/moz.build @@ -616,7 +616,9 @@ if CONFIG['JS_HAS_CTYPES']: if CONFIG['MOZ_VTUNE']: SOURCES += [ - 'vtune/jitprofiling.c' + 'vtune/ittnotify_static.c', + 'vtune/jitprofiling.c', + 'vtune/VTuneWrapper.cpp', ] if CONFIG['HAVE_LINUX_PERF_EVENT_H']: diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 3fe5518c8bd7..ebb731c4e18d 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -3364,12 +3364,12 @@ EvalInContext(JSContext* cx, unsigned argc, Value* vp) struct WorkerInput { - JSContext* context; + JSRuntime* parentRuntime; char16_t* chars; size_t length; - WorkerInput(JSContext* context, char16_t* chars, size_t length) - : context(context), chars(chars), length(length) + WorkerInput(JSRuntime* parentRuntime, char16_t* chars, size_t length) + : parentRuntime(parentRuntime), chars(chars), length(length) {} ~WorkerInput() { @@ -3384,7 +3384,7 @@ WorkerMain(void* arg) { WorkerInput* input = (WorkerInput*) arg; - JSContext* cx = JS_NewContext(8L * 1024L * 1024L, 2L * 1024L * 1024L, input->context); + JSContext* cx = JS_NewContext(8L * 1024L * 1024L, 2L * 1024L * 1024L, input->parentRuntime); if (!cx) { js_delete(input); return; @@ -3513,7 +3513,7 @@ EvalInWorker(JSContext* cx, unsigned argc, Value* vp) CopyChars(chars, *str); - WorkerInput* input = js_new(JS_GetParentContext(cx), chars, str->length()); + WorkerInput* input = js_new(JS_GetParentRuntime(cx), chars, str->length()); if (!input) { ReportOutOfMemory(cx); return false; @@ -4846,7 +4846,7 @@ NewGlobal(JSContext* cx, unsigned argc, Value* vp) if (!JS_GetProperty(cx, opts, "sameZoneAs", &v)) return false; if (v.isObject()) - creationOptions.setSameZoneAs(UncheckedUnwrap(&v.toObject())); + creationOptions.setExistingZone(UncheckedUnwrap(&v.toObject())); if (!JS_GetProperty(cx, opts, "disableLazyParsing", &v)) return false; diff --git a/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-word-boundary.js b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-word-boundary.js new file mode 100644 index 000000000000..c1a04bd3dade --- /dev/null +++ b/js/src/tests/ecma_6/RegExp/unicode-ignoreCase-word-boundary.js @@ -0,0 +1,25 @@ +var BUGNUMBER = 1338373; +var summary = "Word boundary should match U+017F and U+212A in unicode+ignoreCase."; + +assertEq(/\b/iu.test('\u017F'), true); +assertEq(/\b/i.test('\u017F'), false); +assertEq(/\b/u.test('\u017F'), false); +assertEq(/\b/.test('\u017F'), false); + +assertEq(/\b/iu.test('\u212A'), true); +assertEq(/\b/i.test('\u212A'), false); +assertEq(/\b/u.test('\u212A'), false); +assertEq(/\b/.test('\u212A'), false); + +assertEq(/\B/iu.test('\u017F'), false); +assertEq(/\B/i.test('\u017F'), true); +assertEq(/\B/u.test('\u017F'), true); +assertEq(/\B/.test('\u017F'), true); + +assertEq(/\B/iu.test('\u212A'), false); +assertEq(/\B/i.test('\u212A'), true); +assertEq(/\B/u.test('\u212A'), true); +assertEq(/\B/.test('\u212A'), true); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/js/src/threading/ProtectedData.cpp b/js/src/threading/ProtectedData.cpp index b8ff624ee286..7a8e9a8ea2bf 100644 --- a/js/src/threading/ProtectedData.cpp +++ b/js/src/threading/ProtectedData.cpp @@ -17,16 +17,16 @@ namespace js { /* static */ mozilla::Atomic AutoNoteSingleThreadedRegion::count(0); -template +template static inline bool -OnBackgroundThread() +OnHelperThread() { - if (Background == AllowedBackgroundThread::IonCompile || Background == AllowedBackgroundThread::GCTaskOrIonCompile) { + if (Helper == AllowedHelperThread::IonCompile || Helper == AllowedHelperThread::GCTaskOrIonCompile) { if (CurrentThreadIsIonCompiling()) return true; } - if (Background == AllowedBackgroundThread::GCTask || Background == AllowedBackgroundThread::GCTaskOrIonCompile) { + if (Helper == AllowedHelperThread::GCTask || Helper == AllowedHelperThread::GCTaskOrIonCompile) { if (TlsContext.get()->performingGC || TlsContext.get()->runtime()->gc.onBackgroundThread()) return true; } @@ -34,16 +34,16 @@ OnBackgroundThread() return false; } -template +template void -CheckActiveThread::check() const +CheckActiveThread::check() const { // When interrupting a thread on Windows, changes are made to the runtime // and active thread's state from another thread while the active thread is // suspended. We need a way to mark these accesses as being tantamount to // accesses by the active thread. See bug 1323066. #ifndef XP_WIN - if (OnBackgroundThread()) + if (OnHelperThread()) return; JSContext* cx = TlsContext.get(); @@ -51,20 +51,20 @@ CheckActiveThread::check() const #endif // XP_WIN } -template class CheckActiveThread; -template class CheckActiveThread; -template class CheckActiveThread; +template class CheckActiveThread; +template class CheckActiveThread; +template class CheckActiveThread; -template +template void -CheckZoneGroup::check() const +CheckZoneGroup::check() const { - if (OnBackgroundThread()) + if (OnHelperThread()) return; if (group) { // This check is disabled for now because helper thread parse tasks - // access data in the same zone group that the single main thread is + // access data in the same zone group that the single active thread is // using. This will be fixed soon (bug 1323066). //MOZ_ASSERT(group->context && group->context == TlsContext.get()); } else { @@ -74,16 +74,16 @@ CheckZoneGroup::check() const } } -template class CheckZoneGroup; -template class CheckZoneGroup; -template class CheckZoneGroup; -template class CheckZoneGroup; +template class CheckZoneGroup; +template class CheckZoneGroup; +template class CheckZoneGroup; +template class CheckZoneGroup; -template +template void -CheckGlobalLock::check() const +CheckGlobalLock::check() const { - if (OnBackgroundThread()) + if (OnHelperThread()) return; switch (Lock) { @@ -99,10 +99,10 @@ CheckGlobalLock::check() const } } -template class CheckGlobalLock; -template class CheckGlobalLock; -template class CheckGlobalLock; -template class CheckGlobalLock; +template class CheckGlobalLock; +template class CheckGlobalLock; +template class CheckGlobalLock; +template class CheckGlobalLock; #endif // DEBUG diff --git a/js/src/threading/ProtectedData.h b/js/src/threading/ProtectedData.h index 645239c84d24..d04ddc92604e 100644 --- a/js/src/threading/ProtectedData.h +++ b/js/src/threading/ProtectedData.h @@ -191,9 +191,9 @@ class CheckThreadLocal template using ThreadLocalData = ProtectedDataNoCheckArgs; -// Enum describing which background threads (GC tasks or Ion compilations) may +// Enum describing which helper threads (GC tasks or Ion compilations) may // access data even though they do not have exclusive access to any zone group. -enum class AllowedBackgroundThread +enum class AllowedHelperThread { None, GCTask, @@ -201,7 +201,7 @@ enum class AllowedBackgroundThread GCTaskOrIonCompile }; -template +template class CheckActiveThread { public: @@ -212,18 +212,18 @@ class CheckActiveThread // active thread. template using ActiveThreadData = - ProtectedDataNoCheckArgs, T>; + ProtectedDataNoCheckArgs, T>; // Data which may only be accessed by the runtime's cooperatively scheduled // active thread, or by various helper thread tasks. template using ActiveThreadOrGCTaskData = - ProtectedDataNoCheckArgs, T>; + ProtectedDataNoCheckArgs, T>; template using ActiveThreadOrIonCompileData = - ProtectedDataNoCheckArgs, T>; + ProtectedDataNoCheckArgs, T>; -template +template class CheckZoneGroup { #ifdef DEBUG @@ -242,19 +242,19 @@ class CheckZoneGroup // associated zone group. template using ZoneGroupData = - ProtectedDataZoneGroupArg, T>; + ProtectedDataZoneGroupArg, T>; // Data which may only be accessed by threads with exclusive access to the // associated zone group, or by various helper thread tasks. template using ZoneGroupOrGCTaskData = - ProtectedDataZoneGroupArg, T>; + ProtectedDataZoneGroupArg, T>; template using ZoneGroupOrIonCompileData = - ProtectedDataZoneGroupArg, T>; + ProtectedDataZoneGroupArg, T>; template using ZoneGroupOrGCTaskOrIonCompileData = - ProtectedDataZoneGroupArg, T>; + ProtectedDataZoneGroupArg, T>; // Runtime wide locks which might protect some data. enum class GlobalLock @@ -264,7 +264,7 @@ enum class GlobalLock HelperThreadLock }; -template +template class CheckGlobalLock { #ifdef DEBUG @@ -276,24 +276,24 @@ class CheckGlobalLock // Data which may only be accessed while holding the GC lock. template using GCLockData = - ProtectedDataNoCheckArgs, T>; + ProtectedDataNoCheckArgs, T>; // Data which may only be accessed while holding the exclusive access lock. template using ExclusiveAccessLockData = - ProtectedDataNoCheckArgs, T>; + ProtectedDataNoCheckArgs, T>; // Data which may only be accessed while holding the exclusive access lock or // by GC helper thread tasks (at which point a foreground thread should be // holding the exclusive access lock, though we do not check this). template using ExclusiveAccessLockOrGCTaskData = - ProtectedDataNoCheckArgs, T>; + ProtectedDataNoCheckArgs, T>; // Data which may only be accessed while holding the helper thread lock. template using HelperThreadLockData = - ProtectedDataNoCheckArgs, T>; + ProtectedDataNoCheckArgs, T>; // Class for protected data that is only written to once. 'const' may sometimes // be usable instead of this class, but in cases where the data cannot be set @@ -356,7 +356,7 @@ using WriteOnceData = ProtectedDataWriteOnce; // Data that is written once, and only while holding the exclusive access lock. template using ExclusiveAccessLockWriteOnceData = - ProtectedDataWriteOnce, T>; + ProtectedDataWriteOnce, T>; #undef DECLARE_ASSIGNMENT_OPERATOR #undef DECLARE_ONE_BOOL_OPERATOR diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp index 9a509a7fbfdd..c79327e9b3da 100644 --- a/js/src/vm/Debugger.cpp +++ b/js/src/vm/Debugger.cpp @@ -3299,7 +3299,7 @@ Debugger::findZoneEdges(Zone* zone, js::gc::ZoneComponentFinder& finder) /* static */ void Debugger::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); Debugger* dbg = fromJSObject(obj); if (!dbg) @@ -8276,7 +8276,7 @@ DebuggerFrame_maybeDecrementFrameScriptStepModeCount(FreeOp* fop, AbstractFrameP static void DebuggerFrame_finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->maybeOffMainThread()); + MOZ_ASSERT(fop->maybeOnHelperThread()); DebuggerFrame_freeScriptFrameIterData(fop, obj); OnStepHandler* onStepHandler = obj->as().onStepHandler(); if (onStepHandler) diff --git a/js/src/vm/GlobalObject.cpp b/js/src/vm/GlobalObject.cpp index d381480b6c3f..36b68a8294f8 100644 --- a/js/src/vm/GlobalObject.cpp +++ b/js/src/vm/GlobalObject.cpp @@ -346,27 +346,10 @@ GlobalObject::new_(JSContext* cx, const Class* clasp, JSPrincipals* principals, MOZ_ASSERT(!cx->isExceptionPending()); MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment())); - JSRuntime* rt = cx->runtime(); - - auto zoneSpecifier = options.creationOptions().zoneSpecifier(); - Zone* zone; - if (zoneSpecifier == JS::SystemZone) - zone = rt->gc.systemZone; - else if (zoneSpecifier == JS::FreshZone) - zone = nullptr; - else - zone = static_cast(options.creationOptions().zonePointer()); - - JSCompartment* compartment = NewCompartment(cx, zone, principals, options); + JSCompartment* compartment = NewCompartment(cx, principals, options); if (!compartment) return nullptr; - // Lazily create the system zone. - if (!rt->gc.systemZone && zoneSpecifier == JS::SystemZone) { - rt->gc.systemZone = compartment->zone(); - rt->gc.systemZone->isSystem = true; - } - Rooted global(cx); { AutoCompartment ac(cx, compartment); @@ -657,7 +640,7 @@ js::DefineToStringTag(JSContext *cx, HandleObject obj, JSAtom* tag) static void GlobalDebuggees_finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->maybeOffMainThread()); + MOZ_ASSERT(fop->maybeOnHelperThread()); fop->delete_((GlobalObject::DebuggerVector*) obj->as().getPrivate()); } diff --git a/js/src/vm/HelperThreads.cpp b/js/src/vm/HelperThreads.cpp index 148546d28c81..07e674385c4f 100644 --- a/js/src/vm/HelperThreads.cpp +++ b/js/src/vm/HelperThreads.cpp @@ -126,8 +126,8 @@ GetSelectorRuntime(CompilationSelector selector) { struct Matcher { - JSRuntime* match(JSScript* script) { return script->runtimeFromMainThread(); } - JSRuntime* match(JSCompartment* comp) { return comp->runtimeFromMainThread(); } + JSRuntime* match(JSScript* script) { return script->runtimeFromActiveCooperatingThread(); } + JSRuntime* match(JSCompartment* comp) { return comp->runtimeFromActiveCooperatingThread(); } JSRuntime* match(ZonesInState zbs) { return zbs.runtime; } JSRuntime* match(JSRuntime* runtime) { return runtime; } JSRuntime* match(AllCompilations all) { return nullptr; } @@ -267,7 +267,7 @@ js::HasOffThreadIonCompile(JSCompartment* comp) return true; } - jit::IonBuilder* builder = comp->runtimeFromMainThread()->ionLazyLinkList().getFirst(); + jit::IonBuilder* builder = comp->runtimeFromActiveCooperatingThread()->ionLazyLinkList().getFirst(); while (builder) { if (builder->script()->compartment() == comp) return true; @@ -461,7 +461,7 @@ js::CancelOffThreadParses(JSRuntime* rt) HelperThreadState().wait(lock, GlobalHelperThreadState::CONSUMER); } - // Clean up any parse tasks which haven't been finished by the main thread. + // Clean up any parse tasks which haven't been finished by the active thread. GlobalHelperThreadState::ParseTaskVector& finished = HelperThreadState().parseFinishedList(lock); while (true) { bool found = false; @@ -541,7 +541,7 @@ CreateGlobalForOffThreadParse(JSContext* cx, ParseTaskKind kind, const gc::AutoS creationOptions.setInvisibleToDebugger(true) .setMergeable(true) - .setZone(JS::FreshZone); + .setNewZoneInSystemZoneGroup(); // Don't falsely inherit the host's global trace hook. creationOptions.setTrace(nullptr); @@ -553,7 +553,7 @@ CreateGlobalForOffThreadParse(JSContext* cx, ParseTaskKind kind, const gc::AutoS JS_SetCompartmentPrincipals(global->compartment(), currentCompartment->principals()); - // Initialize all classes required for parsing while still on the main + // Initialize all classes required for parsing while still on the active // thread, for both the target and the new global so that prototype // pointers can be changed infallibly after parsing finishes. if (!EnsureParserCreatedClasses(cx, kind)) @@ -1180,7 +1180,7 @@ js::GCParallelTask::join() } void -js::GCParallelTask::runFromMainThread(JSRuntime* rt) +js::GCParallelTask::runFromActiveCooperatingThread(JSRuntime* rt) { MOZ_ASSERT(state == NotStarted); MOZ_ASSERT(js::CurrentThreadCanAccessRuntime(rt)); @@ -1453,7 +1453,7 @@ HelperThread::ThreadMain(void* arg) ThisThread::SetName("JS Helper"); //See bug 1104658. - //Set the FPU control word to be the same as the main thread's, or math + //Set the FPU control word to be the same as the active thread's, or math //computations on this thread may use incorrect precision rules during //Ion compilation. FIX_FPU(); @@ -1488,7 +1488,7 @@ HelperThread::handleWasmWorkload(AutoLockHelperThreadState& locked) HelperThreadState().setWasmError(locked, Move(error)); } - // Notify the main thread in case it's waiting. + // Notify the active thread in case it's waiting. HelperThreadState().notifyAll(GlobalHelperThreadState::CONSUMER, locked); currentTask.reset(); } @@ -1517,7 +1517,7 @@ HelperThread::handlePromiseTaskWorkload(AutoLockHelperThreadState& locked) } } - // Notify the main thread in case it's waiting. + // Notify the active thread in case it's waiting. HelperThreadState().notifyAll(GlobalHelperThreadState::CONSUMER, locked); currentTask.reset(); } @@ -1565,16 +1565,25 @@ HelperThread::handleIonWorkload(AutoLockHelperThreadState& locked) } FinishOffThreadIonCompile(builder, locked); + + // Ping any thread currently operating on the compiled script's zone group + // so that the compiled code can be incorporated at the next interrupt + // callback. Don't interrupt Ion code for this, as this incorporation can + // be delayed indefinitely without affecting performance as long as the + // active thread is actually executing Ion code. + // + // This must happen before the current task is reset. DestroyContext + // cancels in progress Ion compilations before destroying its target + // context, and after we reset the current task we are no longer considered + // to be Ion compiling. + JSContext* target = builder->script()->zoneFromAnyThread()->group()->ownerContext().context(); + if (target) + target->requestInterrupt(JSContext::RequestInterruptCanWait); + currentTask.reset(); pause = false; - // Ping the main thread so that the compiled code can be incorporated - // at the next interrupt callback. Don't interrupt Ion code for this, as - // this incorporation can be delayed indefinitely without affecting - // performance as long as the main thread is actually executing Ion code. - rt->unsafeContextFromAnyThread()->requestInterrupt(JSContext::RequestInterruptCanWait); - - // Notify the main thread in case it is waiting for the compilation to finish. + // Notify the active thread in case it is waiting for the compilation to finish. HelperThreadState().notifyAll(GlobalHelperThreadState::CONSUMER, locked); // When finishing Ion compilation jobs, we can start unpausing compilation @@ -1681,7 +1690,7 @@ HelperThread::handleParseWorkload(AutoLockHelperThreadState& locked, uintptr_t s } TlsContext.set(oldcx); - // The callback is invoked while we are still off the main thread. + // The callback is invoked while we are still off thread. task->callback(task, task->callbackData); // FinishOffThreadScript will need to be called on the script to @@ -1694,7 +1703,7 @@ HelperThread::handleParseWorkload(AutoLockHelperThreadState& locked, uintptr_t s currentTask.reset(); - // Notify the main thread in case it is waiting for the parse/emit to finish. + // Notify the active thread in case it is waiting for the parse/emit to finish. HelperThreadState().notifyAll(GlobalHelperThreadState::CONSUMER, locked); } @@ -1720,7 +1729,7 @@ HelperThread::handleCompressionWorkload(AutoLockHelperThreadState& locked) task->helperThread = nullptr; currentTask.reset(); - // Notify the main thread in case it is waiting for the compression to finish. + // Notify the active thread in case it is waiting for the compression to finish. HelperThreadState().notifyAll(GlobalHelperThreadState::CONSUMER, locked); } diff --git a/js/src/vm/HelperThreads.h b/js/src/vm/HelperThreads.h index 284c5fff2e7f..41f5cda012ee 100644 --- a/js/src/vm/HelperThreads.h +++ b/js/src/vm/HelperThreads.h @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* - * Definitions for managing off-main-thread work using a process wide list + * Definitions for managing off-thread work using a process wide list * of worklist items and pool of threads. Worklist items are engine internal, * and are distinct from e.g. web workers. */ @@ -229,7 +229,7 @@ class GlobalHelperThreadState return Move(firstWasmError); } void noteWasmFailure(const AutoLockHelperThreadState&) { - // Be mindful to signal the main thread after calling this function. + // Be mindful to signal the active thread after calling this function. numWasmFailedJobs++; } void setWasmError(const AutoLockHelperThreadState&, UniqueChars error) { @@ -252,7 +252,7 @@ class GlobalHelperThreadState private: /* * Number of wasm jobs that encountered failure for the active module. - * Their parent is logically the main thread, and this number serves for harvesting. + * Their parent is logically the active thread, and this number serves for harvesting. */ uint32_t numWasmFailedJobs; /* @@ -590,7 +590,7 @@ struct ParseTask // Rooted pointer to the global object used by 'cx'. JSObject* exclusiveContextGlobal; - // Callback invoked off the main thread when the parse finishes. + // Callback invoked off thread when the parse finishes. JS::OffThreadCompileCallback callback; void* callbackData; diff --git a/js/src/vm/Initialization.cpp b/js/src/vm/Initialization.cpp index 9aa5a31d1bdd..15bf2f02da6a 100644 --- a/js/src/vm/Initialization.cpp +++ b/js/src/vm/Initialization.cpp @@ -97,7 +97,7 @@ JS::detail::InitWithFailureDiagnostic(bool isDebugBuild) #if defined(DEBUG) || defined(JS_OOM_BREAKPOINT) RETURN_IF_FAIL(js::oom::InitThreadType()); - js::oom::SetThreadType(js::oom::THREAD_TYPE_MAIN); + js::oom::SetThreadType(js::oom::THREAD_TYPE_COOPERATING); #endif RETURN_IF_FAIL(js::Mutex::Init()); diff --git a/js/src/vm/NativeObject.cpp b/js/src/vm/NativeObject.cpp index 4bd591df4a65..43dc8a0ed7c4 100644 --- a/js/src/vm/NativeObject.cpp +++ b/js/src/vm/NativeObject.cpp @@ -268,8 +268,8 @@ js::NativeObject::numFixedSlotsForCompilation() const { // This is an alternative method for getting the number of fixed slots in an // object. It requires more logic and memory accesses than numFixedSlots() - // but is safe to be called from the compilation thread, even if the main - // thread is actively mutating the VM. + // but is safe to be called from the compilation thread, even if the active + // thread is mutating the VM. // The compiler does not have access to nursery things. MOZ_ASSERT(!IsInsideNursery(this)); @@ -1656,7 +1656,7 @@ js::NativeDefineProperty(JSContext* cx, HandleNativeObject obj, HandleId id, if (!NativeDefineProperty(cx, obj, id, value, getter, setter, attrs, result)) return false; if (!result) { - // Off-main-thread callers should not get here: they must call this + // Off-thread callers should not get here: they must call this // function only with known-valid arguments. Populating a new // PlainObject with configurable properties is fine. MOZ_ASSERT(!cx->helperThread()); diff --git a/js/src/vm/ObjectGroup-inl.h b/js/src/vm/ObjectGroup-inl.h index dfeaaa8af800..7e023ecbad8e 100644 --- a/js/src/vm/ObjectGroup-inl.h +++ b/js/src/vm/ObjectGroup-inl.h @@ -15,7 +15,7 @@ inline bool ObjectGroup::needsSweep() { // Note: this can be called off thread during compacting GCs, in which case - // nothing will be running on the main thread. + // nothing will be running on the active thread. return generation() != zoneFromAnyThread()->types.generation; } diff --git a/js/src/vm/PIC.cpp b/js/src/vm/PIC.cpp index bb432e9e1d0b..2ba52a14ecd9 100644 --- a/js/src/vm/PIC.cpp +++ b/js/src/vm/PIC.cpp @@ -276,7 +276,7 @@ js::ForOfPIC::Chain::sweep(FreeOp* fop) static void ForOfPIC_finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->maybeOffMainThread()); + MOZ_ASSERT(fop->maybeOnHelperThread()); if (ForOfPIC::Chain* chain = ForOfPIC::fromJSObject(&obj->as())) chain->sweep(fop); } diff --git a/js/src/vm/RegExpStatics.cpp b/js/src/vm/RegExpStatics.cpp index 5bc66a9bfd72..3ded60759a90 100644 --- a/js/src/vm/RegExpStatics.cpp +++ b/js/src/vm/RegExpStatics.cpp @@ -22,7 +22,7 @@ using namespace js; static void resc_finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); RegExpStatics* res = static_cast(obj->as().getPrivate()); fop->delete_(res); } diff --git a/js/src/vm/Runtime.cpp b/js/src/vm/Runtime.cpp index 89913ee06d1b..36b8b0208ff9 100644 --- a/js/src/vm/Runtime.cpp +++ b/js/src/vm/Runtime.cpp @@ -131,7 +131,7 @@ JSRuntime::JSRuntime(JSRuntime* parentRuntime) windowProxyClass_(nullptr), exclusiveAccessLock(mutexid::RuntimeExclusiveAccess), #ifdef DEBUG - mainThreadHasExclusiveAccess(false), + activeThreadHasExclusiveAccess(false), #endif numExclusiveThreads(0), numCompartments(0), @@ -143,8 +143,6 @@ JSRuntime::JSRuntime(JSRuntime* parentRuntime) lcovOutput_(), jitRuntime_(nullptr), selfHostingGlobal_(nullptr), - singletonContext(nullptr), - singletonZoneGroup(nullptr), gc(thisFromCtor()), gcInitialized(false), NaNValue(DoubleNaNValue()), @@ -199,24 +197,13 @@ JSRuntime::init(JSContext* cx, uint32_t maxbytes, uint32_t maxNurseryBytes) if (!cooperatingContexts().append(cx)) return false; - singletonContext = cx; - defaultFreeOp_ = js_new(this); if (!defaultFreeOp_) return false; - ScopedJSDeletePtr zoneGroup(js_new(this)); - if (!zoneGroup) - return false; - singletonZoneGroup = zoneGroup; - if (!gc.init(maxbytes, maxNurseryBytes)) return false; - if (!zoneGroup->init(maxNurseryBytes) || !gc.groups.ref().append(zoneGroup)) - return false; - zoneGroup.forget(); - ScopedJSDeletePtr atomsZone(new_(this, nullptr)); if (!atomsZone || !atomsZone->init(true)) return false; @@ -289,7 +276,7 @@ JSRuntime::destroyRuntime() /* * Cancel any pending, in progress or completed Ion compilations and * parse tasks. Waiting for wasm and compression tasks is done - * synchronously (on the main thread or during parse tasks), so no + * synchronously (on the active thread or during parse tasks), so no * explicit canceling is needed for these. */ CancelOffThreadIonCompile(this); @@ -342,8 +329,6 @@ JSRuntime::destroyRuntime() DebugOnly oldCount = liveRuntimesCount--; MOZ_ASSERT(oldCount > 0); - - js_delete(zoneGroupFromMainThread()); } void @@ -797,7 +782,7 @@ js::CurrentThreadCanAccessZone(Zone* zone) if (CurrentThreadCanAccessRuntime(zone->runtime_)) return true; - // Only zones in use by an exclusive thread can be used off the main thread. + // Only zones in use by an exclusive thread can be used off thread. // We don't keep track of which thread owns such zones though, so this check // is imperfect. return zone->usedByExclusiveThread; @@ -830,7 +815,7 @@ JSRuntime::IonBuilderList& JSRuntime::ionLazyLinkList() { MOZ_ASSERT(CurrentThreadCanAccessRuntime(this), - "Should only be mutated by the main thread."); + "Should only be mutated by the active thread."); return ionLazyLinkList_.ref(); } @@ -838,7 +823,7 @@ void JSRuntime::ionLazyLinkListRemove(jit::IonBuilder* builder) { MOZ_ASSERT(CurrentThreadCanAccessRuntime(this), - "Should only be mutated by the main thread."); + "Should only be mutated by the active thread."); MOZ_ASSERT(ionLazyLinkListSize_ > 0); builder->removeFrom(ionLazyLinkList()); @@ -851,7 +836,7 @@ void JSRuntime::ionLazyLinkListAdd(jit::IonBuilder* builder) { MOZ_ASSERT(CurrentThreadCanAccessRuntime(this), - "Should only be mutated by the main thread."); + "Should only be mutated by the active thread."); ionLazyLinkList().insertFront(builder); ionLazyLinkListSize_++; } diff --git a/js/src/vm/Runtime.h b/js/src/vm/Runtime.h index 94acbb99c5dd..66eaec8e31a9 100644 --- a/js/src/vm/Runtime.h +++ b/js/src/vm/Runtime.h @@ -114,6 +114,36 @@ class Simulator; #endif } // namespace jit +// JS Engine Threading +// +// Multiple threads may interact with a JS runtime. JS has run-to-completion +// semantics, which means that scripts cannot observe changes in behavior +// due to activities performed on other threads (there is an exception to this +// for shared array buffers and related APIs). +// +// The main way we ensure that run-to-completion semantics are preserved is +// by dividing content into zone groups. Pieces of web content will be in the +// the same zone group if they have the same tab/origin or can otherwise +// observe changes in each other via Window.opener and so forth. When a thread +// executes JS in a zone group, it acquires that group --- including exclusive +// access to most of the group's content --- and does not relinquish control of +// the zone group until the script finishes executing. +// +// Threads interacting with a runtime are divided into two categories: +// +// - Cooperating threads are capable of running JS. At most one cooperating +// thread may be |active| at a time in a runtime, but they may yield control +// to each other so that their execution is interleaved. As described above, +// each thread owns the zone groups it is operating on so that this +// interleaving does not cause observable changes in a script's behavior. +// +// - Helper threads do not run JS, and are controlled or triggered by activity +// in the cooperating threads. Helper threads may have exclusive access to +// zone groups created for them, for parsing and similar tasks, but their +// activities do not cause observable changes in script behaviors. Activity +// on helper threads may be referred to as happening 'off thread' or on a +// background thread in some parts of the VM. + /* * A FreeOp can do one thing: free memory. For convenience, it has delete_ * convenience methods that also call destructors. @@ -134,13 +164,13 @@ class FreeOp : public JSFreeOp explicit FreeOp(JSRuntime* maybeRuntime); ~FreeOp(); - bool onMainThread() const { + bool onActiveCooperatingThread() const { return runtime_ != nullptr; } - bool maybeOffMainThread() const { - // Sometimes background finalization happens on the main thread so - // runtime_ being null doesn't always mean we are off the main thread. + bool maybeOnHelperThread() const { + // Sometimes background finalization happens on the active thread so + // runtime_ being null doesn't always mean we are off thread. return !runtime_; } @@ -534,14 +564,14 @@ struct JSRuntime : public js::MallocProvider * be accessed simultaneously by multiple threads. * * Locking this only occurs if there is actually a thread other than the - * main thread which could access such data. + * active thread which could access such data. */ js::Mutex exclusiveAccessLock; #ifdef DEBUG - bool mainThreadHasExclusiveAccess; + bool activeThreadHasExclusiveAccess; #endif - /* Number of non-main threads with exclusive access to some zone. */ + /* Number of non-cooperating threads with exclusive access to some zone. */ js::UnprotectedData numExclusiveThreads; friend class js::AutoLockForExclusiveAccess; @@ -556,13 +586,13 @@ struct JSRuntime : public js::MallocProvider #ifdef DEBUG bool currentThreadHasExclusiveAccess() const { - return (!exclusiveThreadsPresent() && mainThreadHasExclusiveAccess) || + return (!exclusiveThreadsPresent() && activeThreadHasExclusiveAccess) || exclusiveAccessLock.ownedByCurrentThread(); } #endif // How many compartments there are across all zones. This number includes - // off main thread context compartments, so it isn't necessarily equal to the + // off thread context compartments, so it isn't necessarily equal to the // number of compartments visited by CompartmentsIter. js::ActiveThreadData numCompartments; @@ -616,24 +646,6 @@ struct JSRuntime : public js::MallocProvider return !!jitRuntime_; } - // These will be removed soon. - private: - JSContext* singletonContext; - js::ZoneGroup* singletonZoneGroup; - public: - - JSContext* unsafeContextFromAnyThread() const { return singletonContext; } - JSContext* contextFromMainThread() const { - MOZ_ASSERT(CurrentThreadCanAccessRuntime(this)); - return singletonContext; - } - - js::ZoneGroup* zoneGroupFromAnyThread() const { return singletonZoneGroup; } - js::ZoneGroup* zoneGroupFromMainThread() const { - MOZ_ASSERT(CurrentThreadCanAccessRuntime(this)); - return singletonZoneGroup; - } - private: // Used to generate random keys for hash tables. mozilla::Maybe randomKeyGenerator_; diff --git a/js/src/vm/SavedStacks.cpp b/js/src/vm/SavedStacks.cpp index 5a510e26b8c6..af4b1c891b2e 100644 --- a/js/src/vm/SavedStacks.cpp +++ b/js/src/vm/SavedStacks.cpp @@ -367,10 +367,10 @@ SavedFrame::protoAccessors[] = { /* static */ void SavedFrame::finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->onMainThread()); + MOZ_ASSERT(fop->onActiveCooperatingThread()); JSPrincipals* p = obj->as().getPrincipals(); if (p) { - JSRuntime* rt = obj->runtimeFromMainThread(); + JSRuntime* rt = obj->runtimeFromActiveCooperatingThread(); JS_DropPrincipals(rt->activeContextFromOwnThread(), p); } } diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp index dc48a8dc086b..e7b2e2f35b8f 100644 --- a/js/src/vm/SelfHosting.cpp +++ b/js/src/vm/SelfHosting.cpp @@ -2745,10 +2745,10 @@ JSRuntime::createSelfHostingGlobal(JSContext* cx) MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment())); JS::CompartmentOptions options; - options.creationOptions().setZone(JS::FreshZone); + options.creationOptions().setNewZoneInSystemZoneGroup(); options.behaviors().setDiscardSource(true); - JSCompartment* compartment = NewCompartment(cx, nullptr, nullptr, options); + JSCompartment* compartment = NewCompartment(cx, nullptr, options); if (!compartment) return nullptr; @@ -3069,7 +3069,7 @@ CloneObject(JSContext* cx, HandleNativeObject selfHostedObject) // Object hash identities are owned by the hashed object, which may be on a // different thread than the clone target. In theory, these objects are all // tenured and will not be compacted; however, we simply avoid the issue - // altogether by skipping the cycle-detection when off the main thread. + // altogether by skipping the cycle-detection when off thread. mozilla::Maybe detect; if (js::CurrentThreadCanAccessZone(selfHostedObject->zoneFromAnyThread())) { detect.emplace(cx, selfHostedObject); diff --git a/js/src/vm/Shape.cpp b/js/src/vm/Shape.cpp index 692c59710ce6..0d15fdcbd6bd 100644 --- a/js/src/vm/Shape.cpp +++ b/js/src/vm/Shape.cpp @@ -922,7 +922,7 @@ NativeObject::putProperty(JSContext* cx, HandleNativeObject obj, HandleId id, if (hadSlot && !shape->hasSlot()) { if (oldSlot < obj->slotSpan()) obj->freeSlot(cx, oldSlot); - /* Note: The optimization based on propertyRemovals is only relevant to the main thread. */ + /* Note: The optimization based on propertyRemovals is only relevant to the active thread. */ if (!cx->helperThread()) ++cx->propertyRemovals; } @@ -1705,7 +1705,7 @@ EmptyShape::insertInitialShape(JSContext* cx, HandleShape shape, HandleObject pr * nativeEmpty() result and generate the appropriate properties if found. * Clearing the cache entry avoids this duplicate regeneration. * - * Clearing is not necessary when this context is running off the main + * Clearing is not necessary when this context is running off * thread, as it will not use the new object cache for allocations. */ if (!cx->helperThread()) diff --git a/js/src/vm/SharedArrayObject.cpp b/js/src/vm/SharedArrayObject.cpp index 23fb7fc6f4de..a7e30e91e342 100644 --- a/js/src/vm/SharedArrayObject.cpp +++ b/js/src/vm/SharedArrayObject.cpp @@ -299,7 +299,7 @@ SharedArrayBufferObject::rawBufferObject() const void SharedArrayBufferObject::Finalize(FreeOp* fop, JSObject* obj) { - MOZ_ASSERT(fop->maybeOffMainThread()); + MOZ_ASSERT(fop->maybeOnHelperThread()); SharedArrayBufferObject& buf = obj->as(); diff --git a/js/src/vm/String.cpp b/js/src/vm/String.cpp index 3ebd119adcda..307f5884c488 100644 --- a/js/src/vm/String.cpp +++ b/js/src/vm/String.cpp @@ -47,7 +47,7 @@ JSString::sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) // JSExternalString: Ask the embedding to tell us what's going on. If it // doesn't want to say, don't count, the chars could be stored anywhere. if (isExternal()) { - if (auto* cb = runtimeFromMainThread()->externalStringSizeofCallback.ref()) { + if (auto* cb = runtimeFromActiveCooperatingThread()->externalStringSizeofCallback.ref()) { // Our callback isn't supposed to cause GC. JS::AutoSuppressGCAnalysis nogc; return cb(this, mallocSizeOf); diff --git a/js/src/vm/Symbol.cpp b/js/src/vm/Symbol.cpp index 720eaf13f2f1..3dd42ba45283 100644 --- a/js/src/vm/Symbol.cpp +++ b/js/src/vm/Symbol.cpp @@ -45,7 +45,7 @@ Symbol::new_(JSContext* cx, JS::SymbolCode code, JSString* description) } // Lock to allocate. If symbol allocation becomes a bottleneck, this can - // probably be replaced with an assertion that we're on the main thread. + // probably be replaced with an assertion that we're on the active thread. AutoLockForExclusiveAccess lock(cx); Symbol* sym; { diff --git a/js/src/vm/TraceLogging.cpp b/js/src/vm/TraceLogging.cpp index b04d72efd35e..88fd753645a3 100644 --- a/js/src/vm/TraceLogging.cpp +++ b/js/src/vm/TraceLogging.cpp @@ -847,7 +847,7 @@ TraceLoggerThreadState::init() "\n" "usage: TLOPTIONS=option,option,option,... where options can be:\n" "\n" - " EnableMainThread Start logging the main thread immediately.\n" + " EnableCooperatingThread Start logging cooperating threads immediately.\n" " EnableOffThread Start logging helper threads immediately.\n" " EnableGraph Enable spewing the tracelogging graph to a file.\n" " Errors Report errors during tracing to stderr.\n" @@ -857,10 +857,10 @@ TraceLoggerThreadState::init() /*NOTREACHED*/ } - if (strstr(options, "EnableMainThread")) - mainThreadEnabled = true; + if (strstr(options, "EnableActiveThread")) + cooperatingThreadEnabled = true; if (strstr(options, "EnableOffThread")) - offThreadEnabled = true; + helperThreadEnabled = true; if (strstr(options, "EnableGraph")) graphSpewingEnabled = true; if (strstr(options, "Errors")) @@ -963,7 +963,7 @@ TraceLoggerThreadState::forCurrentThread(JSContext* maybecx) if (graphSpewingEnabled) logger->initGraph(); - if (CurrentHelperThread() ? offThreadEnabled : mainThreadEnabled) + if (CurrentHelperThread() ? helperThreadEnabled : cooperatingThreadEnabled) logger->enable(); } diff --git a/js/src/vm/TraceLogging.h b/js/src/vm/TraceLogging.h index e86cff4df6cd..038a39a3bcdb 100644 --- a/js/src/vm/TraceLogging.h +++ b/js/src/vm/TraceLogging.h @@ -318,8 +318,8 @@ class TraceLoggerThreadState #endif bool enabledTextIds[TraceLogger_Last]; - bool mainThreadEnabled; - bool offThreadEnabled; + bool cooperatingThreadEnabled; + bool helperThreadEnabled; bool graphSpewingEnabled; bool spewErrors; mozilla::LinkedList threadLoggers; @@ -345,8 +345,8 @@ class TraceLoggerThreadState #ifdef DEBUG initialized(false), #endif - mainThreadEnabled(false), - offThreadEnabled(false), + cooperatingThreadEnabled(false), + helperThreadEnabled(false), graphSpewingEnabled(false), spewErrors(false), nextTextId(TraceLogger_Last), diff --git a/js/src/vm/TypeInference.cpp b/js/src/vm/TypeInference.cpp index 8e2d206906a4..3439a056b793 100644 --- a/js/src/vm/TypeInference.cpp +++ b/js/src/vm/TypeInference.cpp @@ -1023,21 +1023,21 @@ TypeSet::intersectSets(TemporaryTypeSet* a, TemporaryTypeSet* b, LifoAlloc* allo // Constraints generated during Ion compilation capture assumptions made about // heap properties that will trigger invalidation of the resulting Ion code if // the constraint is violated. Constraints can only be attached to type sets on -// the main thread, so to allow compilation to occur almost entirely off thread +// the active thread, so to allow compilation to occur almost entirely off thread // the generation is split into two phases. // // During compilation, CompilerConstraint values are constructed in a list, // recording the heap property type set which was read from and its expected // contents, along with the assumption made about those contents. // -// At the end of compilation, when linking the result on the main thread, the +// At the end of compilation, when linking the result on the active thread, the // list of compiler constraints are read and converted to type constraints and // attached to the type sets. If the property type sets have changed so that the // assumptions no longer hold then the compilation is aborted and its result // discarded. // Superclass of all constraints generated during Ion compilation. These may -// be allocated off the main thread, using the current JIT context's allocator. +// be allocated off thread, using the current JIT context's allocator. class CompilerConstraint { public: @@ -1046,7 +1046,7 @@ class CompilerConstraint // Contents of the property at the point when the query was performed. This // may differ from the actual property types later in compilation as the - // main thread performs side effects. + // active thread performs side effects. TemporaryTypeSet* expected; CompilerConstraint(LifoAlloc* alloc, const HeapTypeSetKey& property) @@ -1311,7 +1311,7 @@ TypeSet::ObjectKey::ensureTrackedProperty(JSContext* cx, jsid id) { // If we are accessing a lazily defined property which actually exists in // the VM and has not been instantiated yet, instantiate it now if we are - // on the main thread and able to do so. + // on the active thread and able to do so. if (!JSID_IS_VOID(id) && !JSID_IS_EMPTY(id)) { MOZ_ASSERT(CurrentThreadCanAccessRuntime(cx->runtime())); if (isSingleton()) { @@ -1535,7 +1535,7 @@ js::InvalidateCompilerOutputsForScript(JSContext* cx, HandleScript script) static void CheckDefinitePropertiesTypeSet(JSContext* cx, TemporaryTypeSet* frozen, StackTypeSet* actual) { - // The definite properties analysis happens on the main thread, so no new + // The definite properties analysis happens on the active thread, so no new // types can have been added to actual. The analysis may have updated the // contents of |frozen| though with new speculative types, and these need // to be reflected in |actual| for AddClearDefiniteFunctionUsesInScript @@ -3083,7 +3083,7 @@ ObjectGroup::clearNewScript(JSContext* cx, ObjectGroup* replacement /* = nullptr } } } else { - // Threads off the main thread are not allowed to run scripts. + // Helper threads are not allowed to run scripts. MOZ_ASSERT(!cx->activation()); } @@ -4324,7 +4324,7 @@ ObjectGroup::sweep(AutoClearTypeInferenceStateOnOOM* oom) if (maybeUnboxedLayout()) { // Remove unboxed layouts that are about to be finalized from the - // compartment wide list while we are still on the main thread. + // compartment wide list while we are still on the active thread. ObjectGroup* group = this; if (IsAboutToBeFinalizedUnbarriered(&group)) unboxedLayout().detachFromCompartment(); @@ -4597,7 +4597,7 @@ AutoClearTypeInferenceStateOnOOM::~AutoClearTypeInferenceStateOnOOM() zone->types.setSweepingTypes(false); if (oom) { - JSRuntime* rt = zone->runtimeFromMainThread(); + JSRuntime* rt = zone->runtimeFromActiveCooperatingThread(); js::CancelOffThreadIonCompile(rt); zone->setPreservingCode(false); zone->discardJitCode(rt->defaultFreeOp(), /* discardBaselineCode = */ false); diff --git a/js/src/vm/TypeInference.h b/js/src/vm/TypeInference.h index ac95c4c9fdd8..94c5e55131fd 100644 --- a/js/src/vm/TypeInference.h +++ b/js/src/vm/TypeInference.h @@ -1186,10 +1186,10 @@ FinishDefinitePropertiesAnalysis(JSContext* cx, CompilerConstraintList* constrai // Representation of a heap type property which may or may not be instantiated. // Heap properties for singleton types are instantiated lazily as they are used -// by the compiler, but this is only done on the main thread. If we are +// by the compiler, but this is only done on the active thread. If we are // compiling off thread and use a property which has not yet been instantiated, // it will be treated as empty and non-configured and will be instantiated when -// rejoining to the main thread. If it is in fact not empty, the compilation +// rejoining to the active thread. If it is in fact not empty, the compilation // will fail; to avoid this, we try to instantiate singleton property types // during generation of baseline caches. class HeapTypeSetKey diff --git a/js/src/vtune/README b/js/src/vtune/README index 23719d8c2bd4..c147ac9605fa 100644 --- a/js/src/vtune/README +++ b/js/src/vtune/README @@ -1,10 +1,11 @@ -VTune files imported from VTune Amplifier XE 2013 Rev 11. +VTune files imported from VTune Amplifier XE 2017 Rev 1.0.486011. To update these files, copy the following from a VTune install directory: - sdk/src/ittnotify/ittnotify_config.h - sdk/src/ittnotify/ittnotify_types.h - sdk/src/ittnotify/jitprofiling.c + sdk/src/ittnotify/* + + include/ittnotify.h include/jitprofiling.h + include/legacy/ittnotify.h If the license has changed, update the "VTune License" section of toolkit/content/license.html diff --git a/js/src/vtune/VTuneWrapper.cpp b/js/src/vtune/VTuneWrapper.cpp new file mode 100644 index 000000000000..6350e5ecd1f6 --- /dev/null +++ b/js/src/vtune/VTuneWrapper.cpp @@ -0,0 +1,149 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "vtune/VTuneWrapper.h" + +#include "mozilla/Sprintf.h" + +#include "jscntxt.h" +#include "jscompartment.h" +#include "jsgc.h" + +#include "vm/Shape.h" +#include "wasm/WasmCode.h" + +#ifdef MOZ_VTUNE + +namespace js { +namespace vtune { + +uint32_t +GenerateUniqueMethodID() +{ + return (uint32_t)iJIT_GetNewMethodID(); +} + + +// Stubs and trampolines are created on engine initialization and are never unloaded. +void +MarkStub(const js::jit::JitCode* code, const char* name) +{ + if (!IsProfilingActive()) + return; + + iJIT_Method_Load_V2 method = {0}; + method.method_id = GenerateUniqueMethodID(); + method.method_name = const_cast(name); + method.method_load_address = code->raw(); + method.method_size = code->instructionsSize(); + method.module_name = const_cast("jitstubs"); + + iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2, (void*)&method); +} + + +void +MarkRegExp(const js::jit::JitCode* code, bool match_only) +{ + if (!IsProfilingActive()) + return; + + iJIT_Method_Load_V2 method = {0}; + method.method_id = GenerateUniqueMethodID(); + method.method_load_address = code->raw(); + method.method_size = code->instructionsSize(); + + if (match_only) + method.method_name = const_cast("regexp (match-only)"); + else + method.method_name = const_cast("regexp (normal)"); + + method.module_name = const_cast("irregexp"); + + int ok = iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2, (void*)&method); + if (ok != 1) + printf("[!] VTune Integration: Failed to load method.\n"); +} + + +void +MarkScript(const js::jit::JitCode* code, const JSScript* script, const char* module) +{ + if (!IsProfilingActive()) + return; + + iJIT_Method_Load_V2 method = {0}; + method.method_id = script->vtuneMethodID(); + method.method_load_address = code->raw(); + method.method_size = code->instructionsSize(); + method.module_name = const_cast(module); + + // Line numbers begin at 1, but columns begin at 0. + // Text editors start at 1,1 so fixup is performed to match. + char namebuf[512]; + SprintfLiteral(namebuf, "%s:%zu:%zu", + script->filename(), script->lineno(), script->column() + 1); + + method.method_name = &namebuf[0]; + + int ok = iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2, (void*)&method); + if (ok != 1) + printf("[!] VTune Integration: Failed to load method.\n"); +} + + +void +MarkWasm(const js::wasm::CodeSegment& cs, const char* name, void* start, uintptr_t size) +{ + if (!IsProfilingActive()) + return; + + iJIT_Method_Load_V2 method = {0}; + method.method_id = cs.vtune_method_id_; + method.method_name = const_cast(name); + method.method_load_address = start; + method.method_size = (unsigned)size; + method.module_name = const_cast("wasm"); + + int ok = iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2, (void*)&method); + if (ok != 1) + printf("[!] VTune Integration: Failed to load method.\n"); +} + + +void +UnmarkCode(const js::jit::JitCode* code) +{ + UnmarkBytes(code->raw(), (unsigned)code->instructionsSize()); +} + + +void +UnmarkBytes(void* bytes, unsigned size) +{ + if (!IsProfilingActive()) + return; + + // It appears that the method_id is not required for unloading. + iJIT_Method_Load method = {0}; + method.method_load_address = bytes; + method.method_size = size; + + // The iJVM_EVENT_TYPE_METHOD_UNLOAD_START event is undocumented. + // VTune appears to happily accept unload events even for untracked JitCode. + int ok = iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_UNLOAD_START, (void*)&method); + + // Assertions aren't reported in VTune: instead, they immediately end profiling + // with no warning that a crash occurred. This can generate misleading profiles. + // So instead, print out a message to stdout (which VTune does not redirect). + if (ok != 1) + printf("[!] VTune Integration: Failed to unload method.\n"); +} + +} // namespace vtune +} // namespace js + +#endif // MOZ_VTUNE diff --git a/js/src/vtune/VTuneWrapper.h b/js/src/vtune/VTuneWrapper.h index 224ea89403af..04ec52767f99 100644 --- a/js/src/vtune/VTuneWrapper.h +++ b/js/src/vtune/VTuneWrapper.h @@ -4,15 +4,54 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef vtunewrapper_h -#define vtunewrapper_h +#ifndef vtune_vtunewrapper_h +#define vtune_vtunewrapper_h + +#ifdef MOZ_VTUNE #include "vtune/jitprofiling.h" +#include "jsgc.h" +#include "jsscript.h" + +#include "jit/IonCode.h" +#include "wasm/WasmCode.h" + +namespace js { +namespace vtune { + +// VTune profiling may be attached/detached at any time, but there is no API for +// attaching a callback to execute at attachment time. Methods compiled before +// VTune was most recently attached therefore do not provide any information to VTune. inline bool -IsVTuneProfilingActive() +IsProfilingActive() { return iJIT_IsProfilingActive() == iJIT_SAMPLING_ON; } -#endif // vtunewrapper_h +// Wrapper exists in case we need locking in the future. +uint32_t GenerateUniqueMethodID(); + +void MarkStub(const js::jit::JitCode* code, const char* name); + +void MarkRegExp(const js::jit::JitCode* code, bool match_only); + +void MarkScript(const js::jit::JitCode* code, + const JSScript* script, + const char* module); + +void MarkWasm(const js::wasm::CodeSegment& cs, + const char* name, + void* start, + uintptr_t size); + +void UnmarkCode(const js::jit::JitCode* code); + +void UnmarkBytes(void* bytes, unsigned size); + +} // namespace vtune +} // namespace js + +#endif // MOZ_VTUNE + +#endif // vtune_vtunewrapper_h diff --git a/js/src/vtune/disable_warnings.h b/js/src/vtune/disable_warnings.h new file mode 100644 index 000000000000..9ea481b10307 --- /dev/null +++ b/js/src/vtune/disable_warnings.h @@ -0,0 +1,77 @@ +/* + This file is provided under a dual BSD/GPLv2 license. When using or + redistributing this file, you may do so under either license. + + GPL LICENSE SUMMARY + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + The full GNU General Public License is included in this distribution + in the file called LICENSE.GPL. + + Contact Information: + http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ + + BSD LICENSE + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "vtune/ittnotify_config.h" + +#if ITT_PLATFORM==ITT_PLATFORM_WIN + +#pragma warning (disable: 593) /* parameter "XXXX" was set but never used */ +#pragma warning (disable: 344) /* typedef name has already been declared (with same type) */ +#pragma warning (disable: 174) /* expression has no effect */ +#pragma warning (disable: 4127) /* conditional expression is constant */ +#pragma warning (disable: 4306) /* conversion from '?' to '?' of greater size */ + +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#if defined __INTEL_COMPILER + +#pragma warning (disable: 869) /* parameter "XXXXX" was never referenced */ +#pragma warning (disable: 1418) /* external function definition with no prior declaration */ +#pragma warning (disable: 1419) /* external declaration in primary source file */ + +#endif /* __INTEL_COMPILER */ diff --git a/js/src/vtune/ittnotify.h b/js/src/vtune/ittnotify.h new file mode 100644 index 000000000000..c52490239c6d --- /dev/null +++ b/js/src/vtune/ittnotify.h @@ -0,0 +1,4123 @@ +/* + This file is provided under a dual BSD/GPLv2 license. When using or + redistributing this file, you may do so under either license. + + GPL LICENSE SUMMARY + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + The full GNU General Public License is included in this distribution + in the file called LICENSE.GPL. + + Contact Information: + http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ + + BSD LICENSE + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _ITTNOTIFY_H_ +#define _ITTNOTIFY_H_ + +/** +@file +@brief Public User API functions and types +@mainpage + +The ITT API is used to annotate a user's program with additional information +that can be used by correctness and performance tools. The user inserts +calls in their program. Those calls generate information that is collected +at runtime, and used by Intel(R) Threading Tools. + +@section API Concepts +The following general concepts are used throughout the API. + +@subsection Unicode Support +Many API functions take character string arguments. On Windows, there +are two versions of each such function. The function name is suffixed +by W if Unicode support is enabled, and by A otherwise. Any API function +that takes a character string argument adheres to this convention. + +@subsection Conditional Compilation +Many users prefer having an option to modify ITT API code when linking it +inside their runtimes. ITT API header file provides a mechanism to replace +ITT API function names inside your code with empty strings. To do this, +define the macros INTEL_NO_ITTNOTIFY_API during compilation and remove the +static library from the linker script. + +@subsection Domains +[see domains] +Domains provide a way to separate notification for different modules or +libraries in a program. Domains are specified by dotted character strings, +e.g. TBB.Internal.Control. + +A mechanism (to be specified) is provided to enable and disable +domains. By default, all domains are enabled. +@subsection Named Entities and Instances +Named entities (frames, regions, tasks, and markers) communicate +information about the program to the analysis tools. A named entity often +refers to a section of program code, or to some set of logical concepts +that the programmer wants to group together. + +Named entities relate to the programmer's static view of the program. When +the program actually executes, many instances of a given named entity +may be created. + +The API annotations denote instances of named entities. The actual +named entities are displayed using the analysis tools. In other words, +the named entities come into existence when instances are created. + +Instances of named entities may have instance identifiers (IDs). Some +API calls use instance identifiers to create relationships between +different instances of named entities. Other API calls associate data +with instances of named entities. + +Some named entities must always have instance IDs. In particular, regions +and frames always have IDs. Task and markers need IDs only if the ID is +needed in another API call (such as adding a relation or metadata). + +The lifetime of instance IDs is distinct from the lifetime of +instances. This allows various relationships to be specified separate +from the actual execution of instances. This flexibility comes at the +expense of extra API calls. + +The same ID may not be reused for different instances, unless a previous +[ref] __itt_id_destroy call for that ID has been issued. +*/ + +/** @cond exclude_from_documentation */ +#ifndef ITT_OS_WIN +# define ITT_OS_WIN 1 +#endif /* ITT_OS_WIN */ + +#ifndef ITT_OS_LINUX +# define ITT_OS_LINUX 2 +#endif /* ITT_OS_LINUX */ + +#ifndef ITT_OS_MAC +# define ITT_OS_MAC 3 +#endif /* ITT_OS_MAC */ + +#ifndef ITT_OS_FREEBSD +# define ITT_OS_FREEBSD 4 +#endif /* ITT_OS_FREEBSD */ + +#ifndef ITT_OS +# if defined WIN32 || defined _WIN32 +# define ITT_OS ITT_OS_WIN +# elif defined( __APPLE__ ) && defined( __MACH__ ) +# define ITT_OS ITT_OS_MAC +# elif defined( __FreeBSD__ ) +# define ITT_OS ITT_OS_FREEBSD +# else +# define ITT_OS ITT_OS_LINUX +# endif +#endif /* ITT_OS */ + +#ifndef ITT_PLATFORM_WIN +# define ITT_PLATFORM_WIN 1 +#endif /* ITT_PLATFORM_WIN */ + +#ifndef ITT_PLATFORM_POSIX +# define ITT_PLATFORM_POSIX 2 +#endif /* ITT_PLATFORM_POSIX */ + +#ifndef ITT_PLATFORM_MAC +# define ITT_PLATFORM_MAC 3 +#endif /* ITT_PLATFORM_MAC */ + +#ifndef ITT_PLATFORM_FREEBSD +# define ITT_PLATFORM_FREEBSD 4 +#endif /* ITT_PLATFORM_FREEBSD */ + +#ifndef ITT_PLATFORM +# if ITT_OS==ITT_OS_WIN +# define ITT_PLATFORM ITT_PLATFORM_WIN +# elif ITT_OS==ITT_OS_MAC +# define ITT_PLATFORM ITT_PLATFORM_MAC +# elif ITT_OS==ITT_OS_FREEBSD +# define ITT_PLATFORM ITT_PLATFORM_FREEBSD +# else +# define ITT_PLATFORM ITT_PLATFORM_POSIX +# endif +#endif /* ITT_PLATFORM */ + +#if defined(_UNICODE) && !defined(UNICODE) +#define UNICODE +#endif + +#include +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#include +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#include +#if defined(UNICODE) || defined(_UNICODE) +#include +#endif /* UNICODE || _UNICODE */ +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#ifndef ITTAPI_CDECL +# if ITT_PLATFORM==ITT_PLATFORM_WIN +# define ITTAPI_CDECL __cdecl +# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +# if defined _M_IX86 || defined __i386__ +# define ITTAPI_CDECL __attribute__ ((cdecl)) +# else /* _M_IX86 || __i386__ */ +# define ITTAPI_CDECL /* actual only on x86 platform */ +# endif /* _M_IX86 || __i386__ */ +# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* ITTAPI_CDECL */ + +#ifndef STDCALL +# if ITT_PLATFORM==ITT_PLATFORM_WIN +# define STDCALL __stdcall +# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +# if defined _M_IX86 || defined __i386__ +# define STDCALL __attribute__ ((stdcall)) +# else /* _M_IX86 || __i386__ */ +# define STDCALL /* supported only on x86 platform */ +# endif /* _M_IX86 || __i386__ */ +# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* STDCALL */ + +#define ITTAPI ITTAPI_CDECL +#define LIBITTAPI ITTAPI_CDECL + +/* TODO: Temporary for compatibility! */ +#define ITTAPI_CALL ITTAPI_CDECL +#define LIBITTAPI_CALL ITTAPI_CDECL + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +/* use __forceinline (VC++ specific) */ +#define ITT_INLINE __forceinline +#define ITT_INLINE_ATTRIBUTE /* nothing */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +/* + * Generally, functions are not inlined unless optimization is specified. + * For functions declared inline, this attribute inlines the function even + * if no optimization level was specified. + */ +#ifdef __STRICT_ANSI__ +#define ITT_INLINE static +#define ITT_INLINE_ATTRIBUTE __attribute__((unused)) +#else /* __STRICT_ANSI__ */ +#define ITT_INLINE static inline +#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused)) +#endif /* __STRICT_ANSI__ */ +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +/** @endcond */ + +#ifdef INTEL_ITTNOTIFY_ENABLE_LEGACY +# if ITT_PLATFORM==ITT_PLATFORM_WIN +# pragma message("WARNING!!! Deprecated API is used. Please undefine INTEL_ITTNOTIFY_ENABLE_LEGACY macro") +# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +# warning "Deprecated API is used. Please undefine INTEL_ITTNOTIFY_ENABLE_LEGACY macro" +# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +# include "vtune/legacy/ittnotify.h" +#endif /* INTEL_ITTNOTIFY_ENABLE_LEGACY */ + +/** @cond exclude_from_documentation */ +/* Helper macro for joining tokens */ +#define ITT_JOIN_AUX(p,n) p##n +#define ITT_JOIN(p,n) ITT_JOIN_AUX(p,n) + +#ifdef ITT_MAJOR +#undef ITT_MAJOR +#endif +#ifdef ITT_MINOR +#undef ITT_MINOR +#endif +#define ITT_MAJOR 3 +#define ITT_MINOR 0 + +/* Standard versioning of a token with major and minor version numbers */ +#define ITT_VERSIONIZE(x) \ + ITT_JOIN(x, \ + ITT_JOIN(_, \ + ITT_JOIN(ITT_MAJOR, \ + ITT_JOIN(_, ITT_MINOR)))) + +#ifndef INTEL_ITTNOTIFY_PREFIX +# define INTEL_ITTNOTIFY_PREFIX __itt_ +#endif /* INTEL_ITTNOTIFY_PREFIX */ +#ifndef INTEL_ITTNOTIFY_POSTFIX +# define INTEL_ITTNOTIFY_POSTFIX _ptr_ +#endif /* INTEL_ITTNOTIFY_POSTFIX */ + +#define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n) +#define ITTNOTIFY_NAME(n) ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX))) + +#define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n) +#define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n) + +#define ITTNOTIFY_VOID_D0(n,d) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d) +#define ITTNOTIFY_VOID_D1(n,d,x) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x) +#define ITTNOTIFY_VOID_D2(n,d,x,y) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y) +#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z) +#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a) +#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b) +#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c) +#define ITTNOTIFY_DATA_D0(n,d) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d) +#define ITTNOTIFY_DATA_D1(n,d,x) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x) +#define ITTNOTIFY_DATA_D2(n,d,x,y) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y) +#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z) +#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a) +#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b) +#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c) + +#ifdef ITT_STUB +#undef ITT_STUB +#endif +#ifdef ITT_STUBV +#undef ITT_STUBV +#endif +#define ITT_STUBV(api,type,name,args) \ + typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args; \ + extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name); +#define ITT_STUB ITT_STUBV +/** @endcond */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** @cond exclude_from_gpa_documentation */ +/** + * @defgroup public Public API + * @{ + * @} + */ + +/** + * @defgroup control Collection Control + * @ingroup public + * General behavior: application continues to run, but no profiling information is being collected + * + * Pausing occurs not only for the current thread but for all process as well as spawned processes + * - Intel(R) Parallel Inspector and Intel(R) Inspector XE: + * - Does not analyze or report errors that involve memory access. + * - Other errors are reported as usual. Pausing data collection in + * Intel(R) Parallel Inspector and Intel(R) Inspector XE + * only pauses tracing and analyzing memory access. + * It does not pause tracing or analyzing threading APIs. + * . + * - Intel(R) Parallel Amplifier and Intel(R) VTune(TM) Amplifier XE: + * - Does continue to record when new threads are started. + * . + * - Other effects: + * - Possible reduction of runtime overhead. + * . + * @{ + */ +/** @brief Pause collection */ +void ITTAPI __itt_pause(void); +/** @brief Resume collection */ +void ITTAPI __itt_resume(void); +/** @brief Detach collection */ +void ITTAPI __itt_detach(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, pause, (void)) +ITT_STUBV(ITTAPI, void, resume, (void)) +ITT_STUBV(ITTAPI, void, detach, (void)) +#define __itt_pause ITTNOTIFY_VOID(pause) +#define __itt_pause_ptr ITTNOTIFY_NAME(pause) +#define __itt_resume ITTNOTIFY_VOID(resume) +#define __itt_resume_ptr ITTNOTIFY_NAME(resume) +#define __itt_detach ITTNOTIFY_VOID(detach) +#define __itt_detach_ptr ITTNOTIFY_NAME(detach) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_pause() +#define __itt_pause_ptr 0 +#define __itt_resume() +#define __itt_resume_ptr 0 +#define __itt_detach() +#define __itt_detach_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_pause_ptr 0 +#define __itt_resume_ptr 0 +#define __itt_detach_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} control group */ +/** @endcond */ + +/** + * @defgroup threads Threads + * @ingroup public + * Give names to threads + * @{ + */ +/** + * @brief Sets thread name of calling thread + * @param[in] name - name of thread + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +void ITTAPI __itt_thread_set_nameA(const char *name); +void ITTAPI __itt_thread_set_nameW(const wchar_t *name); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_thread_set_name __itt_thread_set_nameW +# define __itt_thread_set_name_ptr __itt_thread_set_nameW_ptr +#else /* UNICODE */ +# define __itt_thread_set_name __itt_thread_set_nameA +# define __itt_thread_set_name_ptr __itt_thread_set_nameA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +void ITTAPI __itt_thread_set_name(const char *name); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, thread_set_nameA, (const char *name)) +ITT_STUBV(ITTAPI, void, thread_set_nameW, (const wchar_t *name)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, thread_set_name, (const char *name)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_thread_set_nameA ITTNOTIFY_VOID(thread_set_nameA) +#define __itt_thread_set_nameA_ptr ITTNOTIFY_NAME(thread_set_nameA) +#define __itt_thread_set_nameW ITTNOTIFY_VOID(thread_set_nameW) +#define __itt_thread_set_nameW_ptr ITTNOTIFY_NAME(thread_set_nameW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_thread_set_name ITTNOTIFY_VOID(thread_set_name) +#define __itt_thread_set_name_ptr ITTNOTIFY_NAME(thread_set_name) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_thread_set_nameA(name) +#define __itt_thread_set_nameA_ptr 0 +#define __itt_thread_set_nameW(name) +#define __itt_thread_set_nameW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_thread_set_name(name) +#define __itt_thread_set_name_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_thread_set_nameA_ptr 0 +#define __itt_thread_set_nameW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_thread_set_name_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @cond exclude_from_gpa_documentation */ + +/** + * @brief Mark current thread as ignored from this point on, for the duration of its existence. + */ +void ITTAPI __itt_thread_ignore(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, thread_ignore, (void)) +#define __itt_thread_ignore ITTNOTIFY_VOID(thread_ignore) +#define __itt_thread_ignore_ptr ITTNOTIFY_NAME(thread_ignore) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_thread_ignore() +#define __itt_thread_ignore_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_thread_ignore_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} threads group */ + +/** + * @defgroup suppress Error suppression + * @ingroup public + * General behavior: application continues to run, but errors are suppressed + * + * @{ + */ + +/*****************************************************************//** + * @name group of functions used for error suppression in correctness tools + *********************************************************************/ +/** @{ */ +/** + * @hideinitializer + * @brief possible value for suppression mask + */ +#define __itt_suppress_all_errors 0x7fffffff + +/** + * @hideinitializer + * @brief possible value for suppression mask (suppresses errors from threading analysis) + */ +#define __itt_suppress_threading_errors 0x000000ff + +/** + * @hideinitializer + * @brief possible value for suppression mask (suppresses errors from memory analysis) + */ +#define __itt_suppress_memory_errors 0x0000ff00 + +/** + * @brief Start suppressing errors identified in mask on this thread + */ +void ITTAPI __itt_suppress_push(unsigned int mask); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, suppress_push, (unsigned int mask)) +#define __itt_suppress_push ITTNOTIFY_VOID(suppress_push) +#define __itt_suppress_push_ptr ITTNOTIFY_NAME(suppress_push) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_suppress_push(mask) +#define __itt_suppress_push_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_suppress_push_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Undo the effects of the matching call to __itt_suppress_push + */ +void ITTAPI __itt_suppress_pop(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, suppress_pop, (void)) +#define __itt_suppress_pop ITTNOTIFY_VOID(suppress_pop) +#define __itt_suppress_pop_ptr ITTNOTIFY_NAME(suppress_pop) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_suppress_pop() +#define __itt_suppress_pop_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_suppress_pop_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @enum __itt_model_disable + * @brief Enumerator for the disable methods + */ +typedef enum __itt_suppress_mode { + __itt_unsuppress_range, + __itt_suppress_range +} __itt_suppress_mode_t; + +/** + * @brief Mark a range of memory for error suppression or unsuppression for error types included in mask + */ +void ITTAPI __itt_suppress_mark_range(__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, suppress_mark_range, (__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size)) +#define __itt_suppress_mark_range ITTNOTIFY_VOID(suppress_mark_range) +#define __itt_suppress_mark_range_ptr ITTNOTIFY_NAME(suppress_mark_range) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_suppress_mark_range(mask) +#define __itt_suppress_mark_range_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_suppress_mark_range_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Undo the effect of a matching call to __itt_suppress_mark_range. If not matching + * call is found, nothing is changed. + */ +void ITTAPI __itt_suppress_clear_range(__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, suppress_clear_range, (__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size)) +#define __itt_suppress_clear_range ITTNOTIFY_VOID(suppress_clear_range) +#define __itt_suppress_clear_range_ptr ITTNOTIFY_NAME(suppress_clear_range) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_suppress_clear_range(mask) +#define __itt_suppress_clear_range_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_suppress_clear_range_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} */ +/** @} suppress group */ + +/** + * @defgroup sync Synchronization + * @ingroup public + * Indicate user-written synchronization code + * @{ + */ +/** + * @hideinitializer + * @brief possible value of attribute argument for sync object type + */ +#define __itt_attr_barrier 1 + +/** + * @hideinitializer + * @brief possible value of attribute argument for sync object type + */ +#define __itt_attr_mutex 2 + +/** +@brief Name a synchronization object +@param[in] addr Handle for the synchronization object. You should +use a real address to uniquely identify the synchronization object. +@param[in] objtype null-terminated object type string. If NULL is +passed, the name will be "User Synchronization". +@param[in] objname null-terminated object name string. If NULL, +no name will be assigned to the object. +@param[in] attribute one of [#__itt_attr_barrier, #__itt_attr_mutex] + */ + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +void ITTAPI __itt_sync_createA(void *addr, const char *objtype, const char *objname, int attribute); +void ITTAPI __itt_sync_createW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_sync_create __itt_sync_createW +# define __itt_sync_create_ptr __itt_sync_createW_ptr +#else /* UNICODE */ +# define __itt_sync_create __itt_sync_createA +# define __itt_sync_create_ptr __itt_sync_createA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +void ITTAPI __itt_sync_create (void *addr, const char *objtype, const char *objname, int attribute); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char *objtype, const char *objname, int attribute)) +ITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, sync_create, (void *addr, const char* objtype, const char* objname, int attribute)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_sync_createA ITTNOTIFY_VOID(sync_createA) +#define __itt_sync_createA_ptr ITTNOTIFY_NAME(sync_createA) +#define __itt_sync_createW ITTNOTIFY_VOID(sync_createW) +#define __itt_sync_createW_ptr ITTNOTIFY_NAME(sync_createW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_sync_create ITTNOTIFY_VOID(sync_create) +#define __itt_sync_create_ptr ITTNOTIFY_NAME(sync_create) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_sync_createA(addr, objtype, objname, attribute) +#define __itt_sync_createA_ptr 0 +#define __itt_sync_createW(addr, objtype, objname, attribute) +#define __itt_sync_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_sync_create(addr, objtype, objname, attribute) +#define __itt_sync_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_sync_createA_ptr 0 +#define __itt_sync_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_sync_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** +@brief Rename a synchronization object + +You can use the rename call to assign or reassign a name to a given +synchronization object. +@param[in] addr handle for the synchronization object. +@param[in] name null-terminated object name string. +*/ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +void ITTAPI __itt_sync_renameA(void *addr, const char *name); +void ITTAPI __itt_sync_renameW(void *addr, const wchar_t *name); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_sync_rename __itt_sync_renameW +# define __itt_sync_rename_ptr __itt_sync_renameW_ptr +#else /* UNICODE */ +# define __itt_sync_rename __itt_sync_renameA +# define __itt_sync_rename_ptr __itt_sync_renameA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +void ITTAPI __itt_sync_rename(void *addr, const char *name); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, sync_renameA, (void *addr, const char *name)) +ITT_STUBV(ITTAPI, void, sync_renameW, (void *addr, const wchar_t *name)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, sync_rename, (void *addr, const char *name)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_sync_renameA ITTNOTIFY_VOID(sync_renameA) +#define __itt_sync_renameA_ptr ITTNOTIFY_NAME(sync_renameA) +#define __itt_sync_renameW ITTNOTIFY_VOID(sync_renameW) +#define __itt_sync_renameW_ptr ITTNOTIFY_NAME(sync_renameW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_sync_rename ITTNOTIFY_VOID(sync_rename) +#define __itt_sync_rename_ptr ITTNOTIFY_NAME(sync_rename) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_sync_renameA(addr, name) +#define __itt_sync_renameA_ptr 0 +#define __itt_sync_renameW(addr, name) +#define __itt_sync_renameW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_sync_rename(addr, name) +#define __itt_sync_rename_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_sync_renameA_ptr 0 +#define __itt_sync_renameW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_sync_rename_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + @brief Destroy a synchronization object. + @param addr Handle for the synchronization object. + */ +void ITTAPI __itt_sync_destroy(void *addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, sync_destroy, (void *addr)) +#define __itt_sync_destroy ITTNOTIFY_VOID(sync_destroy) +#define __itt_sync_destroy_ptr ITTNOTIFY_NAME(sync_destroy) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_sync_destroy(addr) +#define __itt_sync_destroy_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_sync_destroy_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/*****************************************************************//** + * @name group of functions is used for performance measurement tools + *********************************************************************/ +/** @{ */ +/** + * @brief Enter spin loop on user-defined sync object + */ +void ITTAPI __itt_sync_prepare(void* addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, sync_prepare, (void *addr)) +#define __itt_sync_prepare ITTNOTIFY_VOID(sync_prepare) +#define __itt_sync_prepare_ptr ITTNOTIFY_NAME(sync_prepare) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_sync_prepare(addr) +#define __itt_sync_prepare_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_sync_prepare_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Quit spin loop without acquiring spin object + */ +void ITTAPI __itt_sync_cancel(void *addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, sync_cancel, (void *addr)) +#define __itt_sync_cancel ITTNOTIFY_VOID(sync_cancel) +#define __itt_sync_cancel_ptr ITTNOTIFY_NAME(sync_cancel) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_sync_cancel(addr) +#define __itt_sync_cancel_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_sync_cancel_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Successful spin loop completion (sync object acquired) + */ +void ITTAPI __itt_sync_acquired(void *addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, sync_acquired, (void *addr)) +#define __itt_sync_acquired ITTNOTIFY_VOID(sync_acquired) +#define __itt_sync_acquired_ptr ITTNOTIFY_NAME(sync_acquired) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_sync_acquired(addr) +#define __itt_sync_acquired_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_sync_acquired_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Start sync object releasing code. Is called before the lock release call. + */ +void ITTAPI __itt_sync_releasing(void* addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, sync_releasing, (void *addr)) +#define __itt_sync_releasing ITTNOTIFY_VOID(sync_releasing) +#define __itt_sync_releasing_ptr ITTNOTIFY_NAME(sync_releasing) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_sync_releasing(addr) +#define __itt_sync_releasing_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_sync_releasing_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} */ + +/** @} sync group */ + +/**************************************************************//** + * @name group of functions is used for correctness checking tools + ******************************************************************/ +/** @{ */ +/** + * @ingroup legacy + * @deprecated Legacy API + * @brief Fast synchronization which does no require spinning. + * - This special function is to be used by TBB and OpenMP libraries only when they know + * there is no spin but they need to suppress TC warnings about shared variable modifications. + * - It only has corresponding pointers in static library and does not have corresponding function + * in dynamic library. + * @see void __itt_sync_prepare(void* addr); + */ +void ITTAPI __itt_fsync_prepare(void* addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, fsync_prepare, (void *addr)) +#define __itt_fsync_prepare ITTNOTIFY_VOID(fsync_prepare) +#define __itt_fsync_prepare_ptr ITTNOTIFY_NAME(fsync_prepare) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_fsync_prepare(addr) +#define __itt_fsync_prepare_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_fsync_prepare_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup legacy + * @deprecated Legacy API + * @brief Fast synchronization which does no require spinning. + * - This special function is to be used by TBB and OpenMP libraries only when they know + * there is no spin but they need to suppress TC warnings about shared variable modifications. + * - It only has corresponding pointers in static library and does not have corresponding function + * in dynamic library. + * @see void __itt_sync_cancel(void *addr); + */ +void ITTAPI __itt_fsync_cancel(void *addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, fsync_cancel, (void *addr)) +#define __itt_fsync_cancel ITTNOTIFY_VOID(fsync_cancel) +#define __itt_fsync_cancel_ptr ITTNOTIFY_NAME(fsync_cancel) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_fsync_cancel(addr) +#define __itt_fsync_cancel_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_fsync_cancel_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup legacy + * @deprecated Legacy API + * @brief Fast synchronization which does no require spinning. + * - This special function is to be used by TBB and OpenMP libraries only when they know + * there is no spin but they need to suppress TC warnings about shared variable modifications. + * - It only has corresponding pointers in static library and does not have corresponding function + * in dynamic library. + * @see void __itt_sync_acquired(void *addr); + */ +void ITTAPI __itt_fsync_acquired(void *addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, fsync_acquired, (void *addr)) +#define __itt_fsync_acquired ITTNOTIFY_VOID(fsync_acquired) +#define __itt_fsync_acquired_ptr ITTNOTIFY_NAME(fsync_acquired) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_fsync_acquired(addr) +#define __itt_fsync_acquired_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_fsync_acquired_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup legacy + * @deprecated Legacy API + * @brief Fast synchronization which does no require spinning. + * - This special function is to be used by TBB and OpenMP libraries only when they know + * there is no spin but they need to suppress TC warnings about shared variable modifications. + * - It only has corresponding pointers in static library and does not have corresponding function + * in dynamic library. + * @see void __itt_sync_releasing(void* addr); + */ +void ITTAPI __itt_fsync_releasing(void* addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, fsync_releasing, (void *addr)) +#define __itt_fsync_releasing ITTNOTIFY_VOID(fsync_releasing) +#define __itt_fsync_releasing_ptr ITTNOTIFY_NAME(fsync_releasing) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_fsync_releasing(addr) +#define __itt_fsync_releasing_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_fsync_releasing_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} */ + +/** + * @defgroup model Modeling by Intel(R) Parallel Advisor + * @ingroup public + * This is the subset of itt used for modeling by Intel(R) Parallel Advisor. + * This API is called ONLY using annotate.h, by "Annotation" macros + * the user places in their sources during the parallelism modeling steps. + * + * site_begin/end and task_begin/end take the address of handle variables, + * which are writeable by the API. Handles must be 0 initialized prior + * to the first call to begin, or may cause a run-time failure. + * The handles are initialized in a multi-thread safe way by the API if + * the handle is 0. The commonly expected idiom is one static handle to + * identify a site or task. If a site or task of the same name has already + * been started during this collection, the same handle MAY be returned, + * but is not required to be - it is unspecified if data merging is done + * based on name. These routines also take an instance variable. Like + * the lexical instance, these must be 0 initialized. Unlike the lexical + * instance, this is used to track a single dynamic instance. + * + * API used by the Intel(R) Parallel Advisor to describe potential concurrency + * and related activities. User-added source annotations expand to calls + * to these procedures to enable modeling of a hypothetical concurrent + * execution serially. + * @{ + */ +#if !defined(_ADVISOR_ANNOTATE_H_) || defined(ANNOTATE_EXPAND_NULL) + +typedef void* __itt_model_site; /*!< @brief handle for lexical site */ +typedef void* __itt_model_site_instance; /*!< @brief handle for dynamic instance */ +typedef void* __itt_model_task; /*!< @brief handle for lexical site */ +typedef void* __itt_model_task_instance; /*!< @brief handle for dynamic instance */ + +/** + * @enum __itt_model_disable + * @brief Enumerator for the disable methods + */ +typedef enum { + __itt_model_disable_observation, + __itt_model_disable_collection +} __itt_model_disable; + +#endif /* !_ADVISOR_ANNOTATE_H_ || ANNOTATE_EXPAND_NULL */ + +/** + * @brief ANNOTATE_SITE_BEGIN/ANNOTATE_SITE_END support. + * + * site_begin/end model a potential concurrency site. + * site instances may be recursively nested with themselves. + * site_end exits the most recently started but unended site for the current + * thread. The handle passed to end may be used to validate structure. + * Instances of a site encountered on different threads concurrently + * are considered completely distinct. If the site name for two different + * lexical sites match, it is unspecified whether they are treated as the + * same or different for data presentation. + */ +void ITTAPI __itt_model_site_begin(__itt_model_site *site, __itt_model_site_instance *instance, const char *name); +#if ITT_PLATFORM==ITT_PLATFORM_WIN +void ITTAPI __itt_model_site_beginW(const wchar_t *name); +#endif +void ITTAPI __itt_model_site_beginA(const char *name); +void ITTAPI __itt_model_site_beginAL(const char *name, size_t siteNameLen); +void ITTAPI __itt_model_site_end (__itt_model_site *site, __itt_model_site_instance *instance); +void ITTAPI __itt_model_site_end_2(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, model_site_begin, (__itt_model_site *site, __itt_model_site_instance *instance, const char *name)) +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, model_site_beginW, (const wchar_t *name)) +#endif +ITT_STUBV(ITTAPI, void, model_site_beginA, (const char *name)) +ITT_STUBV(ITTAPI, void, model_site_beginAL, (const char *name, size_t siteNameLen)) +ITT_STUBV(ITTAPI, void, model_site_end, (__itt_model_site *site, __itt_model_site_instance *instance)) +ITT_STUBV(ITTAPI, void, model_site_end_2, (void)) +#define __itt_model_site_begin ITTNOTIFY_VOID(model_site_begin) +#define __itt_model_site_begin_ptr ITTNOTIFY_NAME(model_site_begin) +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_model_site_beginW ITTNOTIFY_VOID(model_site_beginW) +#define __itt_model_site_beginW_ptr ITTNOTIFY_NAME(model_site_beginW) +#endif +#define __itt_model_site_beginA ITTNOTIFY_VOID(model_site_beginA) +#define __itt_model_site_beginA_ptr ITTNOTIFY_NAME(model_site_beginA) +#define __itt_model_site_beginAL ITTNOTIFY_VOID(model_site_beginAL) +#define __itt_model_site_beginAL_ptr ITTNOTIFY_NAME(model_site_beginAL) +#define __itt_model_site_end ITTNOTIFY_VOID(model_site_end) +#define __itt_model_site_end_ptr ITTNOTIFY_NAME(model_site_end) +#define __itt_model_site_end_2 ITTNOTIFY_VOID(model_site_end_2) +#define __itt_model_site_end_2_ptr ITTNOTIFY_NAME(model_site_end_2) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_model_site_begin(site, instance, name) +#define __itt_model_site_begin_ptr 0 +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_model_site_beginW(name) +#define __itt_model_site_beginW_ptr 0 +#endif +#define __itt_model_site_beginA(name) +#define __itt_model_site_beginA_ptr 0 +#define __itt_model_site_beginAL(name, siteNameLen) +#define __itt_model_site_beginAL_ptr 0 +#define __itt_model_site_end(site, instance) +#define __itt_model_site_end_ptr 0 +#define __itt_model_site_end_2() +#define __itt_model_site_end_2_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_model_site_begin_ptr 0 +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_model_site_beginW_ptr 0 +#endif +#define __itt_model_site_beginA_ptr 0 +#define __itt_model_site_beginAL_ptr 0 +#define __itt_model_site_end_ptr 0 +#define __itt_model_site_end_2_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief ANNOTATE_TASK_BEGIN/ANNOTATE_TASK_END support + * + * task_begin/end model a potential task, which is contained within the most + * closely enclosing dynamic site. task_end exits the most recently started + * but unended task. The handle passed to end may be used to validate + * structure. It is unspecified if bad dynamic nesting is detected. If it + * is, it should be encoded in the resulting data collection. The collector + * should not fail due to construct nesting issues, nor attempt to directly + * indicate the problem. + */ +void ITTAPI __itt_model_task_begin(__itt_model_task *task, __itt_model_task_instance *instance, const char *name); +#if ITT_PLATFORM==ITT_PLATFORM_WIN +void ITTAPI __itt_model_task_beginW(const wchar_t *name); +void ITTAPI __itt_model_iteration_taskW(const wchar_t *name); +#endif +void ITTAPI __itt_model_task_beginA(const char *name); +void ITTAPI __itt_model_task_beginAL(const char *name, size_t taskNameLen); +void ITTAPI __itt_model_iteration_taskA(const char *name); +void ITTAPI __itt_model_iteration_taskAL(const char *name, size_t taskNameLen); +void ITTAPI __itt_model_task_end (__itt_model_task *task, __itt_model_task_instance *instance); +void ITTAPI __itt_model_task_end_2(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, model_task_begin, (__itt_model_task *task, __itt_model_task_instance *instance, const char *name)) +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, model_task_beginW, (const wchar_t *name)) +ITT_STUBV(ITTAPI, void, model_iteration_taskW, (const wchar_t *name)) +#endif +ITT_STUBV(ITTAPI, void, model_task_beginA, (const char *name)) +ITT_STUBV(ITTAPI, void, model_task_beginAL, (const char *name, size_t taskNameLen)) +ITT_STUBV(ITTAPI, void, model_iteration_taskA, (const char *name)) +ITT_STUBV(ITTAPI, void, model_iteration_taskAL, (const char *name, size_t taskNameLen)) +ITT_STUBV(ITTAPI, void, model_task_end, (__itt_model_task *task, __itt_model_task_instance *instance)) +ITT_STUBV(ITTAPI, void, model_task_end_2, (void)) +#define __itt_model_task_begin ITTNOTIFY_VOID(model_task_begin) +#define __itt_model_task_begin_ptr ITTNOTIFY_NAME(model_task_begin) +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_model_task_beginW ITTNOTIFY_VOID(model_task_beginW) +#define __itt_model_task_beginW_ptr ITTNOTIFY_NAME(model_task_beginW) +#define __itt_model_iteration_taskW ITTNOTIFY_VOID(model_iteration_taskW) +#define __itt_model_iteration_taskW_ptr ITTNOTIFY_NAME(model_iteration_taskW) +#endif +#define __itt_model_task_beginA ITTNOTIFY_VOID(model_task_beginA) +#define __itt_model_task_beginA_ptr ITTNOTIFY_NAME(model_task_beginA) +#define __itt_model_task_beginAL ITTNOTIFY_VOID(model_task_beginAL) +#define __itt_model_task_beginAL_ptr ITTNOTIFY_NAME(model_task_beginAL) +#define __itt_model_iteration_taskA ITTNOTIFY_VOID(model_iteration_taskA) +#define __itt_model_iteration_taskA_ptr ITTNOTIFY_NAME(model_iteration_taskA) +#define __itt_model_iteration_taskAL ITTNOTIFY_VOID(model_iteration_taskAL) +#define __itt_model_iteration_taskAL_ptr ITTNOTIFY_NAME(model_iteration_taskAL) +#define __itt_model_task_end ITTNOTIFY_VOID(model_task_end) +#define __itt_model_task_end_ptr ITTNOTIFY_NAME(model_task_end) +#define __itt_model_task_end_2 ITTNOTIFY_VOID(model_task_end_2) +#define __itt_model_task_end_2_ptr ITTNOTIFY_NAME(model_task_end_2) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_model_task_begin(task, instance, name) +#define __itt_model_task_begin_ptr 0 +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_model_task_beginW(name) +#define __itt_model_task_beginW_ptr 0 +#endif +#define __itt_model_task_beginA(name) +#define __itt_model_task_beginA_ptr 0 +#define __itt_model_task_beginAL(name, siteNameLen) +#define __itt_model_task_beginAL_ptr 0 +#define __itt_model_iteration_taskA(name) +#define __itt_model_iteration_taskA_ptr 0 +#define __itt_model_iteration_taskAL(name, siteNameLen) +#define __itt_model_iteration_taskAL_ptr 0 +#define __itt_model_task_end(task, instance) +#define __itt_model_task_end_ptr 0 +#define __itt_model_task_end_2() +#define __itt_model_task_end_2_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_model_task_begin_ptr 0 +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_model_task_beginW_ptr 0 +#endif +#define __itt_model_task_beginA_ptr 0 +#define __itt_model_task_beginAL_ptr 0 +#define __itt_model_iteration_taskA_ptr 0 +#define __itt_model_iteration_taskAL_ptr 0 +#define __itt_model_task_end_ptr 0 +#define __itt_model_task_end_2_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief ANNOTATE_LOCK_ACQUIRE/ANNOTATE_LOCK_RELEASE support + * + * lock_acquire/release model a potential lock for both lockset and + * performance modeling. Each unique address is modeled as a separate + * lock, with invalid addresses being valid lock IDs. Specifically: + * no storage is accessed by the API at the specified address - it is only + * used for lock identification. Lock acquires may be self-nested and are + * unlocked by a corresponding number of releases. + * (These closely correspond to __itt_sync_acquired/__itt_sync_releasing, + * but may not have identical semantics.) + */ +void ITTAPI __itt_model_lock_acquire(void *lock); +void ITTAPI __itt_model_lock_acquire_2(void *lock); +void ITTAPI __itt_model_lock_release(void *lock); +void ITTAPI __itt_model_lock_release_2(void *lock); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, model_lock_acquire, (void *lock)) +ITT_STUBV(ITTAPI, void, model_lock_acquire_2, (void *lock)) +ITT_STUBV(ITTAPI, void, model_lock_release, (void *lock)) +ITT_STUBV(ITTAPI, void, model_lock_release_2, (void *lock)) +#define __itt_model_lock_acquire ITTNOTIFY_VOID(model_lock_acquire) +#define __itt_model_lock_acquire_ptr ITTNOTIFY_NAME(model_lock_acquire) +#define __itt_model_lock_acquire_2 ITTNOTIFY_VOID(model_lock_acquire_2) +#define __itt_model_lock_acquire_2_ptr ITTNOTIFY_NAME(model_lock_acquire_2) +#define __itt_model_lock_release ITTNOTIFY_VOID(model_lock_release) +#define __itt_model_lock_release_ptr ITTNOTIFY_NAME(model_lock_release) +#define __itt_model_lock_release_2 ITTNOTIFY_VOID(model_lock_release_2) +#define __itt_model_lock_release_2_ptr ITTNOTIFY_NAME(model_lock_release_2) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_model_lock_acquire(lock) +#define __itt_model_lock_acquire_ptr 0 +#define __itt_model_lock_acquire_2(lock) +#define __itt_model_lock_acquire_2_ptr 0 +#define __itt_model_lock_release(lock) +#define __itt_model_lock_release_ptr 0 +#define __itt_model_lock_release_2(lock) +#define __itt_model_lock_release_2_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_model_lock_acquire_ptr 0 +#define __itt_model_lock_acquire_2_ptr 0 +#define __itt_model_lock_release_ptr 0 +#define __itt_model_lock_release_2_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief ANNOTATE_RECORD_ALLOCATION/ANNOTATE_RECORD_DEALLOCATION support + * + * record_allocation/deallocation describe user-defined memory allocator + * behavior, which may be required for correctness modeling to understand + * when storage is not expected to be actually reused across threads. + */ +void ITTAPI __itt_model_record_allocation (void *addr, size_t size); +void ITTAPI __itt_model_record_deallocation(void *addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, model_record_allocation, (void *addr, size_t size)) +ITT_STUBV(ITTAPI, void, model_record_deallocation, (void *addr)) +#define __itt_model_record_allocation ITTNOTIFY_VOID(model_record_allocation) +#define __itt_model_record_allocation_ptr ITTNOTIFY_NAME(model_record_allocation) +#define __itt_model_record_deallocation ITTNOTIFY_VOID(model_record_deallocation) +#define __itt_model_record_deallocation_ptr ITTNOTIFY_NAME(model_record_deallocation) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_model_record_allocation(addr, size) +#define __itt_model_record_allocation_ptr 0 +#define __itt_model_record_deallocation(addr) +#define __itt_model_record_deallocation_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_model_record_allocation_ptr 0 +#define __itt_model_record_deallocation_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief ANNOTATE_INDUCTION_USES support + * + * Note particular storage is inductive through the end of the current site + */ +void ITTAPI __itt_model_induction_uses(void* addr, size_t size); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, model_induction_uses, (void *addr, size_t size)) +#define __itt_model_induction_uses ITTNOTIFY_VOID(model_induction_uses) +#define __itt_model_induction_uses_ptr ITTNOTIFY_NAME(model_induction_uses) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_model_induction_uses(addr, size) +#define __itt_model_induction_uses_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_model_induction_uses_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief ANNOTATE_REDUCTION_USES support + * + * Note particular storage is used for reduction through the end + * of the current site + */ +void ITTAPI __itt_model_reduction_uses(void* addr, size_t size); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, model_reduction_uses, (void *addr, size_t size)) +#define __itt_model_reduction_uses ITTNOTIFY_VOID(model_reduction_uses) +#define __itt_model_reduction_uses_ptr ITTNOTIFY_NAME(model_reduction_uses) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_model_reduction_uses(addr, size) +#define __itt_model_reduction_uses_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_model_reduction_uses_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief ANNOTATE_OBSERVE_USES support + * + * Have correctness modeling record observations about uses of storage + * through the end of the current site + */ +void ITTAPI __itt_model_observe_uses(void* addr, size_t size); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, model_observe_uses, (void *addr, size_t size)) +#define __itt_model_observe_uses ITTNOTIFY_VOID(model_observe_uses) +#define __itt_model_observe_uses_ptr ITTNOTIFY_NAME(model_observe_uses) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_model_observe_uses(addr, size) +#define __itt_model_observe_uses_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_model_observe_uses_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief ANNOTATE_CLEAR_USES support + * + * Clear the special handling of a piece of storage related to induction, + * reduction or observe_uses + */ +void ITTAPI __itt_model_clear_uses(void* addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, model_clear_uses, (void *addr)) +#define __itt_model_clear_uses ITTNOTIFY_VOID(model_clear_uses) +#define __itt_model_clear_uses_ptr ITTNOTIFY_NAME(model_clear_uses) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_model_clear_uses(addr) +#define __itt_model_clear_uses_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_model_clear_uses_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief ANNOTATE_DISABLE_*_PUSH/ANNOTATE_DISABLE_*_POP support + * + * disable_push/disable_pop push and pop disabling based on a parameter. + * Disabling observations stops processing of memory references during + * correctness modeling, and all annotations that occur in the disabled + * region. This allows description of code that is expected to be handled + * specially during conversion to parallelism or that is not recognized + * by tools (e.g. some kinds of synchronization operations.) + * This mechanism causes all annotations in the disabled region, other + * than disable_push and disable_pop, to be ignored. (For example, this + * might validly be used to disable an entire parallel site and the contained + * tasks and locking in it for data collection purposes.) + * The disable for collection is a more expensive operation, but reduces + * collector overhead significantly. This applies to BOTH correctness data + * collection and performance data collection. For example, a site + * containing a task might only enable data collection for the first 10 + * iterations. Both performance and correctness data should reflect this, + * and the program should run as close to full speed as possible when + * collection is disabled. + */ +void ITTAPI __itt_model_disable_push(__itt_model_disable x); +void ITTAPI __itt_model_disable_pop(void); +void ITTAPI __itt_model_aggregate_task(size_t x); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, model_disable_push, (__itt_model_disable x)) +ITT_STUBV(ITTAPI, void, model_disable_pop, (void)) +ITT_STUBV(ITTAPI, void, model_aggregate_task, (size_t x)) +#define __itt_model_disable_push ITTNOTIFY_VOID(model_disable_push) +#define __itt_model_disable_push_ptr ITTNOTIFY_NAME(model_disable_push) +#define __itt_model_disable_pop ITTNOTIFY_VOID(model_disable_pop) +#define __itt_model_disable_pop_ptr ITTNOTIFY_NAME(model_disable_pop) +#define __itt_model_aggregate_task ITTNOTIFY_VOID(model_aggregate_task) +#define __itt_model_aggregate_task_ptr ITTNOTIFY_NAME(model_aggregate_task) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_model_disable_push(x) +#define __itt_model_disable_push_ptr 0 +#define __itt_model_disable_pop() +#define __itt_model_disable_pop_ptr 0 +#define __itt_model_aggregate_task(x) +#define __itt_model_aggregate_task_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_model_disable_push_ptr 0 +#define __itt_model_disable_pop_ptr 0 +#define __itt_model_aggregate_task_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} model group */ + +/** + * @defgroup heap Heap + * @ingroup public + * Heap group + * @{ + */ + +typedef void* __itt_heap_function; + +/** + * @brief Create an identification for heap function + * @return non-zero identifier or NULL + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +__itt_heap_function ITTAPI __itt_heap_function_createA(const char* name, const char* domain); +__itt_heap_function ITTAPI __itt_heap_function_createW(const wchar_t* name, const wchar_t* domain); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_heap_function_create __itt_heap_function_createW +# define __itt_heap_function_create_ptr __itt_heap_function_createW_ptr +#else +# define __itt_heap_function_create __itt_heap_function_createA +# define __itt_heap_function_create_ptr __itt_heap_function_createA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +__itt_heap_function ITTAPI __itt_heap_function_create(const char* name, const char* domain); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char* name, const char* domain)) +ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t* name, const wchar_t* domain)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_heap_function, heap_function_create, (const char* name, const char* domain)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_heap_function_createA ITTNOTIFY_DATA(heap_function_createA) +#define __itt_heap_function_createA_ptr ITTNOTIFY_NAME(heap_function_createA) +#define __itt_heap_function_createW ITTNOTIFY_DATA(heap_function_createW) +#define __itt_heap_function_createW_ptr ITTNOTIFY_NAME(heap_function_createW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_heap_function_create ITTNOTIFY_DATA(heap_function_create) +#define __itt_heap_function_create_ptr ITTNOTIFY_NAME(heap_function_create) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_heap_function_createA(name, domain) (__itt_heap_function)0 +#define __itt_heap_function_createA_ptr 0 +#define __itt_heap_function_createW(name, domain) (__itt_heap_function)0 +#define __itt_heap_function_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_heap_function_create(name, domain) (__itt_heap_function)0 +#define __itt_heap_function_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_heap_function_createA_ptr 0 +#define __itt_heap_function_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_heap_function_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an allocation begin occurrence. + */ +void ITTAPI __itt_heap_allocate_begin(__itt_heap_function h, size_t size, int initialized); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_allocate_begin, (__itt_heap_function h, size_t size, int initialized)) +#define __itt_heap_allocate_begin ITTNOTIFY_VOID(heap_allocate_begin) +#define __itt_heap_allocate_begin_ptr ITTNOTIFY_NAME(heap_allocate_begin) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_allocate_begin(h, size, initialized) +#define __itt_heap_allocate_begin_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_allocate_begin_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an allocation end occurrence. + */ +void ITTAPI __itt_heap_allocate_end(__itt_heap_function h, void** addr, size_t size, int initialized); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_allocate_end, (__itt_heap_function h, void** addr, size_t size, int initialized)) +#define __itt_heap_allocate_end ITTNOTIFY_VOID(heap_allocate_end) +#define __itt_heap_allocate_end_ptr ITTNOTIFY_NAME(heap_allocate_end) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_allocate_end(h, addr, size, initialized) +#define __itt_heap_allocate_end_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_allocate_end_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an free begin occurrence. + */ +void ITTAPI __itt_heap_free_begin(__itt_heap_function h, void* addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_free_begin, (__itt_heap_function h, void* addr)) +#define __itt_heap_free_begin ITTNOTIFY_VOID(heap_free_begin) +#define __itt_heap_free_begin_ptr ITTNOTIFY_NAME(heap_free_begin) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_free_begin(h, addr) +#define __itt_heap_free_begin_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_free_begin_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an free end occurrence. + */ +void ITTAPI __itt_heap_free_end(__itt_heap_function h, void* addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_free_end, (__itt_heap_function h, void* addr)) +#define __itt_heap_free_end ITTNOTIFY_VOID(heap_free_end) +#define __itt_heap_free_end_ptr ITTNOTIFY_NAME(heap_free_end) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_free_end(h, addr) +#define __itt_heap_free_end_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_free_end_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an reallocation begin occurrence. + */ +void ITTAPI __itt_heap_reallocate_begin(__itt_heap_function h, void* addr, size_t new_size, int initialized); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void* addr, size_t new_size, int initialized)) +#define __itt_heap_reallocate_begin ITTNOTIFY_VOID(heap_reallocate_begin) +#define __itt_heap_reallocate_begin_ptr ITTNOTIFY_NAME(heap_reallocate_begin) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_reallocate_begin(h, addr, new_size, initialized) +#define __itt_heap_reallocate_begin_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_reallocate_begin_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an reallocation end occurrence. + */ +void ITTAPI __itt_heap_reallocate_end(__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_reallocate_end, (__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized)) +#define __itt_heap_reallocate_end ITTNOTIFY_VOID(heap_reallocate_end) +#define __itt_heap_reallocate_end_ptr ITTNOTIFY_NAME(heap_reallocate_end) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_reallocate_end(h, addr, new_addr, new_size, initialized) +#define __itt_heap_reallocate_end_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_reallocate_end_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @brief internal access begin */ +void ITTAPI __itt_heap_internal_access_begin(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_internal_access_begin, (void)) +#define __itt_heap_internal_access_begin ITTNOTIFY_VOID(heap_internal_access_begin) +#define __itt_heap_internal_access_begin_ptr ITTNOTIFY_NAME(heap_internal_access_begin) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_internal_access_begin() +#define __itt_heap_internal_access_begin_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_internal_access_begin_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @brief internal access end */ +void ITTAPI __itt_heap_internal_access_end(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_internal_access_end, (void)) +#define __itt_heap_internal_access_end ITTNOTIFY_VOID(heap_internal_access_end) +#define __itt_heap_internal_access_end_ptr ITTNOTIFY_NAME(heap_internal_access_end) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_internal_access_end() +#define __itt_heap_internal_access_end_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_internal_access_end_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @brief record memory growth begin */ +void ITTAPI __itt_heap_record_memory_growth_begin(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_record_memory_growth_begin, (void)) +#define __itt_heap_record_memory_growth_begin ITTNOTIFY_VOID(heap_record_memory_growth_begin) +#define __itt_heap_record_memory_growth_begin_ptr ITTNOTIFY_NAME(heap_record_memory_growth_begin) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_record_memory_growth_begin() +#define __itt_heap_record_memory_growth_begin_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_record_memory_growth_begin_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @brief record memory growth end */ +void ITTAPI __itt_heap_record_memory_growth_end(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_record_memory_growth_end, (void)) +#define __itt_heap_record_memory_growth_end ITTNOTIFY_VOID(heap_record_memory_growth_end) +#define __itt_heap_record_memory_growth_end_ptr ITTNOTIFY_NAME(heap_record_memory_growth_end) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_record_memory_growth_end() +#define __itt_heap_record_memory_growth_end_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_record_memory_growth_end_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Specify the type of heap detection/reporting to modify. + */ +/** + * @hideinitializer + * @brief Report on memory leaks. + */ +#define __itt_heap_leaks 0x00000001 + +/** + * @hideinitializer + * @brief Report on memory growth. + */ +#define __itt_heap_growth 0x00000002 + + +/** @brief heap reset detection */ +void ITTAPI __itt_heap_reset_detection(unsigned int reset_mask); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_reset_detection, (unsigned int reset_mask)) +#define __itt_heap_reset_detection ITTNOTIFY_VOID(heap_reset_detection) +#define __itt_heap_reset_detection_ptr ITTNOTIFY_NAME(heap_reset_detection) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_reset_detection() +#define __itt_heap_reset_detection_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_reset_detection_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @brief report */ +void ITTAPI __itt_heap_record(unsigned int record_mask); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, heap_record, (unsigned int record_mask)) +#define __itt_heap_record ITTNOTIFY_VOID(heap_record) +#define __itt_heap_record_ptr ITTNOTIFY_NAME(heap_record) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_heap_record() +#define __itt_heap_record_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_heap_record_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @} heap group */ +/** @endcond */ +/* ========================================================================== */ + +/** + * @defgroup domains Domains + * @ingroup public + * Domains group + * @{ + */ + +/** @cond exclude_from_documentation */ +#pragma pack(push, 8) + +typedef struct ___itt_domain +{ + volatile int flags; /*!< Zero if disabled, non-zero if enabled. The meaning of different non-zero values is reserved to the runtime */ + const char* nameA; /*!< Copy of original name in ASCII. */ +#if defined(UNICODE) || defined(_UNICODE) + const wchar_t* nameW; /*!< Copy of original name in UNICODE. */ +#else /* UNICODE || _UNICODE */ + void* nameW; +#endif /* UNICODE || _UNICODE */ + int extra1; /*!< Reserved to the runtime */ + void* extra2; /*!< Reserved to the runtime */ + struct ___itt_domain* next; +} __itt_domain; + +#pragma pack(pop) +/** @endcond */ + +/** + * @ingroup domains + * @brief Create a domain. + * Create domain using some domain name: the URI naming style is recommended. + * Because the set of domains is expected to be static over the application's + * execution time, there is no mechanism to destroy a domain. + * Any domain can be accessed by any thread in the process, regardless of + * which thread created the domain. This call is thread-safe. + * @param[in] name name of domain + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +__itt_domain* ITTAPI __itt_domain_createA(const char *name); +__itt_domain* ITTAPI __itt_domain_createW(const wchar_t *name); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_domain_create __itt_domain_createW +# define __itt_domain_create_ptr __itt_domain_createW_ptr +#else /* UNICODE */ +# define __itt_domain_create __itt_domain_createA +# define __itt_domain_create_ptr __itt_domain_createA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +__itt_domain* ITTAPI __itt_domain_create(const char *name); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_domain*, domain_createA, (const char *name)) +ITT_STUB(ITTAPI, __itt_domain*, domain_createW, (const wchar_t *name)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_domain*, domain_create, (const char *name)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_domain_createA ITTNOTIFY_DATA(domain_createA) +#define __itt_domain_createA_ptr ITTNOTIFY_NAME(domain_createA) +#define __itt_domain_createW ITTNOTIFY_DATA(domain_createW) +#define __itt_domain_createW_ptr ITTNOTIFY_NAME(domain_createW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_domain_create ITTNOTIFY_DATA(domain_create) +#define __itt_domain_create_ptr ITTNOTIFY_NAME(domain_create) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_domain_createA(name) (__itt_domain*)0 +#define __itt_domain_createA_ptr 0 +#define __itt_domain_createW(name) (__itt_domain*)0 +#define __itt_domain_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_domain_create(name) (__itt_domain*)0 +#define __itt_domain_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_domain_createA_ptr 0 +#define __itt_domain_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_domain_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} domains group */ + +/** + * @defgroup ids IDs + * @ingroup public + * IDs group + * @{ + */ + +/** @cond exclude_from_documentation */ +#pragma pack(push, 8) + +typedef struct ___itt_id +{ + unsigned long long d1, d2, d3; +} __itt_id; + +#pragma pack(pop) +/** @endcond */ + +static const __itt_id __itt_null = { 0, 0, 0 }; + +/** + * @ingroup ids + * @brief A convenience function is provided to create an ID without domain control. + * @brief This is a convenience function to initialize an __itt_id structure. This function + * does not affect the collector runtime in any way. After you make the ID with this + * function, you still must create it with the __itt_id_create function before using the ID + * to identify a named entity. + * @param[in] addr The address of object; high QWORD of the ID value. + * @param[in] extra The extra data to unique identify object; low QWORD of the ID value. + */ + +ITT_INLINE __itt_id ITTAPI __itt_id_make(void* addr, unsigned long long extra) ITT_INLINE_ATTRIBUTE; +ITT_INLINE __itt_id ITTAPI __itt_id_make(void* addr, unsigned long long extra) +{ + __itt_id id = __itt_null; + id.d1 = (unsigned long long)((uintptr_t)addr); + id.d2 = (unsigned long long)extra; + id.d3 = (unsigned long long)0; /* Reserved. Must be zero */ + return id; +} + +/** + * @ingroup ids + * @brief Create an instance of identifier. + * This establishes the beginning of the lifetime of an instance of + * the given ID in the trace. Once this lifetime starts, the ID + * can be used to tag named entity instances in calls such as + * __itt_task_begin, and to specify relationships among + * identified named entity instances, using the \ref relations APIs. + * Instance IDs are not domain specific! + * @param[in] domain The domain controlling the execution of this call. + * @param[in] id The ID to create. + */ +void ITTAPI __itt_id_create(const __itt_domain *domain, __itt_id id); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, id_create, (const __itt_domain *domain, __itt_id id)) +#define __itt_id_create(d,x) ITTNOTIFY_VOID_D1(id_create,d,x) +#define __itt_id_create_ptr ITTNOTIFY_NAME(id_create) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_id_create(domain,id) +#define __itt_id_create_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_id_create_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup ids + * @brief Destroy an instance of identifier. + * This ends the lifetime of the current instance of the given ID value in the trace. + * Any relationships that are established after this lifetime ends are invalid. + * This call must be performed before the given ID value can be reused for a different + * named entity instance. + * @param[in] domain The domain controlling the execution of this call. + * @param[in] id The ID to destroy. + */ +void ITTAPI __itt_id_destroy(const __itt_domain *domain, __itt_id id); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, id_destroy, (const __itt_domain *domain, __itt_id id)) +#define __itt_id_destroy(d,x) ITTNOTIFY_VOID_D1(id_destroy,d,x) +#define __itt_id_destroy_ptr ITTNOTIFY_NAME(id_destroy) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_id_destroy(domain,id) +#define __itt_id_destroy_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_id_destroy_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} ids group */ + +/** + * @defgroup handless String Handles + * @ingroup public + * String Handles group + * @{ + */ + +/** @cond exclude_from_documentation */ +#pragma pack(push, 8) + +typedef struct ___itt_string_handle +{ + const char* strA; /*!< Copy of original string in ASCII. */ +#if defined(UNICODE) || defined(_UNICODE) + const wchar_t* strW; /*!< Copy of original string in UNICODE. */ +#else /* UNICODE || _UNICODE */ + void* strW; +#endif /* UNICODE || _UNICODE */ + int extra1; /*!< Reserved. Must be zero */ + void* extra2; /*!< Reserved. Must be zero */ + struct ___itt_string_handle* next; +} __itt_string_handle; + +#pragma pack(pop) +/** @endcond */ + +/** + * @ingroup handles + * @brief Create a string handle. + * Create and return handle value that can be associated with a string. + * Consecutive calls to __itt_string_handle_create with the same name + * return the same value. Because the set of string handles is expected to remain + * static during the application's execution time, there is no mechanism to destroy a string handle. + * Any string handle can be accessed by any thread in the process, regardless of which thread created + * the string handle. This call is thread-safe. + * @param[in] name The input string + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +__itt_string_handle* ITTAPI __itt_string_handle_createA(const char *name); +__itt_string_handle* ITTAPI __itt_string_handle_createW(const wchar_t *name); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_string_handle_create __itt_string_handle_createW +# define __itt_string_handle_create_ptr __itt_string_handle_createW_ptr +#else /* UNICODE */ +# define __itt_string_handle_create __itt_string_handle_createA +# define __itt_string_handle_create_ptr __itt_string_handle_createA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +__itt_string_handle* ITTAPI __itt_string_handle_create(const char *name); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createA, (const char *name)) +ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createW, (const wchar_t *name)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_create, (const char *name)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_string_handle_createA ITTNOTIFY_DATA(string_handle_createA) +#define __itt_string_handle_createA_ptr ITTNOTIFY_NAME(string_handle_createA) +#define __itt_string_handle_createW ITTNOTIFY_DATA(string_handle_createW) +#define __itt_string_handle_createW_ptr ITTNOTIFY_NAME(string_handle_createW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_string_handle_create ITTNOTIFY_DATA(string_handle_create) +#define __itt_string_handle_create_ptr ITTNOTIFY_NAME(string_handle_create) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_string_handle_createA(name) (__itt_string_handle*)0 +#define __itt_string_handle_createA_ptr 0 +#define __itt_string_handle_createW(name) (__itt_string_handle*)0 +#define __itt_string_handle_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_string_handle_create(name) (__itt_string_handle*)0 +#define __itt_string_handle_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_string_handle_createA_ptr 0 +#define __itt_string_handle_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_string_handle_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} handles group */ + +/** @cond exclude_from_documentation */ +typedef unsigned long long __itt_timestamp; +/** @endcond */ + +#define __itt_timestamp_none ((__itt_timestamp)-1LL) + +/** @cond exclude_from_gpa_documentation */ + +/** + * @ingroup timestamps + * @brief Return timestamp corresponding to the current moment. + * This returns the timestamp in the format that is the most relevant for the current + * host or platform (RDTSC, QPC, and others). You can use the "<" operator to + * compare __itt_timestamp values. + */ +__itt_timestamp ITTAPI __itt_get_timestamp(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, __itt_timestamp, get_timestamp, (void)) +#define __itt_get_timestamp ITTNOTIFY_DATA(get_timestamp) +#define __itt_get_timestamp_ptr ITTNOTIFY_NAME(get_timestamp) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_get_timestamp() +#define __itt_get_timestamp_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_get_timestamp_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} timestamps */ +/** @endcond */ + +/** @cond exclude_from_gpa_documentation */ + +/** + * @defgroup regions Regions + * @ingroup public + * Regions group + * @{ + */ +/** + * @ingroup regions + * @brief Begin of region instance. + * Successive calls to __itt_region_begin with the same ID are ignored + * until a call to __itt_region_end with the same ID + * @param[in] domain The domain for this region instance + * @param[in] id The instance ID for this region instance. Must not be __itt_null + * @param[in] parentid The instance ID for the parent of this region instance, or __itt_null + * @param[in] name The name of this region + */ +void ITTAPI __itt_region_begin(const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name); + +/** + * @ingroup regions + * @brief End of region instance. + * The first call to __itt_region_end with a given ID ends the + * region. Successive calls with the same ID are ignored, as are + * calls that do not have a matching __itt_region_begin call. + * @param[in] domain The domain for this region instance + * @param[in] id The instance ID for this region instance + */ +void ITTAPI __itt_region_end(const __itt_domain *domain, __itt_id id); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, region_begin, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name)) +ITT_STUBV(ITTAPI, void, region_end, (const __itt_domain *domain, __itt_id id)) +#define __itt_region_begin(d,x,y,z) ITTNOTIFY_VOID_D3(region_begin,d,x,y,z) +#define __itt_region_begin_ptr ITTNOTIFY_NAME(region_begin) +#define __itt_region_end(d,x) ITTNOTIFY_VOID_D1(region_end,d,x) +#define __itt_region_end_ptr ITTNOTIFY_NAME(region_end) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_region_begin(d,x,y,z) +#define __itt_region_begin_ptr 0 +#define __itt_region_end(d,x) +#define __itt_region_end_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_region_begin_ptr 0 +#define __itt_region_end_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} regions group */ + +/** + * @defgroup frames Frames + * @ingroup public + * Frames are similar to regions, but are intended to be easier to use and to implement. + * In particular: + * - Frames always represent periods of elapsed time + * - By default, frames have no nesting relationships + * @{ + */ + +/** + * @ingroup frames + * @brief Begin a frame instance. + * Successive calls to __itt_frame_begin with the + * same ID are ignored until a call to __itt_frame_end with the same ID. + * @param[in] domain The domain for this frame instance + * @param[in] id The instance ID for this frame instance or NULL + */ +void ITTAPI __itt_frame_begin_v3(const __itt_domain *domain, __itt_id *id); + +/** + * @ingroup frames + * @brief End a frame instance. + * The first call to __itt_frame_end with a given ID + * ends the frame. Successive calls with the same ID are ignored, as are + * calls that do not have a matching __itt_frame_begin call. + * @param[in] domain The domain for this frame instance + * @param[in] id The instance ID for this frame instance or NULL for current + */ +void ITTAPI __itt_frame_end_v3(const __itt_domain *domain, __itt_id *id); + +/** + * @ingroup frames + * @brief Submits a frame instance. + * Successive calls to __itt_frame_begin or __itt_frame_submit with the + * same ID are ignored until a call to __itt_frame_end or __itt_frame_submit + * with the same ID. + * Passing special __itt_timestamp_none value as "end" argument means + * take the current timestamp as the end timestamp. + * @param[in] domain The domain for this frame instance + * @param[in] id The instance ID for this frame instance or NULL + * @param[in] begin Timestamp of the beginning of the frame + * @param[in] end Timestamp of the end of the frame + */ +void ITTAPI __itt_frame_submit_v3(const __itt_domain *domain, __itt_id *id, + __itt_timestamp begin, __itt_timestamp end); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, frame_begin_v3, (const __itt_domain *domain, __itt_id *id)) +ITT_STUBV(ITTAPI, void, frame_end_v3, (const __itt_domain *domain, __itt_id *id)) +ITT_STUBV(ITTAPI, void, frame_submit_v3, (const __itt_domain *domain, __itt_id *id, __itt_timestamp begin, __itt_timestamp end)) +#define __itt_frame_begin_v3(d,x) ITTNOTIFY_VOID_D1(frame_begin_v3,d,x) +#define __itt_frame_begin_v3_ptr ITTNOTIFY_NAME(frame_begin_v3) +#define __itt_frame_end_v3(d,x) ITTNOTIFY_VOID_D1(frame_end_v3,d,x) +#define __itt_frame_end_v3_ptr ITTNOTIFY_NAME(frame_end_v3) +#define __itt_frame_submit_v3(d,x,b,e) ITTNOTIFY_VOID_D3(frame_submit_v3,d,x,b,e) +#define __itt_frame_submit_v3_ptr ITTNOTIFY_NAME(frame_submit_v3) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_frame_begin_v3(domain,id) +#define __itt_frame_begin_v3_ptr 0 +#define __itt_frame_end_v3(domain,id) +#define __itt_frame_end_v3_ptr 0 +#define __itt_frame_submit_v3(domain,id,begin,end) +#define __itt_frame_submit_v3_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_frame_begin_v3_ptr 0 +#define __itt_frame_end_v3_ptr 0 +#define __itt_frame_submit_v3_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} frames group */ +/** @endcond */ + +/** + * @defgroup taskgroup Task Group + * @ingroup public + * Task Group + * @{ + */ +/** + * @ingroup task_groups + * @brief Denotes a task_group instance. + * Successive calls to __itt_task_group with the same ID are ignored. + * @param[in] domain The domain for this task_group instance + * @param[in] id The instance ID for this task_group instance. Must not be __itt_null. + * @param[in] parentid The instance ID for the parent of this task_group instance, or __itt_null. + * @param[in] name The name of this task_group + */ +void ITTAPI __itt_task_group(const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, task_group, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name)) +#define __itt_task_group(d,x,y,z) ITTNOTIFY_VOID_D3(task_group,d,x,y,z) +#define __itt_task_group_ptr ITTNOTIFY_NAME(task_group) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_task_group(d,x,y,z) +#define __itt_task_group_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_task_group_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} taskgroup group */ + +/** + * @defgroup tasks Tasks + * @ingroup public + * A task instance represents a piece of work performed by a particular + * thread for a period of time. A call to __itt_task_begin creates a + * task instance. This becomes the current instance for that task on that + * thread. A following call to __itt_task_end on the same thread ends the + * instance. There may be multiple simultaneous instances of tasks with the + * same name on different threads. If an ID is specified, the task instance + * receives that ID. Nested tasks are allowed. + * + * Note: The task is defined by the bracketing of __itt_task_begin and + * __itt_task_end on the same thread. If some scheduling mechanism causes + * task switching (the thread executes a different user task) or task + * switching (the user task switches to a different thread) then this breaks + * the notion of current instance. Additional API calls are required to + * deal with that possibility. + * @{ + */ + +/** + * @ingroup tasks + * @brief Begin a task instance. + * @param[in] domain The domain for this task + * @param[in] taskid The instance ID for this task instance, or __itt_null + * @param[in] parentid The parent instance to which this task instance belongs, or __itt_null + * @param[in] name The name of this task + */ +void ITTAPI __itt_task_begin(const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name); + +/** + * @ingroup tasks + * @brief Begin a task instance. + * @param[in] domain The domain for this task + * @param[in] taskid The identifier for this task instance (may be 0) + * @param[in] parentid The parent of this task (may be 0) + * @param[in] fn The pointer to the function you are tracing + */ +void ITTAPI __itt_task_begin_fn(const __itt_domain *domain, __itt_id taskid, __itt_id parentid, void* fn); + +/** + * @ingroup tasks + * @brief End the current task instance. + * @param[in] domain The domain for this task + */ +void ITTAPI __itt_task_end(const __itt_domain *domain); + +/** + * @ingroup tasks + * @brief Begin an overlapped task instance. + * @param[in] domain The domain for this task. + * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null. + * @param[in] parentid The parent of this task, or __itt_null. + * @param[in] name The name of this task. + */ +void ITTAPI __itt_task_begin_overlapped(const __itt_domain* domain, __itt_id taskid, __itt_id parentid, __itt_string_handle* name); + +/** + * @ingroup tasks + * @brief End an overlapped task instance. + * @param[in] domain The domain for this task + * @param[in] taskid Explicit ID of finished task + */ +void ITTAPI __itt_task_end_overlapped(const __itt_domain *domain, __itt_id taskid); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, task_begin, (const __itt_domain *domain, __itt_id id, __itt_id parentid, __itt_string_handle *name)) +ITT_STUBV(ITTAPI, void, task_begin_fn, (const __itt_domain *domain, __itt_id id, __itt_id parentid, void* fn)) +ITT_STUBV(ITTAPI, void, task_end, (const __itt_domain *domain)) +ITT_STUBV(ITTAPI, void, task_begin_overlapped, (const __itt_domain *domain, __itt_id taskid, __itt_id parentid, __itt_string_handle *name)) +ITT_STUBV(ITTAPI, void, task_end_overlapped, (const __itt_domain *domain, __itt_id taskid)) +#define __itt_task_begin(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin,d,x,y,z) +#define __itt_task_begin_ptr ITTNOTIFY_NAME(task_begin) +#define __itt_task_begin_fn(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin_fn,d,x,y,z) +#define __itt_task_begin_fn_ptr ITTNOTIFY_NAME(task_begin_fn) +#define __itt_task_end(d) ITTNOTIFY_VOID_D0(task_end,d) +#define __itt_task_end_ptr ITTNOTIFY_NAME(task_end) +#define __itt_task_begin_overlapped(d,x,y,z) ITTNOTIFY_VOID_D3(task_begin_overlapped,d,x,y,z) +#define __itt_task_begin_overlapped_ptr ITTNOTIFY_NAME(task_begin_overlapped) +#define __itt_task_end_overlapped(d,x) ITTNOTIFY_VOID_D1(task_end_overlapped,d,x) +#define __itt_task_end_overlapped_ptr ITTNOTIFY_NAME(task_end_overlapped) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_task_begin(domain,id,parentid,name) +#define __itt_task_begin_ptr 0 +#define __itt_task_begin_fn(domain,id,parentid,fn) +#define __itt_task_begin_fn_ptr 0 +#define __itt_task_end(domain) +#define __itt_task_end_ptr 0 +#define __itt_task_begin_overlapped(domain,taskid,parentid,name) +#define __itt_task_begin_overlapped_ptr 0 +#define __itt_task_end_overlapped(domain,taskid) +#define __itt_task_end_overlapped_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_task_begin_ptr 0 +#define __itt_task_begin_fn_ptr 0 +#define __itt_task_end_ptr 0 +#define __itt_task_begin_overlapped_ptr 0 +#define __itt_task_end_overlapped_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} tasks group */ + + +/** + * @defgroup markers Markers + * Markers represent a single discreet event in time. Markers have a scope, + * described by an enumerated type __itt_scope. Markers are created by + * the API call __itt_marker. A marker instance can be given an ID for use in + * adding metadata. + * @{ + */ + +/** + * @brief Describes the scope of an event object in the trace. + */ +typedef enum +{ + __itt_scope_unknown = 0, + __itt_scope_global, + __itt_scope_track_group, + __itt_scope_track, + __itt_scope_task, + __itt_scope_marker +} __itt_scope; + +/** @cond exclude_from_documentation */ +#define __itt_marker_scope_unknown __itt_scope_unknown +#define __itt_marker_scope_global __itt_scope_global +#define __itt_marker_scope_process __itt_scope_track_group +#define __itt_marker_scope_thread __itt_scope_track +#define __itt_marker_scope_task __itt_scope_task +/** @endcond */ + +/** + * @ingroup markers + * @brief Create a marker instance + * @param[in] domain The domain for this marker + * @param[in] id The instance ID for this marker or __itt_null + * @param[in] name The name for this marker + * @param[in] scope The scope for this marker + */ +void ITTAPI __itt_marker(const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope)) +#define __itt_marker(d,x,y,z) ITTNOTIFY_VOID_D3(marker,d,x,y,z) +#define __itt_marker_ptr ITTNOTIFY_NAME(marker) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_marker(domain,id,name,scope) +#define __itt_marker_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_marker_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} markers group */ + +/** + * @defgroup metadata Metadata + * The metadata API is used to attach extra information to named + * entities. Metadata can be attached to an identified named entity by ID, + * or to the current entity (which is always a task). + * + * Conceptually metadata has a type (what kind of metadata), a key (the + * name of the metadata), and a value (the actual data). The encoding of + * the value depends on the type of the metadata. + * + * The type of metadata is specified by an enumerated type __itt_metdata_type. + * @{ + */ + +/** + * @ingroup parameters + * @brief describes the type of metadata + */ +typedef enum { + __itt_metadata_unknown = 0, + __itt_metadata_u64, /**< Unsigned 64-bit integer */ + __itt_metadata_s64, /**< Signed 64-bit integer */ + __itt_metadata_u32, /**< Unsigned 32-bit integer */ + __itt_metadata_s32, /**< Signed 32-bit integer */ + __itt_metadata_u16, /**< Unsigned 16-bit integer */ + __itt_metadata_s16, /**< Signed 16-bit integer */ + __itt_metadata_float, /**< Signed 32-bit floating-point */ + __itt_metadata_double /**< SIgned 64-bit floating-point */ +} __itt_metadata_type; + +/** + * @ingroup parameters + * @brief Add metadata to an instance of a named entity. + * @param[in] domain The domain controlling the call + * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task + * @param[in] key The name of the metadata + * @param[in] type The type of the metadata + * @param[in] count The number of elements of the given type. If count == 0, no metadata will be added. + * @param[in] data The metadata itself +*/ +void ITTAPI __itt_metadata_add(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, metadata_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data)) +#define __itt_metadata_add(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(metadata_add,d,x,y,z,a,b) +#define __itt_metadata_add_ptr ITTNOTIFY_NAME(metadata_add) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_metadata_add(d,x,y,z,a,b) +#define __itt_metadata_add_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_metadata_add_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup parameters + * @brief Add string metadata to an instance of a named entity. + * @param[in] domain The domain controlling the call + * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task + * @param[in] key The name of the metadata + * @param[in] data The metadata itself + * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated +*/ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +void ITTAPI __itt_metadata_str_addA(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length); +void ITTAPI __itt_metadata_str_addW(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t *data, size_t length); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_metadata_str_add __itt_metadata_str_addW +# define __itt_metadata_str_add_ptr __itt_metadata_str_addW_ptr +#else /* UNICODE */ +# define __itt_metadata_str_add __itt_metadata_str_addA +# define __itt_metadata_str_add_ptr __itt_metadata_str_addA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +void ITTAPI __itt_metadata_str_add(const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length); +#endif + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, metadata_str_addA, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length)) +ITT_STUBV(ITTAPI, void, metadata_str_addW, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t *data, size_t length)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, metadata_str_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char *data, size_t length)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_metadata_str_addA(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_addA,d,x,y,z,a) +#define __itt_metadata_str_addA_ptr ITTNOTIFY_NAME(metadata_str_addA) +#define __itt_metadata_str_addW(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_addW,d,x,y,z,a) +#define __itt_metadata_str_addW_ptr ITTNOTIFY_NAME(metadata_str_addW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_metadata_str_add(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add,d,x,y,z,a) +#define __itt_metadata_str_add_ptr ITTNOTIFY_NAME(metadata_str_add) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_metadata_str_addA(d,x,y,z,a) +#define __itt_metadata_str_addA_ptr 0 +#define __itt_metadata_str_addW(d,x,y,z,a) +#define __itt_metadata_str_addW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_metadata_str_add(d,x,y,z,a) +#define __itt_metadata_str_add_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_metadata_str_addA_ptr 0 +#define __itt_metadata_str_addW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_metadata_str_add_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup parameters + * @brief Add metadata to an instance of a named entity. + * @param[in] domain The domain controlling the call + * @param[in] scope The scope of the instance to which the metadata is to be added + + * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task + + * @param[in] key The name of the metadata + * @param[in] type The type of the metadata + * @param[in] count The number of elements of the given type. If count == 0, no metadata will be added. + * @param[in] data The metadata itself +*/ +void ITTAPI __itt_metadata_add_with_scope(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, metadata_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data)) +#define __itt_metadata_add_with_scope(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(metadata_add_with_scope,d,x,y,z,a,b) +#define __itt_metadata_add_with_scope_ptr ITTNOTIFY_NAME(metadata_add_with_scope) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_metadata_add_with_scope(d,x,y,z,a,b) +#define __itt_metadata_add_with_scope_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_metadata_add_with_scope_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup parameters + * @brief Add string metadata to an instance of a named entity. + * @param[in] domain The domain controlling the call + * @param[in] scope The scope of the instance to which the metadata is to be added + + * @param[in] id The identifier of the instance to which the metadata is to be added, or __itt_null to add to the current task + + * @param[in] key The name of the metadata + * @param[in] data The metadata itself + * @param[in] length The number of characters in the string, or -1 if the length is unknown but the string is null-terminated +*/ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +void ITTAPI __itt_metadata_str_add_with_scopeA(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length); +void ITTAPI __itt_metadata_str_add_with_scopeW(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_metadata_str_add_with_scope __itt_metadata_str_add_with_scopeW +# define __itt_metadata_str_add_with_scope_ptr __itt_metadata_str_add_with_scopeW_ptr +#else /* UNICODE */ +# define __itt_metadata_str_add_with_scope __itt_metadata_str_add_with_scopeA +# define __itt_metadata_str_add_with_scope_ptr __itt_metadata_str_add_with_scopeA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +void ITTAPI __itt_metadata_str_add_with_scope(const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length); +#endif + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeA, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length)) +ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeW, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, metadata_str_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scopeA,d,x,y,z,a) +#define __itt_metadata_str_add_with_scopeA_ptr ITTNOTIFY_NAME(metadata_str_add_with_scopeA) +#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scopeW,d,x,y,z,a) +#define __itt_metadata_str_add_with_scopeW_ptr ITTNOTIFY_NAME(metadata_str_add_with_scopeW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_metadata_str_add_with_scope(d,x,y,z,a) ITTNOTIFY_VOID_D4(metadata_str_add_with_scope,d,x,y,z,a) +#define __itt_metadata_str_add_with_scope_ptr ITTNOTIFY_NAME(metadata_str_add_with_scope) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_metadata_str_add_with_scopeA(d,x,y,z,a) +#define __itt_metadata_str_add_with_scopeA_ptr 0 +#define __itt_metadata_str_add_with_scopeW(d,x,y,z,a) +#define __itt_metadata_str_add_with_scopeW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_metadata_str_add_with_scope(d,x,y,z,a) +#define __itt_metadata_str_add_with_scope_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_metadata_str_add_with_scopeA_ptr 0 +#define __itt_metadata_str_add_with_scopeW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_metadata_str_add_with_scope_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @} metadata group */ + +/** + * @defgroup relations Relations + * Instances of named entities can be explicitly associated with other + * instances using instance IDs and the relationship API calls. + * + * @{ + */ + +/** + * @ingroup relations + * @brief The kind of relation between two instances is specified by the enumerated type __itt_relation. + * Relations between instances can be added with an API call. The relation + * API uses instance IDs. Relations can be added before or after the actual + * instances are created and persist independently of the instances. This + * is the motivation for having different lifetimes for instance IDs and + * the actual instances. + */ +typedef enum +{ + __itt_relation_is_unknown = 0, + __itt_relation_is_dependent_on, /**< "A is dependent on B" means that A cannot start until B completes */ + __itt_relation_is_sibling_of, /**< "A is sibling of B" means that A and B were created as a group */ + __itt_relation_is_parent_of, /**< "A is parent of B" means that A created B */ + __itt_relation_is_continuation_of, /**< "A is continuation of B" means that A assumes the dependencies of B */ + __itt_relation_is_child_of, /**< "A is child of B" means that A was created by B (inverse of is_parent_of) */ + __itt_relation_is_continued_by, /**< "A is continued by B" means that B assumes the dependencies of A (inverse of is_continuation_of) */ + __itt_relation_is_predecessor_to /**< "A is predecessor to B" means that B cannot start until A completes (inverse of is_dependent_on) */ +} __itt_relation; + +/** + * @ingroup relations + * @brief Add a relation to the current task instance. + * The current task instance is the head of the relation. + * @param[in] domain The domain controlling this call + * @param[in] relation The kind of relation + * @param[in] tail The ID for the tail of the relation + */ +void ITTAPI __itt_relation_add_to_current(const __itt_domain *domain, __itt_relation relation, __itt_id tail); + +/** + * @ingroup relations + * @brief Add a relation between two instance identifiers. + * @param[in] domain The domain controlling this call + * @param[in] head The ID for the head of the relation + * @param[in] relation The kind of relation + * @param[in] tail The ID for the tail of the relation + */ +void ITTAPI __itt_relation_add(const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, relation_add_to_current, (const __itt_domain *domain, __itt_relation relation, __itt_id tail)) +ITT_STUBV(ITTAPI, void, relation_add, (const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail)) +#define __itt_relation_add_to_current(d,x,y) ITTNOTIFY_VOID_D2(relation_add_to_current,d,x,y) +#define __itt_relation_add_to_current_ptr ITTNOTIFY_NAME(relation_add_to_current) +#define __itt_relation_add(d,x,y,z) ITTNOTIFY_VOID_D3(relation_add,d,x,y,z) +#define __itt_relation_add_ptr ITTNOTIFY_NAME(relation_add) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_relation_add_to_current(d,x,y) +#define __itt_relation_add_to_current_ptr 0 +#define __itt_relation_add(d,x,y,z) +#define __itt_relation_add_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_relation_add_to_current_ptr 0 +#define __itt_relation_add_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} relations group */ + +/** @cond exclude_from_documentation */ +#pragma pack(push, 8) + +typedef struct ___itt_clock_info +{ + unsigned long long clock_freq; /*!< Clock domain frequency */ + unsigned long long clock_base; /*!< Clock domain base timestamp */ +} __itt_clock_info; + +#pragma pack(pop) +/** @endcond */ + +/** @cond exclude_from_documentation */ +typedef void (ITTAPI *__itt_get_clock_info_fn)(__itt_clock_info* clock_info, void* data); +/** @endcond */ + +/** @cond exclude_from_documentation */ +#pragma pack(push, 8) + +typedef struct ___itt_clock_domain +{ + __itt_clock_info info; /*!< Most recent clock domain info */ + __itt_get_clock_info_fn fn; /*!< Callback function pointer */ + void* fn_data; /*!< Input argument for the callback function */ + int extra1; /*!< Reserved. Must be zero */ + void* extra2; /*!< Reserved. Must be zero */ + struct ___itt_clock_domain* next; +} __itt_clock_domain; + +#pragma pack(pop) +/** @endcond */ + +/** + * @ingroup clockdomains + * @brief Create a clock domain. + * Certain applications require the capability to trace their application using + * a clock domain different than the CPU, for instance the instrumentation of events + * that occur on a GPU. + * Because the set of domains is expected to be static over the application's execution time, + * there is no mechanism to destroy a domain. + * Any domain can be accessed by any thread in the process, regardless of which thread created + * the domain. This call is thread-safe. + * @param[in] fn A pointer to a callback function which retrieves alternative CPU timestamps + * @param[in] fn_data Argument for a callback function; may be NULL + */ +__itt_clock_domain* ITTAPI __itt_clock_domain_create(__itt_get_clock_info_fn fn, void* fn_data); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, __itt_clock_domain*, clock_domain_create, (__itt_get_clock_info_fn fn, void* fn_data)) +#define __itt_clock_domain_create ITTNOTIFY_DATA(clock_domain_create) +#define __itt_clock_domain_create_ptr ITTNOTIFY_NAME(clock_domain_create) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_clock_domain_create(fn,fn_data) (__itt_clock_domain*)0 +#define __itt_clock_domain_create_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_clock_domain_create_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup clockdomains + * @brief Recalculate clock domains frequences and clock base timestamps. + */ +void ITTAPI __itt_clock_domain_reset(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, clock_domain_reset, (void)) +#define __itt_clock_domain_reset ITTNOTIFY_VOID(clock_domain_reset) +#define __itt_clock_domain_reset_ptr ITTNOTIFY_NAME(clock_domain_reset) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_clock_domain_reset() +#define __itt_clock_domain_reset_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_clock_domain_reset_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup clockdomain + * @brief Create an instance of identifier. This establishes the beginning of the lifetime of + * an instance of the given ID in the trace. Once this lifetime starts, the ID can be used to + * tag named entity instances in calls such as __itt_task_begin, and to specify relationships among + * identified named entity instances, using the \ref relations APIs. + * @param[in] domain The domain controlling the execution of this call. + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + * @param[in] id The ID to create. + */ +void ITTAPI __itt_id_create_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id); + +/** + * @ingroup clockdomain + * @brief Destroy an instance of identifier. This ends the lifetime of the current instance of the + * given ID value in the trace. Any relationships that are established after this lifetime ends are + * invalid. This call must be performed before the given ID value can be reused for a different + * named entity instance. + * @param[in] domain The domain controlling the execution of this call. + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + * @param[in] id The ID to destroy. + */ +void ITTAPI __itt_id_destroy_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, id_create_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id)) +ITT_STUBV(ITTAPI, void, id_destroy_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id)) +#define __itt_id_create_ex(d,x,y,z) ITTNOTIFY_VOID_D3(id_create_ex,d,x,y,z) +#define __itt_id_create_ex_ptr ITTNOTIFY_NAME(id_create_ex) +#define __itt_id_destroy_ex(d,x,y,z) ITTNOTIFY_VOID_D3(id_destroy_ex,d,x,y,z) +#define __itt_id_destroy_ex_ptr ITTNOTIFY_NAME(id_destroy_ex) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_id_create_ex(domain,clock_domain,timestamp,id) +#define __itt_id_create_ex_ptr 0 +#define __itt_id_destroy_ex(domain,clock_domain,timestamp,id) +#define __itt_id_destroy_ex_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_id_create_ex_ptr 0 +#define __itt_id_destroy_ex_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup clockdomain + * @brief Begin a task instance. + * @param[in] domain The domain for this task + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + * @param[in] taskid The instance ID for this task instance, or __itt_null + * @param[in] parentid The parent instance to which this task instance belongs, or __itt_null + * @param[in] name The name of this task + */ +void ITTAPI __itt_task_begin_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name); + +/** + * @ingroup clockdomain + * @brief Begin a task instance. + * @param[in] domain The domain for this task + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + * @param[in] taskid The identifier for this task instance, or __itt_null + * @param[in] parentid The parent of this task, or __itt_null + * @param[in] fn The pointer to the function you are tracing + */ +void ITTAPI __itt_task_begin_fn_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, void* fn); + +/** + * @ingroup clockdomain + * @brief End the current task instance. + * @param[in] domain The domain for this task + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + */ +void ITTAPI __itt_task_end_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, task_begin_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name)) +ITT_STUBV(ITTAPI, void, task_begin_fn_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, void* fn)) +ITT_STUBV(ITTAPI, void, task_end_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp)) +#define __itt_task_begin_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(task_begin_ex,d,x,y,z,a,b) +#define __itt_task_begin_ex_ptr ITTNOTIFY_NAME(task_begin_ex) +#define __itt_task_begin_fn_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(task_begin_fn_ex,d,x,y,z,a,b) +#define __itt_task_begin_fn_ex_ptr ITTNOTIFY_NAME(task_begin_fn_ex) +#define __itt_task_end_ex(d,x,y) ITTNOTIFY_VOID_D2(task_end_ex,d,x,y) +#define __itt_task_end_ex_ptr ITTNOTIFY_NAME(task_end_ex) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_task_begin_ex(domain,clock_domain,timestamp,id,parentid,name) +#define __itt_task_begin_ex_ptr 0 +#define __itt_task_begin_fn_ex(domain,clock_domain,timestamp,id,parentid,fn) +#define __itt_task_begin_fn_ex_ptr 0 +#define __itt_task_end_ex(domain,clock_domain,timestamp) +#define __itt_task_end_ex_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_task_begin_ex_ptr 0 +#define __itt_task_begin_fn_ex_ptr 0 +#define __itt_task_end_ex_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @defgroup counters Counters + * @ingroup public + * Counters are user-defined objects with a monotonically increasing + * value. Counter values are 64-bit unsigned integers. + * Counters have names that can be displayed in + * the tools. + * @{ + */ + +/** + * @brief opaque structure for counter identification + */ +/** @cond exclude_from_documentation */ + +typedef struct ___itt_counter* __itt_counter; + +/** + * @brief Create an unsigned 64 bits integer counter with given name/domain + * + * After __itt_counter_create() is called, __itt_counter_inc(id), __itt_counter_inc_delta(id, delta), + * __itt_counter_set_value(id, value_ptr) or __itt_counter_set_value_ex(id, clock_domain, timestamp, value_ptr) + * can be used to change the value of the counter, where value_ptr is a pointer to an unsigned 64 bits integer + * + * The call is equal to __itt_counter_create_typed(name, domain, __itt_metadata_u64) + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +__itt_counter ITTAPI __itt_counter_createA(const char *name, const char *domain); +__itt_counter ITTAPI __itt_counter_createW(const wchar_t *name, const wchar_t *domain); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_counter_create __itt_counter_createW +# define __itt_counter_create_ptr __itt_counter_createW_ptr +#else /* UNICODE */ +# define __itt_counter_create __itt_counter_createA +# define __itt_counter_create_ptr __itt_counter_createA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +__itt_counter ITTAPI __itt_counter_create(const char *name, const char *domain); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_counter, counter_createA, (const char *name, const char *domain)) +ITT_STUB(ITTAPI, __itt_counter, counter_createW, (const wchar_t *name, const wchar_t *domain)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_counter, counter_create, (const char *name, const char *domain)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_counter_createA ITTNOTIFY_DATA(counter_createA) +#define __itt_counter_createA_ptr ITTNOTIFY_NAME(counter_createA) +#define __itt_counter_createW ITTNOTIFY_DATA(counter_createW) +#define __itt_counter_createW_ptr ITTNOTIFY_NAME(counter_createW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_counter_create ITTNOTIFY_DATA(counter_create) +#define __itt_counter_create_ptr ITTNOTIFY_NAME(counter_create) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_counter_createA(name, domain) +#define __itt_counter_createA_ptr 0 +#define __itt_counter_createW(name, domain) +#define __itt_counter_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_counter_create(name, domain) +#define __itt_counter_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_counter_createA_ptr 0 +#define __itt_counter_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_counter_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Increment the unsigned 64 bits integer counter value + * + * Calling this function to non-unsigned 64 bits integer counters has no effect + */ +void ITTAPI __itt_counter_inc(__itt_counter id); + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, counter_inc, (__itt_counter id)) +#define __itt_counter_inc ITTNOTIFY_VOID(counter_inc) +#define __itt_counter_inc_ptr ITTNOTIFY_NAME(counter_inc) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_counter_inc(id) +#define __itt_counter_inc_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_counter_inc_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** + * @brief Increment the unsigned 64 bits integer counter value with x + * + * Calling this function to non-unsigned 64 bits integer counters has no effect + */ +void ITTAPI __itt_counter_inc_delta(__itt_counter id, unsigned long long value); + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, counter_inc_delta, (__itt_counter id, unsigned long long value)) +#define __itt_counter_inc_delta ITTNOTIFY_VOID(counter_inc_delta) +#define __itt_counter_inc_delta_ptr ITTNOTIFY_NAME(counter_inc_delta) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_counter_inc_delta(id, value) +#define __itt_counter_inc_delta_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_counter_inc_delta_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Decrement the unsigned 64 bits integer counter value + * + * Calling this function to non-unsigned 64 bits integer counters has no effect + */ +void ITTAPI __itt_counter_dec(__itt_counter id); + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, counter_dec, (__itt_counter id)) +#define __itt_counter_dec ITTNOTIFY_VOID(counter_dec) +#define __itt_counter_dec_ptr ITTNOTIFY_NAME(counter_dec) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_counter_dec(id) +#define __itt_counter_dec_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_counter_dec_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** + * @brief Decrement the unsigned 64 bits integer counter value with x + * + * Calling this function to non-unsigned 64 bits integer counters has no effect + */ +void ITTAPI __itt_counter_dec_delta(__itt_counter id, unsigned long long value); + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, counter_dec_delta, (__itt_counter id, unsigned long long value)) +#define __itt_counter_dec_delta ITTNOTIFY_VOID(counter_dec_delta) +#define __itt_counter_dec_delta_ptr ITTNOTIFY_NAME(counter_dec_delta) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_counter_dec_delta(id, value) +#define __itt_counter_dec_delta_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_counter_dec_delta_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup counters + * @brief Increment a counter by one. + * The first call with a given name creates a counter by that name and sets its + * value to zero. Successive calls increment the counter value. + * @param[in] domain The domain controlling the call. Counter names are not domain specific. + * The domain argument is used only to enable or disable the API calls. + * @param[in] name The name of the counter + */ +void ITTAPI __itt_counter_inc_v3(const __itt_domain *domain, __itt_string_handle *name); + +/** + * @ingroup counters + * @brief Increment a counter by the value specified in delta. + * @param[in] domain The domain controlling the call. Counter names are not domain specific. + * The domain argument is used only to enable or disable the API calls. + * @param[in] name The name of the counter + * @param[in] delta The amount by which to increment the counter + */ +void ITTAPI __itt_counter_inc_delta_v3(const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta); + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, counter_inc_v3, (const __itt_domain *domain, __itt_string_handle *name)) +ITT_STUBV(ITTAPI, void, counter_inc_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta)) +#define __itt_counter_inc_v3(d,x) ITTNOTIFY_VOID_D1(counter_inc_v3,d,x) +#define __itt_counter_inc_v3_ptr ITTNOTIFY_NAME(counter_inc_v3) +#define __itt_counter_inc_delta_v3(d,x,y) ITTNOTIFY_VOID_D2(counter_inc_delta_v3,d,x,y) +#define __itt_counter_inc_delta_v3_ptr ITTNOTIFY_NAME(counter_inc_delta_v3) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_counter_inc_v3(domain,name) +#define __itt_counter_inc_v3_ptr 0 +#define __itt_counter_inc_delta_v3(domain,name,delta) +#define __itt_counter_inc_delta_v3_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_counter_inc_v3_ptr 0 +#define __itt_counter_inc_delta_v3_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + + +/** + * @ingroup counters + * @brief Decrement a counter by one. + * The first call with a given name creates a counter by that name and sets its + * value to zero. Successive calls decrement the counter value. + * @param[in] domain The domain controlling the call. Counter names are not domain specific. + * The domain argument is used only to enable or disable the API calls. + * @param[in] name The name of the counter + */ +void ITTAPI __itt_counter_dec_v3(const __itt_domain *domain, __itt_string_handle *name); + +/** + * @ingroup counters + * @brief Decrement a counter by the value specified in delta. + * @param[in] domain The domain controlling the call. Counter names are not domain specific. + * The domain argument is used only to enable or disable the API calls. + * @param[in] name The name of the counter + * @param[in] delta The amount by which to decrement the counter + */ +void ITTAPI __itt_counter_dec_delta_v3(const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta); + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, counter_dec_v3, (const __itt_domain *domain, __itt_string_handle *name)) +ITT_STUBV(ITTAPI, void, counter_dec_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long delta)) +#define __itt_counter_dec_v3(d,x) ITTNOTIFY_VOID_D1(counter_dec_v3,d,x) +#define __itt_counter_dec_v3_ptr ITTNOTIFY_NAME(counter_dec_v3) +#define __itt_counter_dec_delta_v3(d,x,y) ITTNOTIFY_VOID_D2(counter_dec_delta_v3,d,x,y) +#define __itt_counter_dec_delta_v3_ptr ITTNOTIFY_NAME(counter_dec_delta_v3) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_counter_dec_v3(domain,name) +#define __itt_counter_dec_v3_ptr 0 +#define __itt_counter_dec_delta_v3(domain,name,delta) +#define __itt_counter_dec_delta_v3_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_counter_dec_v3_ptr 0 +#define __itt_counter_dec_delta_v3_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @} counters group */ + + +/** + * @brief Set the counter value + */ +void ITTAPI __itt_counter_set_value(__itt_counter id, void *value_ptr); + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, counter_set_value, (__itt_counter id, void *value_ptr)) +#define __itt_counter_set_value ITTNOTIFY_VOID(counter_set_value) +#define __itt_counter_set_value_ptr ITTNOTIFY_NAME(counter_set_value) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_counter_set_value(id, value_ptr) +#define __itt_counter_set_value_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_counter_set_value_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Set the counter value + */ +void ITTAPI __itt_counter_set_value_ex(__itt_counter id, __itt_clock_domain *clock_domain, unsigned long long timestamp, void *value_ptr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, counter_set_value_ex, (__itt_counter id, __itt_clock_domain *clock_domain, unsigned long long timestamp, void *value_ptr)) +#define __itt_counter_set_value_ex ITTNOTIFY_VOID(counter_set_value_ex) +#define __itt_counter_set_value_ex_ptr ITTNOTIFY_NAME(counter_set_value_ex) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_counter_set_value_ex(id, clock_domain, timestamp, value_ptr) +#define __itt_counter_set_value_ex_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_counter_set_value_ex_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Create a typed counter with given name/domain + * + * After __itt_counter_create_typed() is called, __itt_counter_inc(id), __itt_counter_inc_delta(id, delta), + * __itt_counter_set_value(id, value_ptr) or __itt_counter_set_value_ex(id, clock_domain, timestamp, value_ptr) + * can be used to change the value of the counter + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +__itt_counter ITTAPI __itt_counter_create_typedA(const char *name, const char *domain, __itt_metadata_type type); +__itt_counter ITTAPI __itt_counter_create_typedW(const wchar_t *name, const wchar_t *domain, __itt_metadata_type type); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_counter_create_typed __itt_counter_create_typedW +# define __itt_counter_create_typed_ptr __itt_counter_create_typedW_ptr +#else /* UNICODE */ +# define __itt_counter_create_typed __itt_counter_create_typedA +# define __itt_counter_create_typed_ptr __itt_counter_create_typedA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +__itt_counter ITTAPI __itt_counter_create_typed(const char *name, const char *domain, __itt_metadata_type type); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_counter, counter_create_typedA, (const char *name, const char *domain, __itt_metadata_type type)) +ITT_STUB(ITTAPI, __itt_counter, counter_create_typedW, (const wchar_t *name, const wchar_t *domain, __itt_metadata_type type)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_counter, counter_create_typed, (const char *name, const char *domain, __itt_metadata_type type)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_counter_create_typedA ITTNOTIFY_DATA(counter_create_typedA) +#define __itt_counter_create_typedA_ptr ITTNOTIFY_NAME(counter_create_typedA) +#define __itt_counter_create_typedW ITTNOTIFY_DATA(counter_create_typedW) +#define __itt_counter_create_typedW_ptr ITTNOTIFY_NAME(counter_create_typedW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_counter_create_typed ITTNOTIFY_DATA(counter_create_typed) +#define __itt_counter_create_typed_ptr ITTNOTIFY_NAME(counter_create_typed) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_counter_create_typedA(name, domain, type) +#define __itt_counter_create_typedA_ptr 0 +#define __itt_counter_create_typedW(name, domain, type) +#define __itt_counter_create_typedW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_counter_create_typed(name, domain, type) +#define __itt_counter_create_typed_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_counter_create_typedA_ptr 0 +#define __itt_counter_create_typedW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_counter_create_typed_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Destroy the counter identified by the pointer previously returned by __itt_counter_create() or + * __itt_counter_create_typed() + */ +void ITTAPI __itt_counter_destroy(__itt_counter id); + +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, counter_destroy, (__itt_counter id)) +#define __itt_counter_destroy ITTNOTIFY_VOID(counter_destroy) +#define __itt_counter_destroy_ptr ITTNOTIFY_NAME(counter_destroy) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_counter_destroy(id) +#define __itt_counter_destroy_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_counter_destroy_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} counters group */ + +/** + * @ingroup markers + * @brief Create a marker instance. + * @param[in] domain The domain for this marker + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + * @param[in] id The instance ID for this marker, or __itt_null + * @param[in] name The name for this marker + * @param[in] scope The scope for this marker + */ +void ITTAPI __itt_marker_ex(const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, marker_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope)) +#define __itt_marker_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(marker_ex,d,x,y,z,a,b) +#define __itt_marker_ex_ptr ITTNOTIFY_NAME(marker_ex) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_marker_ex(domain,clock_domain,timestamp,id,name,scope) +#define __itt_marker_ex_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_marker_ex_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @ingroup clockdomain + * @brief Add a relation to the current task instance. + * The current task instance is the head of the relation. + * @param[in] domain The domain controlling this call + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + * @param[in] relation The kind of relation + * @param[in] tail The ID for the tail of the relation + */ +void ITTAPI __itt_relation_add_to_current_ex(const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail); + +/** + * @ingroup clockdomain + * @brief Add a relation between two instance identifiers. + * @param[in] domain The domain controlling this call + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + * @param[in] head The ID for the head of the relation + * @param[in] relation The kind of relation + * @param[in] tail The ID for the tail of the relation + */ +void ITTAPI __itt_relation_add_ex(const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, relation_add_to_current_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail)) +ITT_STUBV(ITTAPI, void, relation_add_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail)) +#define __itt_relation_add_to_current_ex(d,x,y,z,a) ITTNOTIFY_VOID_D4(relation_add_to_current_ex,d,x,y,z,a) +#define __itt_relation_add_to_current_ex_ptr ITTNOTIFY_NAME(relation_add_to_current_ex) +#define __itt_relation_add_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(relation_add_ex,d,x,y,z,a,b) +#define __itt_relation_add_ex_ptr ITTNOTIFY_NAME(relation_add_ex) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_relation_add_to_current_ex(domain,clock_domain,timestame,relation,tail) +#define __itt_relation_add_to_current_ex_ptr 0 +#define __itt_relation_add_ex(domain,clock_domain,timestamp,head,relation,tail) +#define __itt_relation_add_ex_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_relation_add_to_current_ex_ptr 0 +#define __itt_relation_add_ex_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @cond exclude_from_documentation */ +typedef enum ___itt_track_group_type +{ + __itt_track_group_type_normal = 0 +} __itt_track_group_type; +/** @endcond */ + +/** @cond exclude_from_documentation */ +#pragma pack(push, 8) + +typedef struct ___itt_track_group +{ + __itt_string_handle* name; /*!< Name of the track group */ + struct ___itt_track* track; /*!< List of child tracks */ + __itt_track_group_type tgtype; /*!< Type of the track group */ + int extra1; /*!< Reserved. Must be zero */ + void* extra2; /*!< Reserved. Must be zero */ + struct ___itt_track_group* next; +} __itt_track_group; + +#pragma pack(pop) +/** @endcond */ + +/** + * @brief Placeholder for custom track types. Currently, "normal" custom track + * is the only available track type. + */ +typedef enum ___itt_track_type +{ + __itt_track_type_normal = 0 +#ifdef INTEL_ITTNOTIFY_API_PRIVATE + , __itt_track_type_queue +#endif /* INTEL_ITTNOTIFY_API_PRIVATE */ +} __itt_track_type; + +/** @cond exclude_from_documentation */ +#pragma pack(push, 8) + +typedef struct ___itt_track +{ + __itt_string_handle* name; /*!< Name of the track group */ + __itt_track_group* group; /*!< Parent group to a track */ + __itt_track_type ttype; /*!< Type of the track */ + int extra1; /*!< Reserved. Must be zero */ + void* extra2; /*!< Reserved. Must be zero */ + struct ___itt_track* next; +} __itt_track; + +#pragma pack(pop) +/** @endcond */ + +/** + * @brief Create logical track group. + */ +__itt_track_group* ITTAPI __itt_track_group_create(__itt_string_handle* name, __itt_track_group_type track_group_type); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, __itt_track_group*, track_group_create, (__itt_string_handle* name, __itt_track_group_type track_group_type)) +#define __itt_track_group_create ITTNOTIFY_DATA(track_group_create) +#define __itt_track_group_create_ptr ITTNOTIFY_NAME(track_group_create) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_track_group_create(name) (__itt_track_group*)0 +#define __itt_track_group_create_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_track_group_create_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Create logical track. + */ +__itt_track* ITTAPI __itt_track_create(__itt_track_group* track_group, __itt_string_handle* name, __itt_track_type track_type); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, __itt_track*, track_create, (__itt_track_group* track_group,__itt_string_handle* name, __itt_track_type track_type)) +#define __itt_track_create ITTNOTIFY_DATA(track_create) +#define __itt_track_create_ptr ITTNOTIFY_NAME(track_create) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_track_create(track_group,name,track_type) (__itt_track*)0 +#define __itt_track_create_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_track_create_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Set the logical track. + */ +void ITTAPI __itt_set_track(__itt_track* track); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, set_track, (__itt_track *track)) +#define __itt_set_track ITTNOTIFY_VOID(set_track) +#define __itt_set_track_ptr ITTNOTIFY_NAME(set_track) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_set_track(track) +#define __itt_set_track_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_set_track_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/* ========================================================================== */ +/** @cond exclude_from_gpa_documentation */ +/** + * @defgroup events Events + * @ingroup public + * Events group + * @{ + */ +/** @brief user event type */ +typedef int __itt_event; + +/** + * @brief Create an event notification + * @note name or namelen being null/name and namelen not matching, user event feature not enabled + * @return non-zero event identifier upon success and __itt_err otherwise + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +__itt_event LIBITTAPI __itt_event_createA(const char *name, int namelen); +__itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_event_create __itt_event_createW +# define __itt_event_create_ptr __itt_event_createW_ptr +#else +# define __itt_event_create __itt_event_createA +# define __itt_event_create_ptr __itt_event_createA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +__itt_event LIBITTAPI __itt_event_create(const char *name, int namelen); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char *name, int namelen)) +ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(LIBITTAPI, __itt_event, event_create, (const char *name, int namelen)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_event_createA ITTNOTIFY_DATA(event_createA) +#define __itt_event_createA_ptr ITTNOTIFY_NAME(event_createA) +#define __itt_event_createW ITTNOTIFY_DATA(event_createW) +#define __itt_event_createW_ptr ITTNOTIFY_NAME(event_createW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_event_create ITTNOTIFY_DATA(event_create) +#define __itt_event_create_ptr ITTNOTIFY_NAME(event_create) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_event_createA(name, namelen) (__itt_event)0 +#define __itt_event_createA_ptr 0 +#define __itt_event_createW(name, namelen) (__itt_event)0 +#define __itt_event_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_event_create(name, namelen) (__itt_event)0 +#define __itt_event_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_event_createA_ptr 0 +#define __itt_event_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_event_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an event occurrence. + * @return __itt_err upon failure (invalid event id/user event feature not enabled) + */ +int LIBITTAPI __itt_event_start(__itt_event event); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event)) +#define __itt_event_start ITTNOTIFY_DATA(event_start) +#define __itt_event_start_ptr ITTNOTIFY_NAME(event_start) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_event_start(event) (int)0 +#define __itt_event_start_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_event_start_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an event end occurrence. + * @note It is optional if events do not have durations. + * @return __itt_err upon failure (invalid event id/user event feature not enabled) + */ +int LIBITTAPI __itt_event_end(__itt_event event); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event)) +#define __itt_event_end ITTNOTIFY_DATA(event_end) +#define __itt_event_end_ptr ITTNOTIFY_NAME(event_end) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_event_end(event) (int)0 +#define __itt_event_end_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_event_end_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} events group */ + + +/** + * @defgroup arrays Arrays Visualizer + * @ingroup public + * Visualize arrays + * @{ + */ + +/** + * @enum __itt_av_data_type + * @brief Defines types of arrays data (for C/C++ intrinsic types) + */ +typedef enum +{ + __itt_e_first = 0, + __itt_e_char = 0, /* 1-byte integer */ + __itt_e_uchar, /* 1-byte unsigned integer */ + __itt_e_int16, /* 2-byte integer */ + __itt_e_uint16, /* 2-byte unsigned integer */ + __itt_e_int32, /* 4-byte integer */ + __itt_e_uint32, /* 4-byte unsigned integer */ + __itt_e_int64, /* 8-byte integer */ + __itt_e_uint64, /* 8-byte unsigned integer */ + __itt_e_float, /* 4-byte floating */ + __itt_e_double, /* 8-byte floating */ + __itt_e_last = __itt_e_double +} __itt_av_data_type; + +/** + * @brief Save an array data to a file. + * Output format is defined by the file extension. The csv and bmp formats are supported (bmp - for 2-dimensional array only). + * @param[in] data - pointer to the array data + * @param[in] rank - the rank of the array + * @param[in] dimensions - pointer to an array of integers, which specifies the array dimensions. + * The size of dimensions must be equal to the rank + * @param[in] type - the type of the array, specified as one of the __itt_av_data_type values (for intrinsic types) + * @param[in] filePath - the file path; the output format is defined by the file extension + * @param[in] columnOrder - defines how the array is stored in the linear memory. + * It should be 1 for column-major order (e.g. in FORTRAN) or 0 - for row-major order (e.g. in C). + */ + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +int ITTAPI __itt_av_saveA(void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder); +int ITTAPI __itt_av_saveW(void *data, int rank, const int *dimensions, int type, const wchar_t *filePath, int columnOrder); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_av_save __itt_av_saveW +# define __itt_av_save_ptr __itt_av_saveW_ptr +#else /* UNICODE */ +# define __itt_av_save __itt_av_saveA +# define __itt_av_save_ptr __itt_av_saveA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +int ITTAPI __itt_av_save(void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, int, av_saveA, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder)) +ITT_STUB(ITTAPI, int, av_saveW, (void *data, int rank, const int *dimensions, int type, const wchar_t *filePath, int columnOrder)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, int, av_save, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_av_saveA ITTNOTIFY_DATA(av_saveA) +#define __itt_av_saveA_ptr ITTNOTIFY_NAME(av_saveA) +#define __itt_av_saveW ITTNOTIFY_DATA(av_saveW) +#define __itt_av_saveW_ptr ITTNOTIFY_NAME(av_saveW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_av_save ITTNOTIFY_DATA(av_save) +#define __itt_av_save_ptr ITTNOTIFY_NAME(av_save) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_av_saveA(name) +#define __itt_av_saveA_ptr 0 +#define __itt_av_saveW(name) +#define __itt_av_saveW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_av_save(name) +#define __itt_av_save_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_av_saveA_ptr 0 +#define __itt_av_saveW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_av_save_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +void ITTAPI __itt_enable_attach(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, enable_attach, (void)) +#define __itt_enable_attach ITTNOTIFY_VOID(enable_attach) +#define __itt_enable_attach_ptr ITTNOTIFY_NAME(enable_attach) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_enable_attach() +#define __itt_enable_attach_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_enable_attach_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @cond exclude_from_gpa_documentation */ + +/** @} arrays group */ + +/** @endcond */ + +/** + * @brief Module load info + * This API is used to report necessary information in case of module relocation + * @param[in] start_addr - relocated module start address + * @param[in] end_addr - relocated module end address + * @param[in] path - file system path to the module + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +void ITTAPI __itt_module_loadA(void *start_addr, void *end_addr, const char *path); +void ITTAPI __itt_module_loadW(void *start_addr, void *end_addr, const wchar_t *path); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_module_load __itt_module_loadW +# define __itt_module_load_ptr __itt_module_loadW_ptr +#else /* UNICODE */ +# define __itt_module_load __itt_module_loadA +# define __itt_module_load_ptr __itt_module_loadA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +void ITTAPI __itt_module_load(void *start_addr, void *end_addr, const char *path); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, void, module_loadA, (void *start_addr, void *end_addr, const char *path)) +ITT_STUB(ITTAPI, void, module_loadW, (void *start_addr, void *end_addr, const wchar_t *path)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, void, module_load, (void *start_addr, void *end_addr, const char *path)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_module_loadA ITTNOTIFY_VOID(module_loadA) +#define __itt_module_loadA_ptr ITTNOTIFY_NAME(module_loadA) +#define __itt_module_loadW ITTNOTIFY_VOID(module_loadW) +#define __itt_module_loadW_ptr ITTNOTIFY_NAME(module_loadW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_module_load ITTNOTIFY_VOID(module_load) +#define __itt_module_load_ptr ITTNOTIFY_NAME(module_load) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_module_loadA(start_addr, end_addr, path) +#define __itt_module_loadA_ptr 0 +#define __itt_module_loadW(start_addr, end_addr, path) +#define __itt_module_loadW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_module_load(start_addr, end_addr, path) +#define __itt_module_load_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_module_loadA_ptr 0 +#define __itt_module_loadW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_module_load_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _ITTNOTIFY_H_ */ + +#ifdef INTEL_ITTNOTIFY_API_PRIVATE + +#ifndef _ITTNOTIFY_PRIVATE_ +#define _ITTNOTIFY_PRIVATE_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * @ingroup clockdomain + * @brief Begin an overlapped task instance. + * @param[in] domain The domain for this task + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + * @param[in] taskid The identifier for this task instance, *cannot* be __itt_null. + * @param[in] parentid The parent of this task, or __itt_null. + * @param[in] name The name of this task. + */ +void ITTAPI __itt_task_begin_overlapped_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name); + +/** + * @ingroup clockdomain + * @brief End an overlapped task instance. + * @param[in] domain The domain for this task + * @param[in] clock_domain The clock domain controlling the execution of this call. + * @param[in] timestamp The user defined timestamp. + * @param[in] taskid Explicit ID of finished task + */ +void ITTAPI __itt_task_end_overlapped_ex(const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, task_begin_overlapped_ex, (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid, __itt_id parentid, __itt_string_handle* name)) +ITT_STUBV(ITTAPI, void, task_end_overlapped_ex, (const __itt_domain* domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id taskid)) +#define __itt_task_begin_overlapped_ex(d,x,y,z,a,b) ITTNOTIFY_VOID_D5(task_begin_overlapped_ex,d,x,y,z,a,b) +#define __itt_task_begin_overlapped_ex_ptr ITTNOTIFY_NAME(task_begin_overlapped_ex) +#define __itt_task_end_overlapped_ex(d,x,y,z) ITTNOTIFY_VOID_D3(task_end_overlapped_ex,d,x,y,z) +#define __itt_task_end_overlapped_ex_ptr ITTNOTIFY_NAME(task_end_overlapped_ex) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_task_begin_overlapped_ex(domain,clock_domain,timestamp,taskid,parentid,name) +#define __itt_task_begin_overlapped_ex_ptr 0 +#define __itt_task_end_overlapped_ex(domain,clock_domain,timestamp,taskid) +#define __itt_task_end_overlapped_ex_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_task_begin_overlapped_ex_ptr 0 +#define __itt_task_end_overlapped_ptr 0 +#define __itt_task_end_overlapped_ex_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @defgroup makrs_internal Marks + * @ingroup internal + * Marks group + * @warning Internal API: + * - It is not shipped to outside of Intel + * - It is delivered to internal Intel teams using e-mail or SVN access only + * @{ + */ +/** @brief user mark type */ +typedef int __itt_mark_type; + +/** + * @brief Creates a user mark type with the specified name using char or Unicode string. + * @param[in] name - name of mark to create + * @return Returns a handle to the mark type + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +__itt_mark_type ITTAPI __itt_mark_createA(const char *name); +__itt_mark_type ITTAPI __itt_mark_createW(const wchar_t *name); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_mark_create __itt_mark_createW +# define __itt_mark_create_ptr __itt_mark_createW_ptr +#else /* UNICODE */ +# define __itt_mark_create __itt_mark_createA +# define __itt_mark_create_ptr __itt_mark_createA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +__itt_mark_type ITTAPI __itt_mark_create(const char *name); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_mark_type, mark_createA, (const char *name)) +ITT_STUB(ITTAPI, __itt_mark_type, mark_createW, (const wchar_t *name)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_mark_type, mark_create, (const char *name)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_mark_createA ITTNOTIFY_DATA(mark_createA) +#define __itt_mark_createA_ptr ITTNOTIFY_NAME(mark_createA) +#define __itt_mark_createW ITTNOTIFY_DATA(mark_createW) +#define __itt_mark_createW_ptr ITTNOTIFY_NAME(mark_createW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_mark_create ITTNOTIFY_DATA(mark_create) +#define __itt_mark_create_ptr ITTNOTIFY_NAME(mark_create) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_mark_createA(name) (__itt_mark_type)0 +#define __itt_mark_createA_ptr 0 +#define __itt_mark_createW(name) (__itt_mark_type)0 +#define __itt_mark_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_mark_create(name) (__itt_mark_type)0 +#define __itt_mark_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_mark_createA_ptr 0 +#define __itt_mark_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_mark_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Creates a "discrete" user mark type of the specified type and an optional parameter using char or Unicode string. + * + * - The mark of "discrete" type is placed to collection results in case of success. It appears in overtime view(s) as a special tick sign. + * - The call is "synchronous" - function returns after mark is actually added to results. + * - This function is useful, for example, to mark different phases of application + * (beginning of the next mark automatically meand end of current region). + * - Can be used together with "continuous" marks (see below) at the same collection session + * @param[in] mt - mark, created by __itt_mark_create(const char* name) function + * @param[in] parameter - string parameter of mark + * @return Returns zero value in case of success, non-zero value otherwise. + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +int ITTAPI __itt_markA(__itt_mark_type mt, const char *parameter); +int ITTAPI __itt_markW(__itt_mark_type mt, const wchar_t *parameter); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_mark __itt_markW +# define __itt_mark_ptr __itt_markW_ptr +#else /* UNICODE */ +# define __itt_mark __itt_markA +# define __itt_mark_ptr __itt_markA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +int ITTAPI __itt_mark(__itt_mark_type mt, const char *parameter); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, int, markA, (__itt_mark_type mt, const char *parameter)) +ITT_STUB(ITTAPI, int, markW, (__itt_mark_type mt, const wchar_t *parameter)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, int, mark, (__itt_mark_type mt, const char *parameter)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_markA ITTNOTIFY_DATA(markA) +#define __itt_markA_ptr ITTNOTIFY_NAME(markA) +#define __itt_markW ITTNOTIFY_DATA(markW) +#define __itt_markW_ptr ITTNOTIFY_NAME(markW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_mark ITTNOTIFY_DATA(mark) +#define __itt_mark_ptr ITTNOTIFY_NAME(mark) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_markA(mt, parameter) (int)0 +#define __itt_markA_ptr 0 +#define __itt_markW(mt, parameter) (int)0 +#define __itt_markW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_mark(mt, parameter) (int)0 +#define __itt_mark_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_markA_ptr 0 +#define __itt_markW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_mark_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Use this if necessary to create a "discrete" user event type (mark) for process + * rather then for one thread + * @see int __itt_mark(__itt_mark_type mt, const char* parameter); + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +int ITTAPI __itt_mark_globalA(__itt_mark_type mt, const char *parameter); +int ITTAPI __itt_mark_globalW(__itt_mark_type mt, const wchar_t *parameter); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_mark_global __itt_mark_globalW +# define __itt_mark_global_ptr __itt_mark_globalW_ptr +#else /* UNICODE */ +# define __itt_mark_global __itt_mark_globalA +# define __itt_mark_global_ptr __itt_mark_globalA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +int ITTAPI __itt_mark_global(__itt_mark_type mt, const char *parameter); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, int, mark_globalA, (__itt_mark_type mt, const char *parameter)) +ITT_STUB(ITTAPI, int, mark_globalW, (__itt_mark_type mt, const wchar_t *parameter)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, int, mark_global, (__itt_mark_type mt, const char *parameter)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_mark_globalA ITTNOTIFY_DATA(mark_globalA) +#define __itt_mark_globalA_ptr ITTNOTIFY_NAME(mark_globalA) +#define __itt_mark_globalW ITTNOTIFY_DATA(mark_globalW) +#define __itt_mark_globalW_ptr ITTNOTIFY_NAME(mark_globalW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_mark_global ITTNOTIFY_DATA(mark_global) +#define __itt_mark_global_ptr ITTNOTIFY_NAME(mark_global) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_mark_globalA(mt, parameter) (int)0 +#define __itt_mark_globalA_ptr 0 +#define __itt_mark_globalW(mt, parameter) (int)0 +#define __itt_mark_globalW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_mark_global(mt, parameter) (int)0 +#define __itt_mark_global_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_mark_globalA_ptr 0 +#define __itt_mark_globalW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_mark_global_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Creates an "end" point for "continuous" mark with specified name. + * + * - Returns zero value in case of success, non-zero value otherwise. + * Also returns non-zero value when preceding "begin" point for the + * mark with the same name failed to be created or not created. + * - The mark of "continuous" type is placed to collection results in + * case of success. It appears in overtime view(s) as a special tick + * sign (different from "discrete" mark) together with line from + * corresponding "begin" mark to "end" mark. + * @note Continuous marks can overlap and be nested inside each other. + * Discrete mark can be nested inside marked region + * @param[in] mt - mark, created by __itt_mark_create(const char* name) function + * @return Returns zero value in case of success, non-zero value otherwise. + */ +int ITTAPI __itt_mark_off(__itt_mark_type mt); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, int, mark_off, (__itt_mark_type mt)) +#define __itt_mark_off ITTNOTIFY_DATA(mark_off) +#define __itt_mark_off_ptr ITTNOTIFY_NAME(mark_off) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_mark_off(mt) (int)0 +#define __itt_mark_off_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_mark_off_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Use this if necessary to create an "end" point for mark of process + * @see int __itt_mark_off(__itt_mark_type mt); + */ +int ITTAPI __itt_mark_global_off(__itt_mark_type mt); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, int, mark_global_off, (__itt_mark_type mt)) +#define __itt_mark_global_off ITTNOTIFY_DATA(mark_global_off) +#define __itt_mark_global_off_ptr ITTNOTIFY_NAME(mark_global_off) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_mark_global_off(mt) (int)0 +#define __itt_mark_global_off_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_mark_global_off_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} marks group */ + +/** + * @defgroup counters_internal Counters + * @ingroup internal + * Counters group + * @{ + */ + + +/** + * @defgroup stitch Stack Stitching + * @ingroup internal + * Stack Stitching group + * @{ + */ +/** + * @brief opaque structure for counter identification + */ +typedef struct ___itt_caller *__itt_caller; + +/** + * @brief Create the stitch point e.g. a point in call stack where other stacks should be stitched to. + * The function returns a unique identifier which is used to match the cut points with corresponding stitch points. + */ +__itt_caller ITTAPI __itt_stack_caller_create(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, __itt_caller, stack_caller_create, (void)) +#define __itt_stack_caller_create ITTNOTIFY_DATA(stack_caller_create) +#define __itt_stack_caller_create_ptr ITTNOTIFY_NAME(stack_caller_create) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_stack_caller_create() (__itt_caller)0 +#define __itt_stack_caller_create_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_stack_caller_create_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Destroy the inforamtion about stitch point identified by the pointer previously returned by __itt_stack_caller_create() + */ +void ITTAPI __itt_stack_caller_destroy(__itt_caller id); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, stack_caller_destroy, (__itt_caller id)) +#define __itt_stack_caller_destroy ITTNOTIFY_VOID(stack_caller_destroy) +#define __itt_stack_caller_destroy_ptr ITTNOTIFY_NAME(stack_caller_destroy) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_stack_caller_destroy(id) +#define __itt_stack_caller_destroy_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_stack_caller_destroy_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Sets the cut point. Stack from each event which occurs after this call will be cut + * at the same stack level the function was called and stitched to the corresponding stitch point. + */ +void ITTAPI __itt_stack_callee_enter(__itt_caller id); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, stack_callee_enter, (__itt_caller id)) +#define __itt_stack_callee_enter ITTNOTIFY_VOID(stack_callee_enter) +#define __itt_stack_callee_enter_ptr ITTNOTIFY_NAME(stack_callee_enter) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_stack_callee_enter(id) +#define __itt_stack_callee_enter_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_stack_callee_enter_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief This function eliminates the cut point which was set by latest __itt_stack_callee_enter(). + */ +void ITTAPI __itt_stack_callee_leave(__itt_caller id); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, stack_callee_leave, (__itt_caller id)) +#define __itt_stack_callee_leave ITTNOTIFY_VOID(stack_callee_leave) +#define __itt_stack_callee_leave_ptr ITTNOTIFY_NAME(stack_callee_leave) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_stack_callee_leave(id) +#define __itt_stack_callee_leave_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_stack_callee_leave_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @} stitch group */ + +/* ***************************************************************************************************************************** */ + +#include + +/** @cond exclude_from_documentation */ +typedef enum __itt_error_code +{ + __itt_error_success = 0, /*!< no error */ + __itt_error_no_module = 1, /*!< module can't be loaded */ + /* %1$s -- library name; win: %2$d -- system error code; unx: %2$s -- system error message. */ + __itt_error_no_symbol = 2, /*!< symbol not found */ + /* %1$s -- library name, %2$s -- symbol name. */ + __itt_error_unknown_group = 3, /*!< unknown group specified */ + /* %1$s -- env var name, %2$s -- group name. */ + __itt_error_cant_read_env = 4, /*!< GetEnvironmentVariable() failed */ + /* %1$s -- env var name, %2$d -- system error. */ + __itt_error_env_too_long = 5, /*!< variable value too long */ + /* %1$s -- env var name, %2$d -- actual length of the var, %3$d -- max allowed length. */ + __itt_error_system = 6 /*!< pthread_mutexattr_init or pthread_mutex_init failed */ + /* %1$s -- function name, %2$d -- errno. */ +} __itt_error_code; + +typedef void (__itt_error_handler_t)(__itt_error_code code, va_list); +__itt_error_handler_t* __itt_set_error_handler(__itt_error_handler_t*); + +const char* ITTAPI __itt_api_version(void); +/** @endcond */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#define __itt_error_handler ITT_JOIN(INTEL_ITTNOTIFY_PREFIX, error_handler) +void __itt_error_handler(__itt_error_code code, va_list args); +extern const int ITTNOTIFY_NAME(err); +#define __itt_err ITTNOTIFY_NAME(err) +ITT_STUB(ITTAPI, const char*, api_version, (void)) +#define __itt_api_version ITTNOTIFY_DATA(api_version) +#define __itt_api_version_ptr ITTNOTIFY_NAME(api_version) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_api_version() (const char*)0 +#define __itt_api_version_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_api_version_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _ITTNOTIFY_PRIVATE_ */ + +#endif /* INTEL_ITTNOTIFY_API_PRIVATE */ diff --git a/js/src/vtune/ittnotify_config.h b/js/src/vtune/ittnotify_config.h index 402ec0e2a368..e8870f03bcf6 100644 --- a/js/src/vtune/ittnotify_config.h +++ b/js/src/vtune/ittnotify_config.h @@ -1,10 +1,10 @@ -/* +/* This file is provided under a dual BSD/GPLv2 license. When using or redistributing this file, you may do so under either license. GPL LICENSE SUMMARY - Copyright (c) 2005-2012 Intel Corporation. All rights reserved. + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as @@ -26,7 +26,7 @@ BSD LICENSE - Copyright (c) 2005-2012 Intel Corporation. All rights reserved. + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -54,7 +54,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + */ #ifndef _ITTNOTIFY_CONFIG_H_ #define _ITTNOTIFY_CONFIG_H_ @@ -71,11 +71,17 @@ # define ITT_OS_MAC 3 #endif /* ITT_OS_MAC */ +#ifndef ITT_OS_FREEBSD +# define ITT_OS_FREEBSD 4 +#endif /* ITT_OS_FREEBSD */ + #ifndef ITT_OS # if defined WIN32 || defined _WIN32 # define ITT_OS ITT_OS_WIN # elif defined( __APPLE__ ) && defined( __MACH__ ) # define ITT_OS ITT_OS_MAC +# elif defined( __FreeBSD__ ) +# define ITT_OS ITT_OS_FREEBSD # else # define ITT_OS ITT_OS_LINUX # endif @@ -89,12 +95,24 @@ # define ITT_PLATFORM_POSIX 2 #endif /* ITT_PLATFORM_POSIX */ +#ifndef ITT_PLATFORM_MAC +# define ITT_PLATFORM_MAC 3 +#endif /* ITT_PLATFORM_MAC */ + +#ifndef ITT_PLATFORM_FREEBSD +# define ITT_PLATFORM_FREEBSD 4 +#endif /* ITT_PLATFORM_FREEBSD */ + #ifndef ITT_PLATFORM # if ITT_OS==ITT_OS_WIN # define ITT_PLATFORM ITT_PLATFORM_WIN +# elif ITT_OS==ITT_OS_MAC +# define ITT_PLATFORM ITT_PLATFORM_MAC +# elif ITT_OS==ITT_OS_FREEBSD +# define ITT_PLATFORM ITT_PLATFORM_FREEBSD # else # define ITT_PLATFORM ITT_PLATFORM_POSIX -# endif /* _WIN32 */ +# endif #endif /* ITT_PLATFORM */ #if defined(_UNICODE) && !defined(UNICODE) @@ -111,36 +129,36 @@ #endif /* UNICODE || _UNICODE */ #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ -#ifndef CDECL +#ifndef ITTAPI_CDECL # if ITT_PLATFORM==ITT_PLATFORM_WIN -# define CDECL __cdecl +# define ITTAPI_CDECL __cdecl # else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ -# if defined _M_X64 || defined _M_AMD64 || defined __x86_64__ -# define CDECL /* not actual on x86_64 platform */ -# else /* _M_X64 || _M_AMD64 || __x86_64__ */ -# define CDECL __attribute__ ((cdecl)) -# endif /* _M_X64 || _M_AMD64 || __x86_64__ */ +# if defined _M_IX86 || defined __i386__ +# define ITTAPI_CDECL __attribute__ ((cdecl)) +# else /* _M_IX86 || __i386__ */ +# define ITTAPI_CDECL /* actual only on x86 platform */ +# endif /* _M_IX86 || __i386__ */ # endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ -#endif /* CDECL */ +#endif /* ITTAPI_CDECL */ #ifndef STDCALL # if ITT_PLATFORM==ITT_PLATFORM_WIN # define STDCALL __stdcall # else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ -# if defined _M_X64 || defined _M_AMD64 || defined __x86_64__ -# define STDCALL /* not supported on x86_64 platform */ -# else /* _M_X64 || _M_AMD64 || __x86_64__ */ +# if defined _M_IX86 || defined __i386__ # define STDCALL __attribute__ ((stdcall)) -# endif /* _M_X64 || _M_AMD64 || __x86_64__ */ +# else /* _M_IX86 || __i386__ */ +# define STDCALL /* supported only on x86 platform */ +# endif /* _M_IX86 || __i386__ */ # endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ #endif /* STDCALL */ -#define ITTAPI CDECL -#define LIBITTAPI CDECL +#define ITTAPI ITTAPI_CDECL +#define LIBITTAPI ITTAPI_CDECL /* TODO: Temporary for compatibility! */ -#define ITTAPI_CALL CDECL -#define LIBITTAPI_CALL CDECL +#define ITTAPI_CALL ITTAPI_CDECL +#define LIBITTAPI_CALL ITTAPI_CDECL #if ITT_PLATFORM==ITT_PLATFORM_WIN /* use __forceinline (VC++ specific) */ @@ -154,10 +172,11 @@ */ #ifdef __STRICT_ANSI__ #define ITT_INLINE static +#define ITT_INLINE_ATTRIBUTE __attribute__((unused)) #else /* __STRICT_ANSI__ */ #define ITT_INLINE static inline +#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused)) #endif /* __STRICT_ANSI__ */ -#define ITT_INLINE_ATTRIBUTE __attribute__ ((always_inline)) #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ /** @endcond */ @@ -169,24 +188,36 @@ # define ITT_ARCH_IA32E 2 #endif /* ITT_ARCH_IA32E */ -#ifndef ITT_ARCH_IA64 -# define ITT_ARCH_IA64 3 -#endif /* ITT_ARCH_IA64 */ +#ifndef ITT_ARCH_ARM +# define ITT_ARCH_ARM 4 +#endif /* ITT_ARCH_ARM */ + +#ifndef ITT_ARCH_PPC64 +# define ITT_ARCH_PPC64 5 +#endif /* ITT_ARCH_PPC64 */ #ifndef ITT_ARCH -# if defined _M_X64 || defined _M_AMD64 || defined __x86_64__ -# define ITT_ARCH ITT_ARCH_IA32E -# elif defined _M_IA64 || defined __ia64 -# define ITT_ARCH ITT_ARCH_IA64 -# else +# if defined _M_IX86 || defined __i386__ # define ITT_ARCH ITT_ARCH_IA32 +# elif defined _M_X64 || defined _M_AMD64 || defined __x86_64__ +# define ITT_ARCH ITT_ARCH_IA32E +# elif defined _M_IA64 || defined __ia64__ +# define ITT_ARCH ITT_ARCH_IA64 +# elif defined _M_ARM || defined __arm__ +# define ITT_ARCH ITT_ARCH_ARM +# elif defined __powerpc64__ +# define ITT_ARCH ITT_ARCH_PPC64 # endif #endif #ifdef __cplusplus # define ITT_EXTERN_C extern "C" +# define ITT_EXTERN_C_BEGIN extern "C" { +# define ITT_EXTERN_C_END } #else # define ITT_EXTERN_C /* nothing */ +# define ITT_EXTERN_C_BEGIN /* nothing */ +# define ITT_EXTERN_C_END /* nothing */ #endif /* __cplusplus */ #define ITT_TO_STR_AUX(x) #x @@ -202,7 +233,7 @@ #define ITT_MAGIC { 0xED, 0xAB, 0xAB, 0xEC, 0x0D, 0xEE, 0xDA, 0x30 } /* Replace with snapshot date YYYYMMDD for promotion build. */ -#define API_VERSION_BUILD 20111111 +#define API_VERSION_BUILD 20151119 #ifndef API_VERSION_NUM #define API_VERSION_NUM 0.0.0 @@ -227,6 +258,9 @@ typedef CRITICAL_SECTION mutex_t; #ifndef _GNU_SOURCE #define _GNU_SOURCE 1 /* need for PTHREAD_MUTEX_RECURSIVE */ #endif /* _GNU_SOURCE */ +#ifndef __USE_UNIX98 +#define __USE_UNIX98 1 /* need for PTHREAD_MUTEX_RECURSIVE, on SLES11.1 with gcc 4.3.4 wherein pthread.h missing dependency on __USE_XOPEN2K8 */ +#endif /*__USE_UNIX98*/ #include typedef void* lib_t; typedef pthread_t TIDT; @@ -246,8 +280,8 @@ typedef pthread_mutex_t mutex_t; #define __itt_unload_lib(handle) FreeLibrary(handle) #define __itt_system_error() (int)GetLastError() #define __itt_fstrcmp(s1, s2) lstrcmpA(s1, s2) -#define __itt_fstrlen(s) lstrlenA(s) -#define __itt_fstrcpyn(s1, s2, l) lstrcpynA(s1, s2, l) +#define __itt_fstrnlen(s, l) strnlen_s(s, l) +#define __itt_fstrcpyn(s1, b, s2, l) strncpy_s(s1, b, s2, l) #define __itt_fstrdup(s) _strdup(s) #define __itt_thread_id() GetCurrentThreadId() #define __itt_thread_yield() SwitchToThread() @@ -259,6 +293,10 @@ ITT_INLINE long __itt_interlocked_increment(volatile long* ptr) return InterlockedIncrement(ptr); } #endif /* ITT_SIMPLE_INIT */ + +#define DL_SYMBOLS (1) +#define PTHREAD_SYMBOLS (1) + #else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ #define __itt_get_proc(lib, name) dlsym(lib, name) #define __itt_mutex_init(mutex) {\ @@ -287,29 +325,42 @@ ITT_INLINE long __itt_interlocked_increment(volatile long* ptr) #define __itt_unload_lib(handle) dlclose(handle) #define __itt_system_error() errno #define __itt_fstrcmp(s1, s2) strcmp(s1, s2) -#define __itt_fstrlen(s) strlen(s) -#define __itt_fstrcpyn(s1, s2, l) strncpy(s1, s2, l) + +/* makes customer code define safe APIs for SDL_STRNLEN_S and SDL_STRNCPY_S */ +#ifdef SDL_STRNLEN_S +#define __itt_fstrnlen(s, l) SDL_STRNLEN_S(s, l) +#else +#define __itt_fstrnlen(s, l) strlen(s) +#endif /* SDL_STRNLEN_S */ +#ifdef SDL_STRNCPY_S +#define __itt_fstrcpyn(s1, b, s2, l) SDL_STRNCPY_S(s1, b, s2, l) +#else +#define __itt_fstrcpyn(s1, b, s2, l) strncpy(s1, s2, l) +#endif /* SDL_STRNCPY_S */ + #define __itt_fstrdup(s) strdup(s) #define __itt_thread_id() pthread_self() #define __itt_thread_yield() sched_yield() #if ITT_ARCH==ITT_ARCH_IA64 #ifdef __INTEL_COMPILER -#define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void*)addr, val) +#define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void *)addr, val) #else /* __INTEL_COMPILER */ -/* TODO: Add Support for not Intel compilers for IA64 */ +/* TODO: Add Support for not Intel compilers for IA-64 architecture */ #endif /* __INTEL_COMPILER */ -#else /* ITT_ARCH!=ITT_ARCH_IA64 */ +#elif ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_IA32E /* ITT_ARCH!=ITT_ARCH_IA64 */ ITT_INLINE long __TBB_machine_fetchadd4(volatile void* ptr, long addend) ITT_INLINE_ATTRIBUTE; ITT_INLINE long __TBB_machine_fetchadd4(volatile void* ptr, long addend) { long result; __asm__ __volatile__("lock\nxadd %0,%1" - : "=r"(result),"=m"(*(long*)ptr) - : "0"(addend), "m"(*(long*)ptr) + : "=r"(result),"=m"(*(int*)ptr) + : "0"(addend), "m"(*(int*)ptr) : "memory"); return result; } +#elif ITT_ARCH==ITT_ARCH_ARM || ITT_ARCH==ITT_ARCH_PPC64 +#define __TBB_machine_fetchadd4(addr, val) __sync_fetch_and_add(addr, val) #endif /* ITT_ARCH==ITT_ARCH_IA64 */ #ifndef ITT_SIMPLE_INIT ITT_INLINE long @@ -319,6 +370,22 @@ ITT_INLINE long __itt_interlocked_increment(volatile long* ptr) return __TBB_machine_fetchadd4(ptr, 1) + 1L; } #endif /* ITT_SIMPLE_INIT */ + +void* dlopen(const char*, int) __attribute__((weak)); +void* dlsym(void*, const char*) __attribute__((weak)); +int dlclose(void*) __attribute__((weak)); +#define DL_SYMBOLS (dlopen && dlsym && dlclose) + +int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*) __attribute__((weak)); +int pthread_mutex_lock(pthread_mutex_t*) __attribute__((weak)); +int pthread_mutex_unlock(pthread_mutex_t*) __attribute__((weak)); +int pthread_mutex_destroy(pthread_mutex_t*) __attribute__((weak)); +int pthread_mutexattr_init(pthread_mutexattr_t*) __attribute__((weak)); +int pthread_mutexattr_settype(pthread_mutexattr_t*, int) __attribute__((weak)); +int pthread_mutexattr_destroy(pthread_mutexattr_t*) __attribute__((weak)); +pthread_t pthread_self(void) __attribute__((weak)); +#define PTHREAD_SYMBOLS (pthread_mutex_init && pthread_mutex_lock && pthread_mutex_unlock && pthread_mutex_destroy && pthread_mutexattr_init && pthread_mutexattr_settype && pthread_mutexattr_destroy && pthread_self) + #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ typedef enum { @@ -348,7 +415,7 @@ typedef struct ___itt_thread_info struct ___itt_thread_info* next; } __itt_thread_info; -#include "ittnotify_types.h" /* For __itt_group_id definition */ +#include "vtune/ittnotify_types.h" /* For __itt_group_id definition */ typedef struct ___itt_api_info_20101001 { @@ -367,6 +434,27 @@ typedef struct ___itt_api_info __itt_group_id group; } __itt_api_info; +typedef struct __itt_counter_info +{ + const char* nameA; /*!< Copy of original name in ASCII. */ +#if defined(UNICODE) || defined(_UNICODE) + const wchar_t* nameW; /*!< Copy of original name in UNICODE. */ +#else /* UNICODE || _UNICODE */ + void* nameW; +#endif /* UNICODE || _UNICODE */ + const char* domainA; /*!< Copy of original name in ASCII. */ +#if defined(UNICODE) || defined(_UNICODE) + const wchar_t* domainW; /*!< Copy of original name in UNICODE. */ +#else /* UNICODE || _UNICODE */ + void* domainW; +#endif /* UNICODE || _UNICODE */ + unsigned type; + long index; + int extra1; /*!< Reserved to the runtime */ + void* extra2; /*!< Reserved to the runtime */ + struct __itt_counter_info* next; +} __itt_counter_info_t; + struct ___itt_domain; struct ___itt_string_handle; @@ -390,6 +478,7 @@ typedef struct ___itt_global struct ___itt_domain* domain_list; struct ___itt_string_handle* string_list; __itt_collection_state state; + __itt_counter_info_t* counter_list; } __itt_global; #pragma pack(pop) @@ -431,7 +520,7 @@ typedef struct ___itt_global #define NEW_DOMAIN_W(gptr,h,h_tail,name) { \ h = (__itt_domain*)malloc(sizeof(__itt_domain)); \ if (h != NULL) { \ - h->flags = 0; /* domain is disabled by default */ \ + h->flags = 1; /* domain is enabled by default */ \ h->nameA = NULL; \ h->nameW = name ? _wcsdup(name) : NULL; \ h->extra1 = 0; /* reserved */ \ @@ -447,7 +536,7 @@ typedef struct ___itt_global #define NEW_DOMAIN_A(gptr,h,h_tail,name) { \ h = (__itt_domain*)malloc(sizeof(__itt_domain)); \ if (h != NULL) { \ - h->flags = 0; /* domain is disabled by default */ \ + h->flags = 1; /* domain is enabled by default */ \ h->nameA = name ? __itt_fstrdup(name) : NULL; \ h->nameW = NULL; \ h->extra1 = 0; /* reserved */ \ @@ -490,4 +579,38 @@ typedef struct ___itt_global } \ } +#define NEW_COUNTER_W(gptr,h,h_tail,name,domain,type) { \ + h = (__itt_counter_info_t*)malloc(sizeof(__itt_counter_info_t)); \ + if (h != NULL) { \ + h->nameA = NULL; \ + h->nameW = name ? _wcsdup(name) : NULL; \ + h->domainA = NULL; \ + h->domainW = name ? _wcsdup(domain) : NULL; \ + h->type = type; \ + h->index = 0; \ + h->next = NULL; \ + if (h_tail == NULL) \ + (gptr)->counter_list = h; \ + else \ + h_tail->next = h; \ + } \ +} + +#define NEW_COUNTER_A(gptr,h,h_tail,name,domain,type) { \ + h = (__itt_counter_info_t*)malloc(sizeof(__itt_counter_info_t)); \ + if (h != NULL) { \ + h->nameA = name ? __itt_fstrdup(name) : NULL; \ + h->nameW = NULL; \ + h->domainA = domain ? __itt_fstrdup(domain) : NULL; \ + h->domainW = NULL; \ + h->type = type; \ + h->index = 0; \ + h->next = NULL; \ + if (h_tail == NULL) \ + (gptr)->counter_list = h; \ + else \ + h_tail->next = h; \ + } \ +} + #endif /* _ITTNOTIFY_CONFIG_H_ */ diff --git a/js/src/vtune/ittnotify_static.c b/js/src/vtune/ittnotify_static.c new file mode 100644 index 000000000000..41a5ca69ea40 --- /dev/null +++ b/js/src/vtune/ittnotify_static.c @@ -0,0 +1,1236 @@ +/* + This file is provided under a dual BSD/GPLv2 license. When using or + redistributing this file, you may do so under either license. + + GPL LICENSE SUMMARY + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + The full GNU General Public License is included in this distribution + in the file called LICENSE.GPL. + + Contact Information: + http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ + + BSD LICENSE + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "vtune/ittnotify_config.h" + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define PATH_MAX 512 +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +#include +#include +#include +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#include +#include +#include +#include + +#define INTEL_NO_MACRO_BODY +#define INTEL_ITTNOTIFY_API_PRIVATE +#include "vtune/ittnotify.h" +#include "vtune/legacy/ittnotify.h" + +#include "vtune/disable_warnings.h" + +static const char api_version[] = API_VERSION "\0\n@(#) $Revision: 481659 $\n"; + +#define _N_(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n) + +#if ITT_OS==ITT_OS_WIN +static const char* ittnotify_lib_name = "libittnotify.dll"; +#elif ITT_OS==ITT_OS_LINUX || ITT_OS==ITT_OS_FREEBSD +static const char* ittnotify_lib_name = "libittnotify.so"; +#elif ITT_OS==ITT_OS_MAC +static const char* ittnotify_lib_name = "libittnotify.dylib"; +#else +#error Unsupported or unknown OS. +#endif + +#ifdef __ANDROID__ +#include +#include +#include +#include +#include +#include +#include + +#ifdef ITT_ANDROID_LOG + #define ITT_ANDROID_LOG_TAG "INTEL_VTUNE_USERAPI" + #define ITT_ANDROID_LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, ITT_ANDROID_LOG_TAG, __VA_ARGS__)) + #define ITT_ANDROID_LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, ITT_ANDROID_LOG_TAG, __VA_ARGS__)) + #define ITT_ANDROID_LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR,ITT_ANDROID_LOG_TAG, __VA_ARGS__)) + #define ITT_ANDROID_LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG,ITT_ANDROID_LOG_TAG, __VA_ARGS__)) +#else + #define ITT_ANDROID_LOGI(...) + #define ITT_ANDROID_LOGW(...) + #define ITT_ANDROID_LOGE(...) + #define ITT_ANDROID_LOGD(...) +#endif + +/* default location of userapi collector on Android */ +#define ANDROID_ITTNOTIFY_DEFAULT_PATH_MASK(x) "/data/data/com.intel.vtune/perfrun/lib" \ + #x "/runtime/libittnotify.so" + +#if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM +#define ANDROID_ITTNOTIFY_DEFAULT_PATH ANDROID_ITTNOTIFY_DEFAULT_PATH_MASK(32) +#else +#define ANDROID_ITTNOTIFY_DEFAULT_PATH ANDROID_ITTNOTIFY_DEFAULT_PATH_MASK(64) +#endif + +#endif + + +#ifndef LIB_VAR_NAME +#if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM +#define LIB_VAR_NAME INTEL_LIBITTNOTIFY32 +#else +#define LIB_VAR_NAME INTEL_LIBITTNOTIFY64 +#endif +#endif /* LIB_VAR_NAME */ + +#define ITT_MUTEX_INIT_AND_LOCK(p) { \ + if (PTHREAD_SYMBOLS) \ + { \ + if (!p.mutex_initialized) \ + { \ + if (__itt_interlocked_increment(&p.atomic_counter) == 1) \ + { \ + __itt_mutex_init(&p.mutex); \ + p.mutex_initialized = 1; \ + } \ + else \ + while (!p.mutex_initialized) \ + __itt_thread_yield(); \ + } \ + __itt_mutex_lock(&p.mutex); \ + } \ +} + +const int _N_(err) = 0; + +typedef int (__itt_init_ittlib_t)(const char*, __itt_group_id); + +/* this define used to control initialization function name. */ +#ifndef __itt_init_ittlib_name +ITT_EXTERN_C int _N_(init_ittlib)(const char*, __itt_group_id); +static __itt_init_ittlib_t* __itt_init_ittlib_ptr = _N_(init_ittlib); +#define __itt_init_ittlib_name __itt_init_ittlib_ptr +#endif /* __itt_init_ittlib_name */ + +typedef void (__itt_fini_ittlib_t)(void); + +/* this define used to control finalization function name. */ +#ifndef __itt_fini_ittlib_name +ITT_EXTERN_C void _N_(fini_ittlib)(void); +static __itt_fini_ittlib_t* __itt_fini_ittlib_ptr = _N_(fini_ittlib); +#define __itt_fini_ittlib_name __itt_fini_ittlib_ptr +#endif /* __itt_fini_ittlib_name */ + +/* building pointers to imported funcs */ +#undef ITT_STUBV +#undef ITT_STUB +#define ITT_STUB(api,type,name,args,params,ptr,group,format) \ +static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\ +typedef type api ITT_JOIN(_N_(name),_t) args; \ +ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END \ +static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \ +{ \ + __itt_init_ittlib_name(NULL, __itt_group_all); \ + if (ITTNOTIFY_NAME(name) && ITTNOTIFY_NAME(name) != ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init))) \ + return ITTNOTIFY_NAME(name) params; \ + else \ + return (type)0; \ +} + +#define ITT_STUBV(api,type,name,args,params,ptr,group,format) \ +static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\ +typedef type api ITT_JOIN(_N_(name),_t) args; \ +ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END \ +static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args \ +{ \ + __itt_init_ittlib_name(NULL, __itt_group_all); \ + if (ITTNOTIFY_NAME(name) && ITTNOTIFY_NAME(name) != ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init))) \ + ITTNOTIFY_NAME(name) params; \ + else \ + return; \ +} + +#undef __ITT_INTERNAL_INIT +#include "vtune/ittnotify_static.h" + +#undef ITT_STUB +#undef ITT_STUBV +#define ITT_STUB(api,type,name,args,params,ptr,group,format) \ +static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\ +typedef type api ITT_JOIN(_N_(name),_t) args; \ +ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END + +#define ITT_STUBV(api,type,name,args,params,ptr,group,format) \ +static type api ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)) args;\ +typedef type api ITT_JOIN(_N_(name),_t) args; \ +ITT_EXTERN_C_BEGIN ITT_JOIN(_N_(name),_t)* ITTNOTIFY_NAME(name) = ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)); ITT_EXTERN_C_END + +#define __ITT_INTERNAL_INIT +#include "vtune/ittnotify_static.h" +#undef __ITT_INTERNAL_INIT + +ITT_GROUP_LIST(group_list); + +#pragma pack(push, 8) + +typedef struct ___itt_group_alias +{ + const char* env_var; + __itt_group_id groups; +} __itt_group_alias; + +static __itt_group_alias group_alias[] = { + { "KMP_FOR_TPROFILE", (__itt_group_id)(__itt_group_control | __itt_group_thread | __itt_group_sync | __itt_group_mark) }, + { "KMP_FOR_TCHECK", (__itt_group_id)(__itt_group_control | __itt_group_thread | __itt_group_sync | __itt_group_fsync | __itt_group_mark | __itt_group_suppress) }, + { NULL, (__itt_group_none) }, + { api_version, (__itt_group_none) } /* !!! Just to avoid unused code elimination !!! */ +}; + +#pragma pack(pop) + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#pragma warning(push) +#pragma warning(disable: 4054) /* warning C4054: 'type cast' : from function pointer 'XXX' to data pointer 'void *' */ +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +static __itt_api_info api_list[] = { +/* Define functions with static implementation */ +#undef ITT_STUB +#undef ITT_STUBV +#define ITT_STUB(api,type,name,args,params,nameindll,group,format) { ITT_TO_STR(ITT_JOIN(__itt_,nameindll)), (void**)(void*)&ITTNOTIFY_NAME(name), (void*)(size_t)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), (void*)(size_t)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), (__itt_group_id)(group)}, +#define ITT_STUBV ITT_STUB +#define __ITT_INTERNAL_INIT +#include "vtune/ittnotify_static.h" +#undef __ITT_INTERNAL_INIT +/* Define functions without static implementation */ +#undef ITT_STUB +#undef ITT_STUBV +#define ITT_STUB(api,type,name,args,params,nameindll,group,format) {ITT_TO_STR(ITT_JOIN(__itt_,nameindll)), (void**)(void*)&ITTNOTIFY_NAME(name), (void*)(size_t)&ITT_VERSIONIZE(ITT_JOIN(_N_(name),_init)), NULL, (__itt_group_id)(group)}, +#define ITT_STUBV ITT_STUB +#include "vtune/ittnotify_static.h" + {NULL, NULL, NULL, NULL, __itt_group_none} +}; + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#pragma warning(pop) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +static const char dll_path[PATH_MAX] = { 0 }; + +/* static part descriptor which handles. all notification api attributes. */ +__itt_global _N_(_ittapi_global) = { + ITT_MAGIC, /* identification info */ + ITT_MAJOR, ITT_MINOR, API_VERSION_BUILD, /* version info */ + 0, /* api_initialized */ + 0, /* mutex_initialized */ + 0, /* atomic_counter */ + MUTEX_INITIALIZER, /* mutex */ + NULL, /* dynamic library handle */ + NULL, /* error_handler */ + (const char**)&dll_path, /* dll_path_ptr */ + (__itt_api_info*)&api_list, /* api_list_ptr */ + NULL, /* next __itt_global */ + NULL, /* thread_list */ + NULL, /* domain_list */ + NULL, /* string_list */ + __itt_collection_normal, /* collection state */ + NULL /* counter_list */ +}; + +typedef void (__itt_api_init_t)(__itt_global*, __itt_group_id); +typedef void (__itt_api_fini_t)(__itt_global*); + +/* ========================================================================= */ + +#ifdef ITT_NOTIFY_EXT_REPORT +ITT_EXTERN_C void _N_(error_handler)(__itt_error_code, va_list args); +#endif /* ITT_NOTIFY_EXT_REPORT */ + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#pragma warning(push) +#pragma warning(disable: 4055) /* warning C4055: 'type cast' : from data pointer 'void *' to function pointer 'XXX' */ +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +static void __itt_report_error(__itt_error_code code, ...) +{ + va_list args; + va_start(args, code); + if (_N_(_ittapi_global).error_handler != NULL) + { + __itt_error_handler_t* handler = (__itt_error_handler_t*)(size_t)_N_(_ittapi_global).error_handler; + handler(code, args); + } +#ifdef ITT_NOTIFY_EXT_REPORT + _N_(error_handler)(code, args); +#endif /* ITT_NOTIFY_EXT_REPORT */ + va_end(args); +} + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#pragma warning(pop) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init))(const wchar_t* name) +{ + __itt_domain *h_tail = NULL, *h = NULL; + + if (name == NULL) + { + return NULL; + } + + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); + if (_N_(_ittapi_global).api_initialized) + { + if (ITTNOTIFY_NAME(domain_createW) && ITTNOTIFY_NAME(domain_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createW),_init))) + { + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(domain_createW)(name); + } + } + for (h_tail = NULL, h = _N_(_ittapi_global).domain_list; h != NULL; h_tail = h, h = h->next) + { + if (h->nameW != NULL && !wcscmp(h->nameW, name)) break; + } + if (h == NULL) + { + NEW_DOMAIN_W(&_N_(_ittapi_global),h,h_tail,name); + } + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return h; +} + +static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init))(const char* name) +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +static __itt_domain* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init))(const char* name) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +{ + __itt_domain *h_tail = NULL, *h = NULL; + + if (name == NULL) + { + return NULL; + } + + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); + if (_N_(_ittapi_global).api_initialized) + { +#if ITT_PLATFORM==ITT_PLATFORM_WIN + if (ITTNOTIFY_NAME(domain_createA) && ITTNOTIFY_NAME(domain_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_createA),_init))) + { + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(domain_createA)(name); + } +#else + if (ITTNOTIFY_NAME(domain_create) && ITTNOTIFY_NAME(domain_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(domain_create),_init))) + { + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(domain_create)(name); + } +#endif + } + for (h_tail = NULL, h = _N_(_ittapi_global).domain_list; h != NULL; h_tail = h, h = h->next) + { + if (h->nameA != NULL && !__itt_fstrcmp(h->nameA, name)) break; + } + if (h == NULL) + { + NEW_DOMAIN_A(&_N_(_ittapi_global),h,h_tail,name); + } + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return h; +} + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init))(const wchar_t* name) +{ + __itt_string_handle *h_tail = NULL, *h = NULL; + + if (name == NULL) + { + return NULL; + } + + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); + if (_N_(_ittapi_global).api_initialized) + { + if (ITTNOTIFY_NAME(string_handle_createW) && ITTNOTIFY_NAME(string_handle_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createW),_init))) + { + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(string_handle_createW)(name); + } + } + for (h_tail = NULL, h = _N_(_ittapi_global).string_list; h != NULL; h_tail = h, h = h->next) + { + if (h->strW != NULL && !wcscmp(h->strW, name)) break; + } + if (h == NULL) + { + NEW_STRING_HANDLE_W(&_N_(_ittapi_global),h,h_tail,name); + } + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return h; +} + +static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createA),_init))(const char* name) +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +static __itt_string_handle* ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init))(const char* name) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +{ + __itt_string_handle *h_tail = NULL, *h = NULL; + + if (name == NULL) + { + return NULL; + } + + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); + if (_N_(_ittapi_global).api_initialized) + { +#if ITT_PLATFORM==ITT_PLATFORM_WIN + if (ITTNOTIFY_NAME(string_handle_createA) && ITTNOTIFY_NAME(string_handle_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_createA),_init))) + { + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(string_handle_createA)(name); + } +#else + if (ITTNOTIFY_NAME(string_handle_create) && ITTNOTIFY_NAME(string_handle_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(string_handle_create),_init))) + { + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(string_handle_create)(name); + } +#endif + } + for (h_tail = NULL, h = _N_(_ittapi_global).string_list; h != NULL; h_tail = h, h = h->next) + { + if (h->strA != NULL && !__itt_fstrcmp(h->strA, name)) break; + } + if (h == NULL) + { + NEW_STRING_HANDLE_A(&_N_(_ittapi_global),h,h_tail,name); + } + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return h; +} + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +static __itt_counter ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(counter_createW),_init))(const wchar_t *name, const wchar_t *domain) +{ + __itt_counter_info_t *h_tail = NULL, *h = NULL; + __itt_metadata_type type = __itt_metadata_u64; + + if (name == NULL) + { + return NULL; + } + + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); + if (_N_(_ittapi_global).api_initialized) + { + if (ITTNOTIFY_NAME(counter_createW) && ITTNOTIFY_NAME(counter_createW) != ITT_VERSIONIZE(ITT_JOIN(_N_(counter_createW),_init))) + { + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(counter_createW)(name, domain); + } + } + for (h_tail = NULL, h = _N_(_ittapi_global).counter_list; h != NULL; h_tail = h, h = h->next) + { + if (h->nameW != NULL && h->type == type && !wcscmp(h->nameW, name) && ((h->domainW == NULL && domain == NULL) || + (h->domainW != NULL && domain != NULL && !wcscmp(h->domainW, domain)))) break; + + } + if (h == NULL) + { + NEW_COUNTER_W(&_N_(_ittapi_global),h,h_tail,name,domain,type); + } + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return (__itt_counter)h; +} + +static __itt_counter ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(counter_createA),_init))(const char *name, const char *domain) +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +static __itt_counter ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(counter_create),_init))(const char *name, const char *domain) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +{ + __itt_counter_info_t *h_tail = NULL, *h = NULL; + __itt_metadata_type type = __itt_metadata_u64; + + if (name == NULL) + { + return NULL; + } + + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); + if (_N_(_ittapi_global).api_initialized) + { +#if ITT_PLATFORM==ITT_PLATFORM_WIN + if (ITTNOTIFY_NAME(counter_createA) && ITTNOTIFY_NAME(counter_createA) != ITT_VERSIONIZE(ITT_JOIN(_N_(counter_createA),_init))) + { + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(counter_createA)(name, domain); + } +#else + if (ITTNOTIFY_NAME(counter_create) && ITTNOTIFY_NAME(counter_create) != ITT_VERSIONIZE(ITT_JOIN(_N_(counter_create),_init))) + { + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(counter_create)(name, domain); + } +#endif + } + for (h_tail = NULL, h = _N_(_ittapi_global).counter_list; h != NULL; h_tail = h, h = h->next) + { + if (h->nameA != NULL && h->type == type && !__itt_fstrcmp(h->nameA, name) && ((h->domainA == NULL && domain == NULL) || + (h->domainA != NULL && domain != NULL && !__itt_fstrcmp(h->domainA, domain)))) break; + } + if (h == NULL) + { + NEW_COUNTER_A(&_N_(_ittapi_global),h,h_tail,name,domain,type); + } + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return (__itt_counter)h; +} + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +static __itt_counter ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(counter_create_typedW),_init))(const wchar_t *name, const wchar_t *domain, __itt_metadata_type type) +{ + __itt_counter_info_t *h_tail = NULL, *h = NULL; + + if (name == NULL) + { + return NULL; + } + + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); + if (_N_(_ittapi_global).api_initialized) + { + if (ITTNOTIFY_NAME(counter_create_typedW) && ITTNOTIFY_NAME(counter_create_typedW) != ITT_VERSIONIZE(ITT_JOIN(_N_(counter_create_typedW),_init))) + { + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(counter_create_typedW)(name, domain, type); + } + } + for (h_tail = NULL, h = _N_(_ittapi_global).counter_list; h != NULL; h_tail = h, h = h->next) + { + if (h->nameW != NULL && h->type == type && !wcscmp(h->nameW, name) && ((h->domainW == NULL && domain == NULL) || + (h->domainW != NULL && domain != NULL && !wcscmp(h->domainW, domain)))) break; + + } + if (h == NULL) + { + NEW_COUNTER_W(&_N_(_ittapi_global),h,h_tail,name,domain,type); + } + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return (__itt_counter)h; +} + +static __itt_counter ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(counter_create_typedA),_init))(const char *name, const char *domain, __itt_metadata_type type) +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +static __itt_counter ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(counter_create_typed),_init))(const char *name, const char *domain, __itt_metadata_type type) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +{ + __itt_counter_info_t *h_tail = NULL, *h = NULL; + + if (name == NULL) + { + return NULL; + } + + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); + if (_N_(_ittapi_global).api_initialized) + { +#if ITT_PLATFORM==ITT_PLATFORM_WIN + if (ITTNOTIFY_NAME(counter_create_typedA) && ITTNOTIFY_NAME(counter_create_typedA) != ITT_VERSIONIZE(ITT_JOIN(_N_(counter_create_typedA),_init))) + { + __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(counter_create_typedA)(name, domain, type); + } +#else + if (ITTNOTIFY_NAME(counter_create_typed) && ITTNOTIFY_NAME(counter_create_typed) != ITT_VERSIONIZE(ITT_JOIN(_N_(counter_create_typed),_init))) + { + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return ITTNOTIFY_NAME(counter_create_typed)(name, domain, type); + } +#endif + } + for (h_tail = NULL, h = _N_(_ittapi_global).counter_list; h != NULL; h_tail = h, h = h->next) + { + if (h->nameA != NULL && h->type == type && !__itt_fstrcmp(h->nameA, name) && ((h->domainA == NULL && domain == NULL) || + (h->domainA != NULL && domain != NULL && !__itt_fstrcmp(h->domainA, domain)))) break; + } + if (h == NULL) + { + NEW_COUNTER_A(&_N_(_ittapi_global),h,h_tail,name,domain,type); + } + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + return (__itt_counter)h; +} + +/* -------------------------------------------------------------------------- */ + +static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init))(void) +{ + if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL) + { + __itt_init_ittlib_name(NULL, __itt_group_all); + } + if (ITTNOTIFY_NAME(pause) && ITTNOTIFY_NAME(pause) != ITT_VERSIONIZE(ITT_JOIN(_N_(pause),_init))) + { + ITTNOTIFY_NAME(pause)(); + } + else + { + _N_(_ittapi_global).state = __itt_collection_paused; + } +} + +static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init))(void) +{ + if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL) + { + __itt_init_ittlib_name(NULL, __itt_group_all); + } + if (ITTNOTIFY_NAME(resume) && ITTNOTIFY_NAME(resume) != ITT_VERSIONIZE(ITT_JOIN(_N_(resume),_init))) + { + ITTNOTIFY_NAME(resume)(); + } + else + { + _N_(_ittapi_global).state = __itt_collection_normal; + } +} + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(const wchar_t* name) +{ + if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL) + { + __itt_init_ittlib_name(NULL, __itt_group_all); + } + if (ITTNOTIFY_NAME(thread_set_nameW) && ITTNOTIFY_NAME(thread_set_nameW) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))) + { + ITTNOTIFY_NAME(thread_set_nameW)(name); + } +} + +static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setW),_init))(const wchar_t* name, int namelen) +{ + (void)namelen; + ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameW),_init))(name); + return 0; +} + +static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(const char* name) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(const char* name) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +{ + if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL) + { + __itt_init_ittlib_name(NULL, __itt_group_all); + } +#if ITT_PLATFORM==ITT_PLATFORM_WIN + if (ITTNOTIFY_NAME(thread_set_nameA) && ITTNOTIFY_NAME(thread_set_nameA) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))) + { + ITTNOTIFY_NAME(thread_set_nameA)(name); + } +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + if (ITTNOTIFY_NAME(thread_set_name) && ITTNOTIFY_NAME(thread_set_name) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))) + { + ITTNOTIFY_NAME(thread_set_name)(name); + } +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +} + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_setA),_init))(const char* name, int namelen) +{ + (void)namelen; + ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_nameA),_init))(name); + return 0; +} +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +static int ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_name_set),_init))(const char* name, int namelen) +{ + (void)namelen; + ITT_VERSIONIZE(ITT_JOIN(_N_(thread_set_name),_init))(name); + return 0; +} +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))(void) +{ + if (!_N_(_ittapi_global).api_initialized && _N_(_ittapi_global).thread_list == NULL) + { + __itt_init_ittlib_name(NULL, __itt_group_all); + } + if (ITTNOTIFY_NAME(thread_ignore) && ITTNOTIFY_NAME(thread_ignore) != ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))) + { + ITTNOTIFY_NAME(thread_ignore)(); + } +} + +static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(thr_ignore),_init))(void) +{ + ITT_VERSIONIZE(ITT_JOIN(_N_(thread_ignore),_init))(); +} + +static void ITTAPI ITT_VERSIONIZE(ITT_JOIN(_N_(enable_attach),_init))(void) +{ +#ifdef __ANDROID__ + /* + * if LIB_VAR_NAME env variable were set before then stay previous value + * else set default path + */ + setenv(ITT_TO_STR(LIB_VAR_NAME), ANDROID_ITTNOTIFY_DEFAULT_PATH, 0); +#endif +} + +/* -------------------------------------------------------------------------- */ + +static const char* __itt_fsplit(const char* s, const char* sep, const char** out, int* len) +{ + int i; + int j; + + if (!s || !sep || !out || !len) + return NULL; + + for (i = 0; s[i]; i++) + { + int b = 0; + for (j = 0; sep[j]; j++) + if (s[i] == sep[j]) + { + b = 1; + break; + } + if (!b) + break; + } + + if (!s[i]) + return NULL; + + *len = 0; + *out = &s[i]; + + for (; s[i]; i++, (*len)++) + { + int b = 0; + for (j = 0; sep[j]; j++) + if (s[i] == sep[j]) + { + b = 1; + break; + } + if (b) + break; + } + + for (; s[i]; i++) + { + int b = 0; + for (j = 0; sep[j]; j++) + if (s[i] == sep[j]) + { + b = 1; + break; + } + if (!b) + break; + } + + return &s[i]; +} + +/* This function return value of env variable that placed into static buffer. + * !!! The same static buffer is used for subsequent calls. !!! + * This was done to aviod dynamic allocation for few calls. + * Actually we need this function only four times. + */ +static const char* __itt_get_env_var(const char* name) +{ +#define MAX_ENV_VALUE_SIZE 4086 + static char env_buff[MAX_ENV_VALUE_SIZE]; + static char* env_value = (char*)env_buff; + + if (name != NULL) + { +#if ITT_PLATFORM==ITT_PLATFORM_WIN + size_t max_len = MAX_ENV_VALUE_SIZE - (size_t)(env_value - env_buff); + DWORD rc = GetEnvironmentVariableA(name, env_value, (DWORD)max_len); + if (rc >= max_len) + __itt_report_error(__itt_error_env_too_long, name, (size_t)rc - 1, (size_t)(max_len - 1)); + else if (rc > 0) + { + const char* ret = (const char*)env_value; + env_value += rc + 1; + return ret; + } + else + { + /* If environment variable is empty, GetEnvirornmentVariables() + * returns zero (number of characters (not including terminating null), + * and GetLastError() returns ERROR_SUCCESS. */ + DWORD err = GetLastError(); + if (err == ERROR_SUCCESS) + return env_value; + + if (err != ERROR_ENVVAR_NOT_FOUND) + __itt_report_error(__itt_error_cant_read_env, name, (int)err); + } +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ + char* env = getenv(name); + if (env != NULL) + { + size_t len = __itt_fstrnlen(env, MAX_ENV_VALUE_SIZE); + size_t max_len = MAX_ENV_VALUE_SIZE - (size_t)(env_value - env_buff); + if (len < max_len) + { + const char* ret = (const char*)env_value; + __itt_fstrcpyn(env_value, max_len, env, len + 1); + env_value += len + 1; + return ret; + } else + __itt_report_error(__itt_error_env_too_long, name, (size_t)len, (size_t)(max_len - 1)); + } +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + } + return NULL; +} + +static const char* __itt_get_lib_name(void) +{ + const char* lib_name = __itt_get_env_var(ITT_TO_STR(LIB_VAR_NAME)); + +#ifdef __ANDROID__ + if (lib_name == NULL) + { + +#if ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_ARM + const char* const marker_filename = "com.intel.itt.collector_lib_32"; +#else + const char* const marker_filename = "com.intel.itt.collector_lib_64"; +#endif + + char system_wide_marker_filename[PATH_MAX] = {0}; + int itt_marker_file_fd = -1; + ssize_t res = 0; + + res = snprintf(system_wide_marker_filename, PATH_MAX - 1, "%s%s", "/data/local/tmp/", marker_filename); + if (res < 0) + { + ITT_ANDROID_LOGE("Unable to concatenate marker file string."); + return lib_name; + } + itt_marker_file_fd = open(system_wide_marker_filename, O_RDONLY); + + if (itt_marker_file_fd == -1) + { + const pid_t my_pid = getpid(); + char cmdline_path[PATH_MAX] = {0}; + char package_name[PATH_MAX] = {0}; + char app_sandbox_file[PATH_MAX] = {0}; + int cmdline_fd = 0; + + ITT_ANDROID_LOGI("Unable to open system-wide marker file."); + res = snprintf(cmdline_path, PATH_MAX - 1, "/proc/%d/cmdline", my_pid); + if (res < 0) + { + ITT_ANDROID_LOGE("Unable to get cmdline path string."); + return lib_name; + } + + ITT_ANDROID_LOGI("CMD file: %s\n", cmdline_path); + cmdline_fd = open(cmdline_path, O_RDONLY); + if (cmdline_fd == -1) + { + ITT_ANDROID_LOGE("Unable to open %s file!", cmdline_path); + return lib_name; + } + res = read(cmdline_fd, package_name, PATH_MAX - 1); + if (res == -1) + { + ITT_ANDROID_LOGE("Unable to read %s file!", cmdline_path); + res = close(cmdline_fd); + if (res == -1) + { + ITT_ANDROID_LOGE("Unable to close %s file!", cmdline_path); + } + return lib_name; + } + res = close(cmdline_fd); + if (res == -1) + { + ITT_ANDROID_LOGE("Unable to close %s file!", cmdline_path); + return lib_name; + } + ITT_ANDROID_LOGI("Package name: %s\n", package_name); + res = snprintf(app_sandbox_file, PATH_MAX - 1, "/data/data/%s/%s", package_name, marker_filename); + if (res < 0) + { + ITT_ANDROID_LOGE("Unable to concatenate marker file string."); + return lib_name; + } + + ITT_ANDROID_LOGI("Lib marker file name: %s\n", app_sandbox_file); + itt_marker_file_fd = open(app_sandbox_file, O_RDONLY); + if (itt_marker_file_fd == -1) + { + ITT_ANDROID_LOGE("Unable to open app marker file!"); + return lib_name; + } + } + + { + char itt_lib_name[PATH_MAX] = {0}; + + res = read(itt_marker_file_fd, itt_lib_name, PATH_MAX - 1); + if (res == -1) + { + ITT_ANDROID_LOGE("Unable to read %s file!", itt_marker_file_fd); + res = close(itt_marker_file_fd); + if (res == -1) + { + ITT_ANDROID_LOGE("Unable to close %s file!", itt_marker_file_fd); + } + return lib_name; + } + ITT_ANDROID_LOGI("ITT Lib path: %s", itt_lib_name); + res = close(itt_marker_file_fd); + if (res == -1) + { + ITT_ANDROID_LOGE("Unable to close %s file!", itt_marker_file_fd); + return lib_name; + } + ITT_ANDROID_LOGI("Set env %s to %s", ITT_TO_STR(LIB_VAR_NAME), itt_lib_name); + res = setenv(ITT_TO_STR(LIB_VAR_NAME), itt_lib_name, 0); + if (res == -1) + { + ITT_ANDROID_LOGE("Unable to set env var!"); + return lib_name; + } + lib_name = __itt_get_env_var(ITT_TO_STR(LIB_VAR_NAME)); + ITT_ANDROID_LOGI("ITT Lib path from env: %s", lib_name); + } + } +#endif + + return lib_name; +} + +/* Avoid clashes with std::min, reported by tbb team */ +#define __itt_min(a,b) (a) < (b) ? (a) : (b) + +static __itt_group_id __itt_get_groups(void) +{ + register int i; + __itt_group_id res = __itt_group_none; + const char* var_name = "INTEL_ITTNOTIFY_GROUPS"; + const char* group_str = __itt_get_env_var(var_name); + + if (group_str != NULL) + { + int len; + char gr[255]; + const char* chunk; + while ((group_str = __itt_fsplit(group_str, ",; ", &chunk, &len)) != NULL) + { + int min_len = __itt_min(len, (int)(sizeof(gr) - 1)); + __itt_fstrcpyn(gr, sizeof(gr) - 1, chunk, min_len); + gr[min_len] = 0; + + for (i = 0; group_list[i].name != NULL; i++) + { + if (!__itt_fstrcmp(gr, group_list[i].name)) + { + res = (__itt_group_id)(res | group_list[i].id); + break; + } + } + } + /* TODO: !!! Workaround for bug with warning for unknown group !!! + * Should be fixed in new initialization scheme. + * Now the following groups should be set always. */ + for (i = 0; group_list[i].id != __itt_group_none; i++) + if (group_list[i].id != __itt_group_all && + group_list[i].id > __itt_group_splitter_min && + group_list[i].id < __itt_group_splitter_max) + res = (__itt_group_id)(res | group_list[i].id); + return res; + } + else + { + for (i = 0; group_alias[i].env_var != NULL; i++) + if (__itt_get_env_var(group_alias[i].env_var) != NULL) + return group_alias[i].groups; + } + + return res; +} + +#undef __itt_min + +static int __itt_lib_version(lib_t lib) +{ + if (lib == NULL) + return 0; + if (__itt_get_proc(lib, "__itt_api_init")) + return 2; + if (__itt_get_proc(lib, "__itt_api_version")) + return 1; + return 0; +} + +/* It's not used right now! Comment it out to avoid warnings. +static void __itt_reinit_all_pointers(void) +{ + register int i; + // Fill all pointers with initial stubs + for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++) + *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].init_func; +} +*/ + +static void __itt_nullify_all_pointers(void) +{ + register int i; + /* Nulify all pointers except domain_create, string_handle_create and counter_create */ + for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++) + *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func; +} + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#pragma warning(push) +#pragma warning(disable: 4054) /* warning C4054: 'type cast' : from function pointer 'XXX' to data pointer 'void *' */ +#pragma warning(disable: 4055) /* warning C4055: 'type cast' : from data pointer 'void *' to function pointer 'XXX' */ +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +ITT_EXTERN_C void _N_(fini_ittlib)(void) +{ + __itt_api_fini_t* __itt_api_fini_ptr = NULL; + static volatile TIDT current_thread = 0; + + if (_N_(_ittapi_global).api_initialized) + { + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); + if (_N_(_ittapi_global).api_initialized) + { + if (current_thread == 0) + { + if (PTHREAD_SYMBOLS) current_thread = __itt_thread_id(); + if (_N_(_ittapi_global).lib != NULL) + { + __itt_api_fini_ptr = (__itt_api_fini_t*)(size_t)__itt_get_proc(_N_(_ittapi_global).lib, "__itt_api_fini"); + } + if (__itt_api_fini_ptr) + { + __itt_api_fini_ptr(&_N_(_ittapi_global)); + } + + __itt_nullify_all_pointers(); + + /* TODO: !!! not safe !!! don't support unload so far. + * if (_N_(_ittapi_global).lib != NULL) + * __itt_unload_lib(_N_(_ittapi_global).lib); + * _N_(_ittapi_global).lib = NULL; + */ + _N_(_ittapi_global).api_initialized = 0; + current_thread = 0; + } + } + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); + } +} + +ITT_EXTERN_C int _N_(init_ittlib)(const char* lib_name, __itt_group_id init_groups) +{ + register int i; + __itt_group_id groups; +#ifdef ITT_COMPLETE_GROUP + __itt_group_id zero_group = __itt_group_none; +#endif /* ITT_COMPLETE_GROUP */ + static volatile TIDT current_thread = 0; + + if (!_N_(_ittapi_global).api_initialized) + { +#ifndef ITT_SIMPLE_INIT + ITT_MUTEX_INIT_AND_LOCK(_N_(_ittapi_global)); +#endif /* ITT_SIMPLE_INIT */ + + if (!_N_(_ittapi_global).api_initialized) + { + if (current_thread == 0) + { + if (PTHREAD_SYMBOLS) current_thread = __itt_thread_id(); + if (lib_name == NULL) + { + lib_name = __itt_get_lib_name(); + } + groups = __itt_get_groups(); + if (DL_SYMBOLS && (groups != __itt_group_none || lib_name != NULL)) + { + _N_(_ittapi_global).lib = __itt_load_lib((lib_name == NULL) ? ittnotify_lib_name : lib_name); + + if (_N_(_ittapi_global).lib != NULL) + { + __itt_api_init_t* __itt_api_init_ptr; + int lib_version = __itt_lib_version(_N_(_ittapi_global).lib); + + switch (lib_version) { + case 0: + groups = __itt_group_legacy; + case 1: + /* Fill all pointers from dynamic library */ + for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++) + { + if (_N_(_ittapi_global).api_list_ptr[i].group & groups & init_groups) + { + *_N_(_ittapi_global).api_list_ptr[i].func_ptr = (void*)__itt_get_proc(_N_(_ittapi_global).lib, _N_(_ittapi_global).api_list_ptr[i].name); + if (*_N_(_ittapi_global).api_list_ptr[i].func_ptr == NULL) + { + /* Restore pointers for function with static implementation */ + *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func; + __itt_report_error(__itt_error_no_symbol, lib_name, _N_(_ittapi_global).api_list_ptr[i].name); +#ifdef ITT_COMPLETE_GROUP + zero_group = (__itt_group_id)(zero_group | _N_(_ittapi_global).api_list_ptr[i].group); +#endif /* ITT_COMPLETE_GROUP */ + } + } + else + *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func; + } + + if (groups == __itt_group_legacy) + { + /* Compatibility with legacy tools */ + ITTNOTIFY_NAME(thread_ignore) = ITTNOTIFY_NAME(thr_ignore); +#if ITT_PLATFORM==ITT_PLATFORM_WIN + ITTNOTIFY_NAME(sync_createA) = ITTNOTIFY_NAME(sync_set_nameA); + ITTNOTIFY_NAME(sync_createW) = ITTNOTIFY_NAME(sync_set_nameW); +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ + ITTNOTIFY_NAME(sync_create) = ITTNOTIFY_NAME(sync_set_name); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + ITTNOTIFY_NAME(sync_prepare) = ITTNOTIFY_NAME(notify_sync_prepare); + ITTNOTIFY_NAME(sync_cancel) = ITTNOTIFY_NAME(notify_sync_cancel); + ITTNOTIFY_NAME(sync_acquired) = ITTNOTIFY_NAME(notify_sync_acquired); + ITTNOTIFY_NAME(sync_releasing) = ITTNOTIFY_NAME(notify_sync_releasing); + } + +#ifdef ITT_COMPLETE_GROUP + for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++) + if (_N_(_ittapi_global).api_list_ptr[i].group & zero_group) + *_N_(_ittapi_global).api_list_ptr[i].func_ptr = _N_(_ittapi_global).api_list_ptr[i].null_func; +#endif /* ITT_COMPLETE_GROUP */ + break; + case 2: + __itt_api_init_ptr = (__itt_api_init_t*)(size_t)__itt_get_proc(_N_(_ittapi_global).lib, "__itt_api_init"); + if (__itt_api_init_ptr) + __itt_api_init_ptr(&_N_(_ittapi_global), init_groups); + break; + } + } + else + { + __itt_nullify_all_pointers(); + + __itt_report_error(__itt_error_no_module, lib_name, +#if ITT_PLATFORM==ITT_PLATFORM_WIN + __itt_system_error() +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + dlerror() +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + ); + } + } + else + { + __itt_nullify_all_pointers(); + } + _N_(_ittapi_global).api_initialized = 1; + current_thread = 0; + /* !!! Just to avoid unused code elimination !!! */ + if (__itt_fini_ittlib_ptr == _N_(fini_ittlib)) current_thread = 0; + } + } + +#ifndef ITT_SIMPLE_INIT + if (PTHREAD_SYMBOLS) __itt_mutex_unlock(&_N_(_ittapi_global).mutex); +#endif /* ITT_SIMPLE_INIT */ + } + + /* Evaluating if any function ptr is non empty and it's in init_groups */ + for (i = 0; _N_(_ittapi_global).api_list_ptr[i].name != NULL; i++) + { + if (*_N_(_ittapi_global).api_list_ptr[i].func_ptr != _N_(_ittapi_global).api_list_ptr[i].null_func && + _N_(_ittapi_global).api_list_ptr[i].group & init_groups) + { + return 1; + } + } + return 0; +} + +ITT_EXTERN_C __itt_error_handler_t* _N_(set_error_handler)(__itt_error_handler_t* handler) +{ + __itt_error_handler_t* prev = (__itt_error_handler_t*)(size_t)_N_(_ittapi_global).error_handler; + _N_(_ittapi_global).error_handler = (void*)(size_t)handler; + return prev; +} + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#pragma warning(pop) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + diff --git a/js/src/vtune/ittnotify_static.h b/js/src/vtune/ittnotify_static.h new file mode 100644 index 000000000000..bf5eedc87441 --- /dev/null +++ b/js/src/vtune/ittnotify_static.h @@ -0,0 +1,389 @@ +/* + This file is provided under a dual BSD/GPLv2 license. When using or + redistributing this file, you may do so under either license. + + GPL LICENSE SUMMARY + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + The full GNU General Public License is included in this distribution + in the file called LICENSE.GPL. + + Contact Information: + http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ + + BSD LICENSE + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "vtune/ittnotify_config.h" + +#ifndef ITT_FORMAT_DEFINED +# ifndef ITT_FORMAT +# define ITT_FORMAT +# endif /* ITT_FORMAT */ +# ifndef ITT_NO_PARAMS +# define ITT_NO_PARAMS +# endif /* ITT_NO_PARAMS */ +#endif /* ITT_FORMAT_DEFINED */ + +/* + * parameters for macro expected: + * ITT_STUB(api, type, func_name, arguments, params, func_name_in_dll, group, printf_fmt) + */ +#ifdef __ITT_INTERNAL_INIT + +#ifndef __ITT_INTERNAL_BODY +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_domain*, domain_createA, (const char *name), (ITT_FORMAT name), domain_createA, __itt_group_structure, "\"%s\"") +ITT_STUB(ITTAPI, __itt_domain*, domain_createW, (const wchar_t *name), (ITT_FORMAT name), domain_createW, __itt_group_structure, "\"%S\"") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_domain*, domain_create, (const char *name), (ITT_FORMAT name), domain_create, __itt_group_structure, "\"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createA, (const char *name), (ITT_FORMAT name), string_handle_createA, __itt_group_structure, "\"%s\"") +ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_createW, (const wchar_t *name), (ITT_FORMAT name), string_handle_createW, __itt_group_structure, "\"%S\"") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_string_handle*, string_handle_create, (const char *name), (ITT_FORMAT name), string_handle_create, __itt_group_structure, "\"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_counter, counter_createA, (const char *name, const char *domain), (ITT_FORMAT name, domain), counter_createA, __itt_group_counter, "\"%s\", \"%s\"") +ITT_STUB(ITTAPI, __itt_counter, counter_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), counter_createW, __itt_group_counter, "\"%s\", \"%s\"") +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_counter, counter_create, (const char *name, const char *domain), (ITT_FORMAT name, domain), counter_create, __itt_group_counter, "\"%s\", \"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_counter, counter_create_typedA, (const char *name, const char *domain, __itt_metadata_type type), (ITT_FORMAT name, domain, type), counter_create_typedA, __itt_group_counter, "\"%s\", \"%s\", %d") +ITT_STUB(ITTAPI, __itt_counter, counter_create_typedW, (const wchar_t *name, const wchar_t *domain, __itt_metadata_type type), (ITT_FORMAT name, domain, type), counter_create_typedW, __itt_group_counter, "\"%s\", \"%s\", %d") +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_counter, counter_create_typed, (const char *name, const char *domain, __itt_metadata_type type), (ITT_FORMAT name, domain, type), counter_create_typed, __itt_group_counter, "\"%s\", \"%s\", %d") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + + +ITT_STUBV(ITTAPI, void, pause, (void), (ITT_NO_PARAMS), pause, __itt_group_control | __itt_group_legacy, "no args") +ITT_STUBV(ITTAPI, void, resume, (void), (ITT_NO_PARAMS), resume, __itt_group_control | __itt_group_legacy, "no args") + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, thread_set_nameA, (const char *name), (ITT_FORMAT name), thread_set_nameA, __itt_group_thread, "\"%s\"") +ITT_STUBV(ITTAPI, void, thread_set_nameW, (const wchar_t *name), (ITT_FORMAT name), thread_set_nameW, __itt_group_thread, "\"%S\"") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, thread_set_name, (const char *name), (ITT_FORMAT name), thread_set_name, __itt_group_thread, "\"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, thread_ignore, (void), (ITT_NO_PARAMS), thread_ignore, __itt_group_thread, "no args") + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(LIBITTAPI, int, thr_name_setA, (const char *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setA, __itt_group_thread | __itt_group_legacy, "\"%s\", %d") +ITT_STUB(LIBITTAPI, int, thr_name_setW, (const wchar_t *name, int namelen), (ITT_FORMAT name, namelen), thr_name_setW, __itt_group_thread | __itt_group_legacy, "\"%S\", %d") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUB(LIBITTAPI, int, thr_name_set, (const char *name, int namelen), (ITT_FORMAT name, namelen), thr_name_set, __itt_group_thread | __itt_group_legacy, "\"%s\", %d") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(LIBITTAPI, void, thr_ignore, (void), (ITT_NO_PARAMS), thr_ignore, __itt_group_thread | __itt_group_legacy, "no args") +#endif /* __ITT_INTERNAL_BODY */ + +ITT_STUBV(ITTAPI, void, enable_attach, (void), (ITT_NO_PARAMS), enable_attach, __itt_group_all, "no args") + +#else /* __ITT_INTERNAL_INIT */ + +ITT_STUBV(ITTAPI, void, detach, (void), (ITT_NO_PARAMS), detach, __itt_group_control | __itt_group_legacy, "no args") + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, sync_createA, (void *addr, const char *objtype, const char *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createA, __itt_group_sync | __itt_group_fsync, "%p, \"%s\", \"%s\", %x") +ITT_STUBV(ITTAPI, void, sync_createW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_createW, __itt_group_sync | __itt_group_fsync, "%p, \"%S\", \"%S\", %x") +ITT_STUBV(ITTAPI, void, sync_renameA, (void *addr, const char *name), (ITT_FORMAT addr, name), sync_renameA, __itt_group_sync | __itt_group_fsync, "%p, \"%s\"") +ITT_STUBV(ITTAPI, void, sync_renameW, (void *addr, const wchar_t *name), (ITT_FORMAT addr, name), sync_renameW, __itt_group_sync | __itt_group_fsync, "%p, \"%S\"") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, sync_create, (void *addr, const char *objtype, const char *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_create, __itt_group_sync | __itt_group_fsync, "%p, \"%s\", \"%s\", %x") +ITT_STUBV(ITTAPI, void, sync_rename, (void *addr, const char *name), (ITT_FORMAT addr, name), sync_rename, __itt_group_sync | __itt_group_fsync, "%p, \"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, sync_destroy, (void *addr), (ITT_FORMAT addr), sync_destroy, __itt_group_sync | __itt_group_fsync, "%p") + +ITT_STUBV(ITTAPI, void, sync_prepare, (void* addr), (ITT_FORMAT addr), sync_prepare, __itt_group_sync, "%p") +ITT_STUBV(ITTAPI, void, sync_cancel, (void *addr), (ITT_FORMAT addr), sync_cancel, __itt_group_sync, "%p") +ITT_STUBV(ITTAPI, void, sync_acquired, (void *addr), (ITT_FORMAT addr), sync_acquired, __itt_group_sync, "%p") +ITT_STUBV(ITTAPI, void, sync_releasing, (void* addr), (ITT_FORMAT addr), sync_releasing, __itt_group_sync, "%p") + +ITT_STUBV(ITTAPI, void, suppress_push, (unsigned int mask), (ITT_FORMAT mask), suppress_push, __itt_group_suppress, "%p") +ITT_STUBV(ITTAPI, void, suppress_pop, (void), (ITT_NO_PARAMS), suppress_pop, __itt_group_suppress, "no args") +ITT_STUBV(ITTAPI, void, suppress_mark_range, (__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size),(ITT_FORMAT mode, mask, address, size), suppress_mark_range, __itt_group_suppress, "%d, %p, %p, %d") +ITT_STUBV(ITTAPI, void, suppress_clear_range,(__itt_suppress_mode_t mode, unsigned int mask, void * address, size_t size),(ITT_FORMAT mode, mask, address, size), suppress_clear_range,__itt_group_suppress, "%d, %p, %p, %d") + +ITT_STUBV(ITTAPI, void, fsync_prepare, (void* addr), (ITT_FORMAT addr), sync_prepare, __itt_group_fsync, "%p") +ITT_STUBV(ITTAPI, void, fsync_cancel, (void *addr), (ITT_FORMAT addr), sync_cancel, __itt_group_fsync, "%p") +ITT_STUBV(ITTAPI, void, fsync_acquired, (void *addr), (ITT_FORMAT addr), sync_acquired, __itt_group_fsync, "%p") +ITT_STUBV(ITTAPI, void, fsync_releasing, (void* addr), (ITT_FORMAT addr), sync_releasing, __itt_group_fsync, "%p") + +ITT_STUBV(ITTAPI, void, model_site_begin, (__itt_model_site *site, __itt_model_site_instance *instance, const char *name), (ITT_FORMAT site, instance, name), model_site_begin, __itt_group_model, "%p, %p, \"%s\"") +ITT_STUBV(ITTAPI, void, model_site_end, (__itt_model_site *site, __itt_model_site_instance *instance), (ITT_FORMAT site, instance), model_site_end, __itt_group_model, "%p, %p") +ITT_STUBV(ITTAPI, void, model_task_begin, (__itt_model_task *task, __itt_model_task_instance *instance, const char *name), (ITT_FORMAT task, instance, name), model_task_begin, __itt_group_model, "%p, %p, \"%s\"") +ITT_STUBV(ITTAPI, void, model_task_end, (__itt_model_task *task, __itt_model_task_instance *instance), (ITT_FORMAT task, instance), model_task_end, __itt_group_model, "%p, %p") +ITT_STUBV(ITTAPI, void, model_lock_acquire, (void *lock), (ITT_FORMAT lock), model_lock_acquire, __itt_group_model, "%p") +ITT_STUBV(ITTAPI, void, model_lock_release, (void *lock), (ITT_FORMAT lock), model_lock_release, __itt_group_model, "%p") +ITT_STUBV(ITTAPI, void, model_record_allocation, (void *addr, size_t size), (ITT_FORMAT addr, size), model_record_allocation, __itt_group_model, "%p, %d") +ITT_STUBV(ITTAPI, void, model_record_deallocation, (void *addr), (ITT_FORMAT addr), model_record_deallocation, __itt_group_model, "%p") +ITT_STUBV(ITTAPI, void, model_induction_uses, (void* addr, size_t size), (ITT_FORMAT addr, size), model_induction_uses, __itt_group_model, "%p, %d") +ITT_STUBV(ITTAPI, void, model_reduction_uses, (void* addr, size_t size), (ITT_FORMAT addr, size), model_reduction_uses, __itt_group_model, "%p, %d") +ITT_STUBV(ITTAPI, void, model_observe_uses, (void* addr, size_t size), (ITT_FORMAT addr, size), model_observe_uses, __itt_group_model, "%p, %d") +ITT_STUBV(ITTAPI, void, model_clear_uses, (void* addr), (ITT_FORMAT addr), model_clear_uses, __itt_group_model, "%p") + +#ifndef __ITT_INTERNAL_BODY +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, model_site_beginW, (const wchar_t *name), (ITT_FORMAT name), model_site_beginW, __itt_group_model, "\"%s\"") +ITT_STUBV(ITTAPI, void, model_task_beginW, (const wchar_t *name), (ITT_FORMAT name), model_task_beginW, __itt_group_model, "\"%s\"") +ITT_STUBV(ITTAPI, void, model_iteration_taskW, (const wchar_t *name), (ITT_FORMAT name), model_iteration_taskW, __itt_group_model, "\"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, model_site_beginA, (const char *name), (ITT_FORMAT name), model_site_beginA, __itt_group_model, "\"%s\"") +ITT_STUBV(ITTAPI, void, model_site_beginAL, (const char *name, size_t len), (ITT_FORMAT name, len), model_site_beginAL, __itt_group_model, "\"%s\", %d") +ITT_STUBV(ITTAPI, void, model_task_beginA, (const char *name), (ITT_FORMAT name), model_task_beginA, __itt_group_model, "\"%s\"") +ITT_STUBV(ITTAPI, void, model_task_beginAL, (const char *name, size_t len), (ITT_FORMAT name, len), model_task_beginAL, __itt_group_model, "\"%s\", %d") +ITT_STUBV(ITTAPI, void, model_iteration_taskA, (const char *name), (ITT_FORMAT name), model_iteration_taskA, __itt_group_model, "\"%s\"") +ITT_STUBV(ITTAPI, void, model_iteration_taskAL, (const char *name, size_t len), (ITT_FORMAT name, len), model_iteration_taskAL, __itt_group_model, "\"%s\", %d") +ITT_STUBV(ITTAPI, void, model_site_end_2, (void), (ITT_NO_PARAMS), model_site_end_2, __itt_group_model, "no args") +ITT_STUBV(ITTAPI, void, model_task_end_2, (void), (ITT_NO_PARAMS), model_task_end_2, __itt_group_model, "no args") +ITT_STUBV(ITTAPI, void, model_lock_acquire_2, (void *lock), (ITT_FORMAT lock), model_lock_acquire_2, __itt_group_model, "%p") +ITT_STUBV(ITTAPI, void, model_lock_release_2, (void *lock), (ITT_FORMAT lock), model_lock_release_2, __itt_group_model, "%p") +ITT_STUBV(ITTAPI, void, model_aggregate_task, (size_t count), (ITT_FORMAT count), model_aggregate_task, __itt_group_model, "%d") +ITT_STUBV(ITTAPI, void, model_disable_push, (__itt_model_disable x), (ITT_FORMAT x), model_disable_push, __itt_group_model, "%p") +ITT_STUBV(ITTAPI, void, model_disable_pop, (void), (ITT_NO_PARAMS), model_disable_pop, __itt_group_model, "no args") +#endif /* __ITT_INTERNAL_BODY */ + +#ifndef __ITT_INTERNAL_BODY +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createA, (const char *name, const char *domain), (ITT_FORMAT name, domain), heap_function_createA, __itt_group_heap, "\"%s\", \"%s\"") +ITT_STUB(ITTAPI, __itt_heap_function, heap_function_createW, (const wchar_t *name, const wchar_t *domain), (ITT_FORMAT name, domain), heap_function_createW, __itt_group_heap, "\"%s\", \"%s\"") +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_heap_function, heap_function_create, (const char *name, const char *domain), (ITT_FORMAT name, domain), heap_function_create, __itt_group_heap, "\"%s\", \"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* __ITT_INTERNAL_BODY */ +ITT_STUBV(ITTAPI, void, heap_allocate_begin, (__itt_heap_function h, size_t size, int initialized), (ITT_FORMAT h, size, initialized), heap_allocate_begin, __itt_group_heap, "%p, %lu, %d") +ITT_STUBV(ITTAPI, void, heap_allocate_end, (__itt_heap_function h, void** addr, size_t size, int initialized), (ITT_FORMAT h, addr, size, initialized), heap_allocate_end, __itt_group_heap, "%p, %p, %lu, %d") +ITT_STUBV(ITTAPI, void, heap_free_begin, (__itt_heap_function h, void* addr), (ITT_FORMAT h, addr), heap_free_begin, __itt_group_heap, "%p, %p") +ITT_STUBV(ITTAPI, void, heap_free_end, (__itt_heap_function h, void* addr), (ITT_FORMAT h, addr), heap_free_end, __itt_group_heap, "%p, %p") +ITT_STUBV(ITTAPI, void, heap_reallocate_begin, (__itt_heap_function h, void* addr, size_t new_size, int initialized), (ITT_FORMAT h, addr, new_size, initialized), heap_reallocate_begin, __itt_group_heap, "%p, %p, %lu, %d") +ITT_STUBV(ITTAPI, void, heap_reallocate_end, (__itt_heap_function h, void* addr, void** new_addr, size_t new_size, int initialized), (ITT_FORMAT h, addr, new_addr, new_size, initialized), heap_reallocate_end, __itt_group_heap, "%p, %p, %p, %lu, %d") +ITT_STUBV(ITTAPI, void, heap_internal_access_begin, (void), (ITT_NO_PARAMS), heap_internal_access_begin, __itt_group_heap, "no args") +ITT_STUBV(ITTAPI, void, heap_internal_access_end, (void), (ITT_NO_PARAMS), heap_internal_access_end, __itt_group_heap, "no args") +ITT_STUBV(ITTAPI, void, heap_record_memory_growth_begin, (void), (ITT_NO_PARAMS), heap_record_memory_growth_begin, __itt_group_heap, "no args") +ITT_STUBV(ITTAPI, void, heap_record_memory_growth_end, (void), (ITT_NO_PARAMS), heap_record_memory_growth_end, __itt_group_heap, "no args") +ITT_STUBV(ITTAPI, void, heap_reset_detection, (unsigned int reset_mask), (ITT_FORMAT reset_mask), heap_reset_detection, __itt_group_heap, "%u") +ITT_STUBV(ITTAPI, void, heap_record, (unsigned int record_mask), (ITT_FORMAT record_mask), heap_record, __itt_group_heap, "%u") + +ITT_STUBV(ITTAPI, void, id_create, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), id_create, __itt_group_structure, "%p, %lu") +ITT_STUBV(ITTAPI, void, id_destroy, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), id_destroy, __itt_group_structure, "%p, %lu") + +ITT_STUB(ITTAPI, __itt_timestamp, get_timestamp, (void), (ITT_NO_PARAMS), get_timestamp, __itt_group_structure, "no args") + +ITT_STUBV(ITTAPI, void, region_begin, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), region_begin, __itt_group_structure, "%p, %lu, %lu, %p") +ITT_STUBV(ITTAPI, void, region_end, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), region_end, __itt_group_structure, "%p, %lu") + +#ifndef __ITT_INTERNAL_BODY +ITT_STUBV(ITTAPI, void, frame_begin_v3, (const __itt_domain *domain, __itt_id *id), (ITT_FORMAT domain, id), frame_begin_v3, __itt_group_structure, "%p, %p") +ITT_STUBV(ITTAPI, void, frame_end_v3, (const __itt_domain *domain, __itt_id *id), (ITT_FORMAT domain, id), frame_end_v3, __itt_group_structure, "%p, %p") +ITT_STUBV(ITTAPI, void, frame_submit_v3, (const __itt_domain *domain, __itt_id *id, __itt_timestamp begin, __itt_timestamp end), (ITT_FORMAT domain, id, begin, end), frame_submit_v3, __itt_group_structure, "%p, %p, %lu, %lu") +#endif /* __ITT_INTERNAL_BODY */ + +ITT_STUBV(ITTAPI, void, task_group, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_group, __itt_group_structure, "%p, %lu, %lu, %p") + +ITT_STUBV(ITTAPI, void, task_begin, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_begin, __itt_group_structure, "%p, %lu, %lu, %p") +ITT_STUBV(ITTAPI, void, task_begin_fn, (const __itt_domain *domain, __itt_id id, __itt_id parent, void* fn), (ITT_FORMAT domain, id, parent, fn), task_begin_fn, __itt_group_structure, "%p, %lu, %lu, %p") +ITT_STUBV(ITTAPI, void, task_end, (const __itt_domain *domain), (ITT_FORMAT domain), task_end, __itt_group_structure, "%p") + +ITT_STUBV(ITTAPI, void, counter_inc_v3, (const __itt_domain *domain, __itt_string_handle *name), (ITT_FORMAT domain, name), counter_inc_v3, __itt_group_structure, "%p, %p") +ITT_STUBV(ITTAPI, void, counter_inc_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long value), (ITT_FORMAT domain, name, value), counter_inc_delta_v3, __itt_group_structure, "%p, %p, %lu") +ITT_STUBV(ITTAPI, void, counter_dec_v3, (const __itt_domain *domain, __itt_string_handle *name), (ITT_FORMAT domain, name), counter_dec_v3, __itt_group_structure, "%p, %p") +ITT_STUBV(ITTAPI, void, counter_dec_delta_v3, (const __itt_domain *domain, __itt_string_handle *name, unsigned long long value), (ITT_FORMAT domain, name, value), counter_dec_delta_v3, __itt_group_structure, "%p, %p, %lu") + +ITT_STUBV(ITTAPI, void, marker, (const __itt_domain *domain, __itt_id id, __itt_string_handle *name, __itt_scope scope), (ITT_FORMAT domain, id, name, scope), marker, __itt_group_structure, "%p, %lu, %p, %d") + +ITT_STUBV(ITTAPI, void, metadata_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data), (ITT_FORMAT domain, id, key, type, count, data), metadata_add, __itt_group_structure, "%p, %lu, %p, %d, %lu, %p") +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, metadata_str_addA, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char* data, size_t length), (ITT_FORMAT domain, id, key, data, length), metadata_str_addA, __itt_group_structure, "%p, %lu, %p, %p, %lu") +ITT_STUBV(ITTAPI, void, metadata_str_addW, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const wchar_t* data, size_t length), (ITT_FORMAT domain, id, key, data, length), metadata_str_addW, __itt_group_structure, "%p, %lu, %p, %p, %lu") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, metadata_str_add, (const __itt_domain *domain, __itt_id id, __itt_string_handle *key, const char* data, size_t length), (ITT_FORMAT domain, id, key, data, length), metadata_str_add, __itt_group_structure, "%p, %lu, %p, %p, %lu") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +ITT_STUBV(ITTAPI, void, relation_add_to_current, (const __itt_domain *domain, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, relation, tail), relation_add_to_current, __itt_group_structure, "%p, %lu, %p") +ITT_STUBV(ITTAPI, void, relation_add, (const __itt_domain *domain, __itt_id head, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, head, relation, tail), relation_add, __itt_group_structure, "%p, %p, %lu, %p") + +#ifndef __ITT_INTERNAL_BODY +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char *name, int namelen), (ITT_FORMAT name, namelen), event_createA, __itt_group_mark | __itt_group_legacy, "\"%s\", %d") +ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen), (ITT_FORMAT name, namelen), event_createW, __itt_group_mark | __itt_group_legacy, "\"%S\", %d") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUB(LIBITTAPI, __itt_event, event_create, (const char *name, int namelen), (ITT_FORMAT name, namelen), event_create, __itt_group_mark | __itt_group_legacy, "\"%s\", %d") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event), (ITT_FORMAT event), event_start, __itt_group_mark | __itt_group_legacy, "%d") +ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event), (ITT_FORMAT event), event_end, __itt_group_mark | __itt_group_legacy, "%d") +#endif /* __ITT_INTERNAL_BODY */ + +#ifndef __ITT_INTERNAL_BODY +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, sync_set_nameA, (void *addr, const char *objtype, const char *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_nameA, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%s\", \"%s\", %x") +ITT_STUBV(ITTAPI, void, sync_set_nameW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_nameW, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%S\", \"%S\", %x") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, sync_set_name, (void *addr, const char *objtype, const char *objname, int attribute), (ITT_FORMAT addr, objtype, objname, attribute), sync_set_name, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "p, \"%s\", \"%s\", %x") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(LIBITTAPI, int, notify_sync_nameA, (void *p, const char *objtype, int typelen, const char *objname, int namelen, int attribute), (ITT_FORMAT p, objtype, typelen, objname, namelen, attribute), notify_sync_nameA, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%s\", %d, \"%s\", %d, %x") +ITT_STUB(LIBITTAPI, int, notify_sync_nameW, (void *p, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute), (ITT_FORMAT p, objtype, typelen, objname, namelen, attribute), notify_sync_nameW, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%S\", %d, \"%S\", %d, %x") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUB(LIBITTAPI, int, notify_sync_name, (void *p, const char *objtype, int typelen, const char *objname, int namelen, int attribute), (ITT_FORMAT p, objtype, typelen, objname, namelen, attribute), notify_sync_name, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p, \"%s\", %d, \"%s\", %d, %x") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +ITT_STUBV(LIBITTAPI, void, notify_sync_prepare, (void *p), (ITT_FORMAT p), notify_sync_prepare, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p") +ITT_STUBV(LIBITTAPI, void, notify_sync_cancel, (void *p), (ITT_FORMAT p), notify_sync_cancel, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p") +ITT_STUBV(LIBITTAPI, void, notify_sync_acquired, (void *p), (ITT_FORMAT p), notify_sync_acquired, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p") +ITT_STUBV(LIBITTAPI, void, notify_sync_releasing, (void *p), (ITT_FORMAT p), notify_sync_releasing, __itt_group_sync | __itt_group_fsync | __itt_group_legacy, "%p") +#endif /* __ITT_INTERNAL_BODY */ + +ITT_STUBV(LIBITTAPI, void, memory_read, (void *addr, size_t size), (ITT_FORMAT addr, size), memory_read, __itt_group_legacy, "%p, %lu") +ITT_STUBV(LIBITTAPI, void, memory_write, (void *addr, size_t size), (ITT_FORMAT addr, size), memory_write, __itt_group_legacy, "%p, %lu") +ITT_STUBV(LIBITTAPI, void, memory_update, (void *addr, size_t size), (ITT_FORMAT addr, size), memory_update, __itt_group_legacy, "%p, %lu") + +ITT_STUB(LIBITTAPI, __itt_state_t, state_get, (void), (ITT_NO_PARAMS), state_get, __itt_group_legacy, "no args") +ITT_STUB(LIBITTAPI, __itt_state_t, state_set, (__itt_state_t s), (ITT_FORMAT s), state_set, __itt_group_legacy, "%d") +ITT_STUB(LIBITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj_state_t s), (ITT_FORMAT p, s), obj_mode_set, __itt_group_legacy, "%d, %d") +ITT_STUB(LIBITTAPI, __itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t p, __itt_thr_state_t s), (ITT_FORMAT p, s), thr_mode_set, __itt_group_legacy, "%d, %d") + +#ifndef __ITT_INTERNAL_BODY +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char *domain), (ITT_FORMAT domain), frame_createA, __itt_group_frame, "\"%s\"") +ITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain), (ITT_FORMAT domain), frame_createW, __itt_group_frame, "\"%s\"") +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_frame, frame_create, (const char *domain), (ITT_FORMAT domain), frame_create, __itt_group_frame, "\"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* __ITT_INTERNAL_BODY */ +ITT_STUBV(ITTAPI, void, frame_begin, (__itt_frame frame), (ITT_FORMAT frame), frame_begin, __itt_group_frame, "%p") +ITT_STUBV(ITTAPI, void, frame_end, (__itt_frame frame), (ITT_FORMAT frame), frame_end, __itt_group_frame, "%p") + +ITT_STUBV(ITTAPI, void, counter_destroy, (__itt_counter id), (ITT_FORMAT id), counter_destroy, __itt_group_counter, "%p") +ITT_STUBV(ITTAPI, void, counter_inc, (__itt_counter id), (ITT_FORMAT id), counter_inc, __itt_group_counter, "%p") +ITT_STUBV(ITTAPI, void, counter_inc_delta, (__itt_counter id, unsigned long long value), (ITT_FORMAT id, value), counter_inc_delta, __itt_group_counter, "%p, %lu") +ITT_STUBV(ITTAPI, void, counter_dec, (__itt_counter id), (ITT_FORMAT id), counter_dec, __itt_group_counter, "%p") +ITT_STUBV(ITTAPI, void, counter_dec_delta, (__itt_counter id, unsigned long long value), (ITT_FORMAT id, value), counter_dec_delta, __itt_group_counter, "%p, %lu") +ITT_STUBV(ITTAPI, void, counter_set_value, (__itt_counter id, void *value_ptr), (ITT_FORMAT id, value_ptr), counter_set_value, __itt_group_counter, "%p, %p") +ITT_STUBV(ITTAPI, void, counter_set_value_ex, (__itt_counter id, __itt_clock_domain *clock_domain, unsigned long long timestamp, void *value_ptr), (ITT_FORMAT id, clock_domain, timestamp, value_ptr), counter_set_value_ex, __itt_group_counter, "%p, %p, %llu, %p") + +#ifndef __ITT_INTERNAL_BODY +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_mark_type, mark_createA, (const char *name), (ITT_FORMAT name), mark_createA, __itt_group_mark, "\"%s\"") +ITT_STUB(ITTAPI, __itt_mark_type, mark_createW, (const wchar_t *name), (ITT_FORMAT name), mark_createW, __itt_group_mark, "\"%S\"") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_mark_type, mark_create, (const char *name), (ITT_FORMAT name), mark_create, __itt_group_mark, "\"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* __ITT_INTERNAL_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, int, markA, (__itt_mark_type mt, const char *parameter), (ITT_FORMAT mt, parameter), markA, __itt_group_mark, "%d, \"%s\"") +ITT_STUB(ITTAPI, int, markW, (__itt_mark_type mt, const wchar_t *parameter), (ITT_FORMAT mt, parameter), markW, __itt_group_mark, "%d, \"%S\"") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, int, mark, (__itt_mark_type mt, const char *parameter), (ITT_FORMAT mt, parameter), mark, __itt_group_mark, "%d, \"%s\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, int, mark_off, (__itt_mark_type mt), (ITT_FORMAT mt), mark_off, __itt_group_mark, "%d") +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, int, mark_globalA, (__itt_mark_type mt, const char *parameter), (ITT_FORMAT mt, parameter), mark_globalA, __itt_group_mark, "%d, \"%s\"") +ITT_STUB(ITTAPI, int, mark_globalW, (__itt_mark_type mt, const wchar_t *parameter), (ITT_FORMAT mt, parameter), mark_globalW, __itt_group_mark, "%d, \"%S\"") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, int, mark_global, (__itt_mark_type mt, const char *parameter), (ITT_FORMAT mt, parameter), mark_global, __itt_group_mark, "%d, \"%S\"") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, int, mark_global_off, (__itt_mark_type mt), (ITT_FORMAT mt), mark_global_off, __itt_group_mark, "%d") + +#ifndef __ITT_INTERNAL_BODY +ITT_STUB(ITTAPI, __itt_caller, stack_caller_create, (void), (ITT_NO_PARAMS), stack_caller_create, __itt_group_stitch, "no args") +#endif /* __ITT_INTERNAL_BODY */ +ITT_STUBV(ITTAPI, void, stack_caller_destroy, (__itt_caller id), (ITT_FORMAT id), stack_caller_destroy, __itt_group_stitch, "%p") +ITT_STUBV(ITTAPI, void, stack_callee_enter, (__itt_caller id), (ITT_FORMAT id), stack_callee_enter, __itt_group_stitch, "%p") +ITT_STUBV(ITTAPI, void, stack_callee_leave, (__itt_caller id), (ITT_FORMAT id), stack_callee_leave, __itt_group_stitch, "%p") + +ITT_STUB(ITTAPI, __itt_clock_domain*, clock_domain_create, (__itt_get_clock_info_fn fn, void* fn_data), (ITT_FORMAT fn, fn_data), clock_domain_create, __itt_group_structure, "%p, %p") +ITT_STUBV(ITTAPI, void, clock_domain_reset, (void), (ITT_NO_PARAMS), clock_domain_reset, __itt_group_structure, "no args") +ITT_STUBV(ITTAPI, void, id_create_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), id_create_ex, __itt_group_structure, "%p, %p, %lu, %lu") +ITT_STUBV(ITTAPI, void, id_destroy_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), id_destroy_ex, __itt_group_structure, "%p, %p, %lu, %lu") +ITT_STUBV(ITTAPI, void, task_begin_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, name), task_begin_ex, __itt_group_structure, "%p, %p, %lu, %lu, %lu, %p") +ITT_STUBV(ITTAPI, void, task_begin_fn_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, void* fn), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, fn), task_begin_fn_ex, __itt_group_structure, "%p, %p, %lu, %lu, %lu, %p") +ITT_STUBV(ITTAPI, void, task_end_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp), (ITT_FORMAT domain, clock_domain, timestamp), task_end_ex, __itt_group_structure, "%p, %p, %lu") +ITT_STUBV(ITTAPI, void, task_begin_overlapped, (const __itt_domain *domain, __itt_id id, __itt_id parent, __itt_string_handle *name), (ITT_FORMAT domain, id, parent, name), task_begin_overlapped, __itt_group_structure, "%p, %lu, %lu, %p") +ITT_STUBV(ITTAPI, void, task_begin_overlapped_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_id parentid, __itt_string_handle *name), (ITT_FORMAT domain, clock_domain, timestamp, id, parentid, name), task_begin_overlapped_ex, __itt_group_structure, "%p, %p, %lu, %lu, %lu, %p") +ITT_STUBV(ITTAPI, void, task_end_overlapped, (const __itt_domain *domain, __itt_id id), (ITT_FORMAT domain, id), task_end_overlapped, __itt_group_structure, "%p, %lu") +ITT_STUBV(ITTAPI, void, task_end_overlapped_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id), (ITT_FORMAT domain, clock_domain, timestamp, id), task_end_overlapped_ex, __itt_group_structure, "%p, %p, %lu, %lu") +ITT_STUBV(ITTAPI, void, marker_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id id, __itt_string_handle *name, __itt_scope scope), (ITT_FORMAT domain, clock_domain, timestamp, id, name, scope), marker_ex, __itt_group_structure, "%p, %p, %lu, %lu, %p, %d") +ITT_STUBV(ITTAPI, void, metadata_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, __itt_metadata_type type, size_t count, void *data), (ITT_FORMAT domain, scope, key, type, count, data), metadata_add_with_scope, __itt_group_structure, "%p, %d, %p, %d, %lu, %p") +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeA, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length), (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scopeA, __itt_group_structure, "%p, %d, %p, %p, %lu") +ITT_STUBV(ITTAPI, void, metadata_str_add_with_scopeW, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const wchar_t *data, size_t length), (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scopeW, __itt_group_structure, "%p, %d, %p, %p, %lu") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, metadata_str_add_with_scope, (const __itt_domain *domain, __itt_scope scope, __itt_string_handle *key, const char *data, size_t length), (ITT_FORMAT domain, scope, key, data, length), metadata_str_add_with_scope, __itt_group_structure, "%p, %d, %p, %p, %lu") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, relation_add_to_current_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, clock_domain, timestamp, relation, tail), relation_add_to_current_ex, __itt_group_structure, "%p, %p, %lu, %d, %lu") +ITT_STUBV(ITTAPI, void, relation_add_ex, (const __itt_domain *domain, __itt_clock_domain* clock_domain, unsigned long long timestamp, __itt_id head, __itt_relation relation, __itt_id tail), (ITT_FORMAT domain, clock_domain, timestamp, head, relation, tail), relation_add_ex, __itt_group_structure, "%p, %p, %lu, %lu, %d, %lu") +ITT_STUB(ITTAPI, __itt_track_group*, track_group_create, (__itt_string_handle* name, __itt_track_group_type track_group_type), (ITT_FORMAT name, track_group_type), track_group_create, __itt_group_structure, "%p, %d") +ITT_STUB(ITTAPI, __itt_track*, track_create, (__itt_track_group* track_group,__itt_string_handle* name, __itt_track_type track_type), (ITT_FORMAT track_group, name, track_type), track_create, __itt_group_structure, "%p, %p, %d") +ITT_STUBV(ITTAPI, void, set_track, (__itt_track *track), (ITT_FORMAT track), set_track, __itt_group_structure, "%p") + +#ifndef __ITT_INTERNAL_BODY +ITT_STUB(ITTAPI, const char*, api_version, (void), (ITT_NO_PARAMS), api_version, __itt_group_all & ~__itt_group_legacy, "no args") +#endif /* __ITT_INTERNAL_BODY */ + +#ifndef __ITT_INTERNAL_BODY +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, int, av_saveA, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder), (ITT_FORMAT data, rank, dimensions, type, filePath, columnOrder), av_saveA, __itt_group_arrays, "%p, %d, %p, %d, \"%s\", %d") +ITT_STUB(ITTAPI, int, av_saveW, (void *data, int rank, const int *dimensions, int type, const wchar_t *filePath, int columnOrder), (ITT_FORMAT data, rank, dimensions, type, filePath, columnOrder), av_saveW, __itt_group_arrays, "%p, %d, %p, %d, \"%S\", %d") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, int, av_save, (void *data, int rank, const int *dimensions, int type, const char *filePath, int columnOrder), (ITT_FORMAT data, rank, dimensions, type, filePath, columnOrder), av_save, __itt_group_arrays, "%p, %d, %p, %d, \"%s\", %d") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* __ITT_INTERNAL_BODY */ + +#ifndef __ITT_INTERNAL_BODY +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, module_loadA, (void *start_addr, void* end_addr, const char *path), (ITT_FORMAT start_addr, end_addr, path), module_loadA, __itt_group_none, "%p, %p, %p") +ITT_STUBV(ITTAPI, void, module_loadW, (void *start_addr, void* end_addr, const wchar_t *path), (ITT_FORMAT start_addr, end_addr, path), module_loadW, __itt_group_none, "%p, %p, %p") +#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, module_load, (void *start_addr, void *end_addr, const char *path), (ITT_FORMAT start_addr, end_addr, path), module_load, __itt_group_none, "%p, %p, %p") +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* __ITT_INTERNAL_BODY */ + + +#endif /* __ITT_INTERNAL_INIT */ diff --git a/js/src/vtune/ittnotify_types.h b/js/src/vtune/ittnotify_types.h index 3f2cd7f0c9ca..e10250bd63d4 100644 --- a/js/src/vtune/ittnotify_types.h +++ b/js/src/vtune/ittnotify_types.h @@ -1,10 +1,10 @@ -/* +/* This file is provided under a dual BSD/GPLv2 license. When using or redistributing this file, you may do so under either license. GPL LICENSE SUMMARY - Copyright (c) 2005-2012 Intel Corporation. All rights reserved. + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as @@ -26,7 +26,7 @@ BSD LICENSE - Copyright (c) 2005-2012 Intel Corporation. All rights reserved. + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -54,7 +54,8 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + */ + #ifndef _ITTNOTIFY_TYPES_H_ #define _ITTNOTIFY_TYPES_H_ diff --git a/js/src/vtune/jitprofiling.c b/js/src/vtune/jitprofiling.c index 558af0c306ae..f5305c3b1cb2 100644 --- a/js/src/vtune/jitprofiling.c +++ b/js/src/vtune/jitprofiling.c @@ -1,10 +1,10 @@ -/* +/* This file is provided under a dual BSD/GPLv2 license. When using or redistributing this file, you may do so under either license. GPL LICENSE SUMMARY - Copyright (c) 2005-2012 Intel Corporation. All rights reserved. + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as @@ -26,7 +26,7 @@ BSD LICENSE - Copyright (c) 2005-2012 Intel Corporation. All rights reserved. + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -54,22 +54,21 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + */ + #include "vtune/ittnotify_config.h" #if ITT_PLATFORM==ITT_PLATFORM_WIN #include -#pragma optimize("", off) -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ -#include -#include #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM != ITT_PLATFORM_MAC && ITT_PLATFORM != ITT_PLATFORM_FREEBSD #include +#endif #include #include "vtune/jitprofiling.h" -static const char rcsid[] = "\n@(#) $Revision: 294150 $\n"; +static const char rcsid[] = "\n@(#) $Revision: 471937 $\n"; #define DLL_ENVIRONMENT_VAR "VS_PROFILER" @@ -84,7 +83,10 @@ static const char rcsid[] = "\n@(#) $Revision: 294150 $\n"; #if ITT_PLATFORM==ITT_PLATFORM_WIN #define DEFAULT_DLLNAME "JitPI.dll" HINSTANCE m_libHandle = NULL; -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#elif ITT_PLATFORM==ITT_PLATFORM_MAC +#define DEFAULT_DLLNAME "libJitPI.dylib" +void* m_libHandle = NULL; +#else #define DEFAULT_DLLNAME "libJitPI.so" void* m_libHandle = NULL; #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ @@ -93,191 +95,62 @@ void* m_libHandle = NULL; #define ANDROID_JIT_AGENT_PATH "/data/intel/libittnotify.so" /* the function pointers */ -typedef unsigned int(*TPInitialize)(void); +typedef unsigned int(JITAPI *TPInitialize)(void); static TPInitialize FUNC_Initialize=NULL; -typedef unsigned int(*TPNotify)(unsigned int, void*); +typedef unsigned int(JITAPI *TPNotify)(unsigned int, void*); static TPNotify FUNC_NotifyEvent=NULL; static iJIT_IsProfilingActiveFlags executionMode = iJIT_NOTHING_RUNNING; /* end collector dll part. */ -/* loadiJIT_Funcs() : this function is called just in the beginning - * and is responsible to load the functions from BistroJavaCollector.dll +/* loadiJIT_Funcs() : this function is called just in the beginning + * and is responsible to load the functions from BistroJavaCollector.dll * result: * on success: the functions loads, iJIT_DLL_is_missing=0, return value = 1 * on failure: the functions are NULL, iJIT_DLL_is_missing=1, return value = 0 - */ + */ static int loadiJIT_Funcs(void); -/* global representing whether the BistroJavaCollector can't be loaded */ +/* global representing whether the collector can't be loaded */ static int iJIT_DLL_is_missing = 0; -/* Virtual stack - the struct is used as a virtual stack for each thread. - * Every thread initializes with a stack of size INIT_TOP_STACK. - * Every method entry decreases from the current stack point, - * and when a thread stack reaches its top of stack (return from the global - * function), the top of stack and the current stack increase. Notice that - * when returning from a function the stack pointer is the address of - * the function return. -*/ -#if ITT_PLATFORM==ITT_PLATFORM_WIN -static DWORD threadLocalStorageHandle = 0; -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ -static pthread_key_t threadLocalStorageHandle = (pthread_key_t)0; -#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - -#define INIT_TOP_Stack 10000 - -typedef struct -{ - unsigned int TopStack; - unsigned int CurrentStack; -} ThreadStack, *pThreadStack; - -/* end of virtual stack. */ - -/* - * The function for reporting virtual-machine related events to VTune. - * Note: when reporting iJVM_EVENT_TYPE_ENTER_NIDS, there is no need to fill - * in the stack_id field in the iJIT_Method_NIDS structure, as VTune fills it. - * The return value in iJVM_EVENT_TYPE_ENTER_NIDS && - * iJVM_EVENT_TYPE_LEAVE_NIDS events will be 0 in case of failure. - * in iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED event - * it will be -1 if EventSpecificData == 0 otherwise it will be 0. -*/ - -ITT_EXTERN_C int JITAPI +ITT_EXTERN_C int JITAPI iJIT_NotifyEvent(iJIT_JVM_EVENT event_type, void *EventSpecificData) { - int ReturnValue; + int ReturnValue = 0; - /* - * This section is for debugging outside of VTune. - * It creates the environment variables that indicates call graph mode. - * If running outside of VTune remove the remark. - * - * - * static int firstTime = 1; - * char DoCallGraph[12] = "DoCallGraph"; - * if (firstTime) - * { - * firstTime = 0; - * SetEnvironmentVariable( "BISTRO_COLLECTORS_DO_CALLGRAPH", DoCallGraph); - * } - * - * end of section. - */ - - /* initialization part - the functions have not been loaded yet. This part - * will load the functions, and check if we are in Call Graph mode. - * (for special treatment). - */ - if (!FUNC_NotifyEvent) + /* initialization part - the collector has not been loaded yet. */ + if (!FUNC_NotifyEvent) { - if (iJIT_DLL_is_missing) + if (iJIT_DLL_is_missing) return 0; - /* load the Function from the DLL */ - if (!loadiJIT_Funcs()) + if (!loadiJIT_Funcs()) return 0; - - /* Call Graph initialization. */ } - /* If the event is method entry/exit, check that in the current mode - * VTune is allowed to receive it - */ - if ((event_type == iJVM_EVENT_TYPE_ENTER_NIDS || - event_type == iJVM_EVENT_TYPE_LEAVE_NIDS) && - (executionMode != iJIT_CALLGRAPH_ON)) + if (event_type == iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED || + event_type == iJVM_EVENT_TYPE_METHOD_UPDATE) { - return 0; - } - /* This section is performed when method enter event occurs. - * It updates the virtual stack, or creates it if this is the first - * method entry in the thread. The stack pointer is decreased. - */ - if (event_type == iJVM_EVENT_TYPE_ENTER_NIDS) - { -#if ITT_PLATFORM==ITT_PLATFORM_WIN - pThreadStack threadStack = - (pThreadStack)TlsGetValue (threadLocalStorageHandle); -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - pThreadStack threadStack = - (pThreadStack)pthread_getspecific(threadLocalStorageHandle); -#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - - /* check for use of reserved method IDs */ - if ( ((piJIT_Method_NIDS) EventSpecificData)->method_id <= 999 ) - return 0; - - if (!threadStack) - { - /* initialize the stack. */ - threadStack = (pThreadStack) calloc (sizeof(ThreadStack), 1); - if (!threadStack) - return 0; - threadStack->TopStack = INIT_TOP_Stack; - threadStack->CurrentStack = INIT_TOP_Stack; -#if ITT_PLATFORM==ITT_PLATFORM_WIN - TlsSetValue(threadLocalStorageHandle,(void*)threadStack); -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - pthread_setspecific(threadLocalStorageHandle,(void*)threadStack); -#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - } - - /* decrease the stack. */ - ((piJIT_Method_NIDS) EventSpecificData)->stack_id = - (threadStack->CurrentStack)--; - } - - /* This section is performed when method leave event occurs - * It updates the virtual stack. - * Increases the stack pointer. - * If the stack pointer reached the top (left the global function) - * increase the pointer and the top pointer. - */ - if (event_type == iJVM_EVENT_TYPE_LEAVE_NIDS) - { -#if ITT_PLATFORM==ITT_PLATFORM_WIN - pThreadStack threadStack = - (pThreadStack)TlsGetValue (threadLocalStorageHandle); -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - pThreadStack threadStack = - (pThreadStack)pthread_getspecific(threadLocalStorageHandle); -#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - - /* check for use of reserved method IDs */ - if ( ((piJIT_Method_NIDS) EventSpecificData)->method_id <= 999 ) - return 0; - - if (!threadStack) - { - /* Error: first report in this thread is method exit */ - exit (1); - } - - ((piJIT_Method_NIDS) EventSpecificData)->stack_id = - ++(threadStack->CurrentStack) + 1; - - if (((piJIT_Method_NIDS) EventSpecificData)->stack_id - > threadStack->TopStack) - ((piJIT_Method_NIDS) EventSpecificData)->stack_id = - (unsigned int)-1; - } - - if (event_type == iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED) - { - /* check for use of reserved method IDs */ - if ( ((piJIT_Method_Load) EventSpecificData)->method_id <= 999 ) + if (((piJIT_Method_Load)EventSpecificData)->method_id == 0) return 0; } else if (event_type == iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2) { - /* check for use of reserved method IDs */ - if ( ((piJIT_Method_Load_V2) EventSpecificData)->method_id <= 999 ) + if (((piJIT_Method_Load_V2)EventSpecificData)->method_id == 0) + return 0; + } + else if (event_type == iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V3) + { + if (((piJIT_Method_Load_V3)EventSpecificData)->method_id == 0) + return 0; + } + else if (event_type == iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED) + { + if (((piJIT_Method_Inline_Load)EventSpecificData)->method_id == 0 || + ((piJIT_Method_Inline_Load)EventSpecificData)->parent_method_id == 0) return 0; } @@ -286,26 +159,6 @@ iJIT_NotifyEvent(iJIT_JVM_EVENT event_type, void *EventSpecificData) return ReturnValue; } -/* The new mode call back routine */ -ITT_EXTERN_C void JITAPI -iJIT_RegisterCallbackEx(void *userdata, iJIT_ModeChangedEx - NewModeCallBackFuncEx) -{ - /* is it already missing... or the load of functions from the DLL failed */ - if (iJIT_DLL_is_missing || !loadiJIT_Funcs()) - { - /* then do not bother with notifications */ - NewModeCallBackFuncEx(userdata, iJIT_NO_NOTIFICATIONS); - /* Error: could not load JIT functions. */ - return; - } - /* nothing to do with the callback */ -} - -/* - * This function allows the user to query in which mode, if at all, - *VTune is running - */ ITT_EXTERN_C iJIT_IsProfilingActiveFlags JITAPI iJIT_IsProfilingActive() { if (!iJIT_DLL_is_missing) @@ -316,11 +169,10 @@ ITT_EXTERN_C iJIT_IsProfilingActiveFlags JITAPI iJIT_IsProfilingActive() return executionMode; } -/* this function loads the collector dll (BistroJavaCollector) - * and the relevant functions. +/* This function loads the collector dll and the relevant functions. * on success: all functions load, iJIT_DLL_is_missing = 0, return value = 1 * on failure: all functions are NULL, iJIT_DLL_is_missing = 1, return value = 0 - */ + */ static int loadiJIT_Funcs() { static int bDllWasLoaded = 0; @@ -339,7 +191,7 @@ static int loadiJIT_Funcs() iJIT_DLL_is_missing = 1; FUNC_NotifyEvent = NULL; - if (m_libHandle) + if (m_libHandle) { #if ITT_PLATFORM==ITT_PLATFORM_WIN FreeLibrary(m_libHandle); @@ -356,15 +208,18 @@ static int loadiJIT_Funcs() { DWORD envret = 0; dllName = (char*)malloc(sizeof(char) * (dNameLength + 1)); - envret = GetEnvironmentVariableA(NEW_DLL_ENVIRONMENT_VAR, - dllName, dNameLength); - if (envret) + if(dllName != NULL) { - /* Try to load the dll from the PATH... */ - m_libHandle = LoadLibraryExA(dllName, - NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + envret = GetEnvironmentVariableA(NEW_DLL_ENVIRONMENT_VAR, + dllName, dNameLength); + if (envret) + { + /* Try to load the dll from the PATH... */ + m_libHandle = LoadLibraryExA(dllName, + NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + } + free(dllName); } - free(dllName); } else { /* Try to use old VS_PROFILER variable */ dNameLength = GetEnvironmentVariableA(DLL_ENVIRONMENT_VAR, NULL, 0); @@ -372,21 +227,24 @@ static int loadiJIT_Funcs() { DWORD envret = 0; dllName = (char*)malloc(sizeof(char) * (dNameLength + 1)); - envret = GetEnvironmentVariableA(DLL_ENVIRONMENT_VAR, - dllName, dNameLength); - if (envret) + if(dllName != NULL) { - /* Try to load the dll from the PATH... */ - m_libHandle = LoadLibraryA(dllName); + envret = GetEnvironmentVariableA(DLL_ENVIRONMENT_VAR, + dllName, dNameLength); + if (envret) + { + /* Try to load the dll from the PATH... */ + m_libHandle = LoadLibraryA(dllName); + } + free(dllName); } - free(dllName); } } #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ dllName = getenv(NEW_DLL_ENVIRONMENT_VAR); if (!dllName) dllName = getenv(DLL_ENVIRONMENT_VAR); -#ifdef ANDROID +#if defined(__ANDROID__) || defined(ANDROID) if (!dllName) dllName = ANDROID_JIT_AGENT_PATH; #endif @@ -409,8 +267,8 @@ static int loadiJIT_Funcs() /* if the dll wasn't loaded - exit. */ if (!m_libHandle) { - iJIT_DLL_is_missing = 1; /* don't try to initialize - * JIT agent the second time + iJIT_DLL_is_missing = 1; /* don't try to initialize + * JIT agent the second time */ return 0; } @@ -442,84 +300,12 @@ static int loadiJIT_Funcs() bDllWasLoaded = 1; iJIT_DLL_is_missing = 0; /* DLL is ok. */ - /* - * Call Graph mode: init the thread local storage - * (need to store the virtual stack there). - */ - if ( executionMode == iJIT_CALLGRAPH_ON ) - { - /* Allocate a thread local storage slot for the thread "stack" */ - if (!threadLocalStorageHandle) -#if ITT_PLATFORM==ITT_PLATFORM_WIN - threadLocalStorageHandle = TlsAlloc(); -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - pthread_key_create(&threadLocalStorageHandle, NULL); -#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - } - return 1; } -/* - * This function should be called by the user whenever a thread ends, - * to free the thread "virtual stack" storage - */ -ITT_EXTERN_C void JITAPI FinalizeThread() -{ - if (threadLocalStorageHandle) - { -#if ITT_PLATFORM==ITT_PLATFORM_WIN - pThreadStack threadStack = - (pThreadStack)TlsGetValue (threadLocalStorageHandle); -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - pThreadStack threadStack = - (pThreadStack)pthread_getspecific(threadLocalStorageHandle); -#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - if (threadStack) - { - free (threadStack); - threadStack = NULL; -#if ITT_PLATFORM==ITT_PLATFORM_WIN - TlsSetValue (threadLocalStorageHandle, threadStack); -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - pthread_setspecific(threadLocalStorageHandle, threadStack); -#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - } - } -} - -/* - * This function should be called by the user when the process ends, - * to free the local storage index -*/ -ITT_EXTERN_C void JITAPI FinalizeProcess() -{ - if (m_libHandle) - { -#if ITT_PLATFORM==ITT_PLATFORM_WIN - FreeLibrary(m_libHandle); -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - dlclose(m_libHandle); -#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - m_libHandle = NULL; - } - - if (threadLocalStorageHandle) -#if ITT_PLATFORM==ITT_PLATFORM_WIN - TlsFree (threadLocalStorageHandle); -#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ - pthread_key_delete(threadLocalStorageHandle); -#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ -} - -/* - * This function should be called by the user for any method once. - * The function will return a unique method ID, the user should maintain - * the ID for each method - */ ITT_EXTERN_C unsigned int JITAPI iJIT_GetNewMethodID() { - static unsigned int methodID = 0x100000; + static unsigned int methodID = 1; if (methodID == 0) return 0; /* ERROR : this is not a valid value */ diff --git a/js/src/vtune/jitprofiling.h b/js/src/vtune/jitprofiling.h index e7d42c22a927..3e166c04d435 100644 --- a/js/src/vtune/jitprofiling.h +++ b/js/src/vtune/jitprofiling.h @@ -1,10 +1,10 @@ -/* +/* This file is provided under a dual BSD/GPLv2 license. When using or redistributing this file, you may do so under either license. GPL LICENSE SUMMARY - Copyright (c) 2005-2013 Intel Corporation. All rights reserved. + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as @@ -26,7 +26,7 @@ BSD LICENSE - Copyright (c) 2005-2013 Intel Corporation. All rights reserved. + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -54,7 +54,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + */ #ifndef __JITPROFILING_H__ #define __JITPROFILING_H__ @@ -70,11 +70,11 @@ * associated with JIT-compiled code. * * These APIs can be used to\n - * **Profile trace-based and method-based JIT-compiled - * code**. Some examples of environments that you can profile with this APIs: - * dynamic JIT compilation of JavaScript code traces, OpenCL JIT execution, - * Java/.NET managed execution environments, and custom ISV JIT engines. - * + * - **Profile trace-based and method-based JIT-compiled + * code**. Some examples of environments that you can profile with these APIs: + * dynamic JIT compilation of JavaScript code traces, JIT execution in OpenCL(TM) + * software technology, Java/.NET managed execution environments, and custom + * ISV JIT engines. * @code * #include * @@ -94,8 +94,8 @@ * iJIT_NotifyEvent(iJVM_EVENT_TYPE_SHUTDOWN, NULL); * @endcode * - * * Expected behaviour: - * * If any iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED event overwrites + * * Expected behavior: + * * If any iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED event overwrites an * already reported method, then such a method becomes invalid and its * memory region is treated as unloaded. VTune Amplifier displays the metrics * collected by the method until it is overwritten. @@ -104,15 +104,15 @@ * the first line number. * * Dynamically generated code can be associated with a module name. * Use the iJIT_Method_Load_V2 structure.\n - * Clarification of some cases:\n - * * If you register a function with the same method ID multiple times + * Clarification of some cases: + * * If you register a function with the same method ID multiple times, * specifying different module names, then the VTune Amplifier picks up * the module name registered first. If you want to distinguish the same * function between different JIT engines, supply different method IDs for * each function. Other symbolic information (for example, source file) * can be identical. * - * **Analyze split functions** (multiple joint or disjoint code regions + * - **Analyze split functions** (multiple joint or disjoint code regions * belonging to the same function) **including re-JIT** * with potential overlapping of code regions in time, which is common in * resource-limited environments. @@ -123,45 +123,44 @@ * * iJIT_Method_Load a = {0}; * a.method_id = method_id; - * a.method_load_address = acode_addr; - * a.method_size = acode_size; + * a.method_load_address = 0x100; + * a.method_size = 0x20; * * iJIT_Method_Load b = {0}; * b.method_id = method_id; - * b.method_load_address = baddr_second; - * b.method_size = bsize_second; + * b.method_load_address = 0x200; + * b.method_size = 0x30; * * iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&a); * iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&b); * @endcode * * * Expected behaviour: - * * If a iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED event overwrites + * * If a iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED event overwrites an * already reported method, then such a method becomes invalid and * its memory region is treated as unloaded. * * All code regions reported with the same method ID are considered as * belonging to the same method. Symbolic information (method name, - * source file name) will be taken from the first notification, all + * source file name) will be taken from the first notification, and all * subsequent notifications with the same method ID will be processed * only for line number table information. So, the VTune Amplifier will map * samples to a source line using the line number table from the current - * notification while taking source file name from the very first one.\n + * notification while taking the source file name from the very first one.\n * Clarification of some cases:\n * * If you register a second code region with a different source file * name and the same method ID, then this information will be saved and * will not be considered as an extension of the first code region, but - * VTune Amplifier will use source file of the first code region and map + * VTune Amplifier will use the source file of the first code region and map * performance metrics incorrectly. * * If you register a second code region with the same source file as - * for the first region and the same method ID, then source file will be + * for the first region and the same method ID, then the source file will be * discarded but VTune Amplifier will map metrics to the source file correctly. * * If you register a second code region with a null source file and * the same method ID, then provided line number info will be associated * with the source file of the first code region. * - * **Explore inline functions** including multi-level hierarchy of - * nested inlines to see how performance metrics are distributed through them. - * + * - **Explore inline functions** including multi-level hierarchy of + * nested inline methods which shows how performance metrics are distributed through them. * @code * #include * @@ -194,25 +193,24 @@ * * * Requirements: * * Each inline (iJIT_Method_Inline_Load) method should be associated - * with two method IDs: one for itself, one for its immediate parent. + * with two method IDs: one for itself; one for its immediate parent. * * Address regions of inline methods of the same parent method cannot * overlap each other. * * Execution of the parent method must not be started until it and all - * its inlines are reported. + * its inline methods are reported. * * Expected behaviour: - * * In case of nested inlines an order of + * * In case of nested inline methods an order of * iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED events is not important. * * If any event overwrites either inline method or top parent method, - * then the parent including inlines becomes invalid and its memory + * then the parent, including inline methods, becomes invalid and its memory * region is treated as unloaded. * * **Life time of allocated data**\n * The client sends an event notification to the agent with event-specific - * data, which is a structure. The pointers in the structure refers to memory + * data, which is a structure. The pointers in the structure refer to memory * allocated by the client, which responsible for releasing it. The pointers are - * used by the iJIT_NotifyEvent method to copy client's data in a trace file + * used by the iJIT_NotifyEvent method to copy client's data in a trace file, * and they are not used after the iJIT_NotifyEvent method returns. - * */ /** @@ -222,31 +220,29 @@ */ /** - * @enum iJIT_jvm_event * @brief Enumerator for the types of notifications */ typedef enum iJIT_jvm_event { - iJVM_EVENT_TYPE_SHUTDOWN = 2, /**< Send to shutdown the agent. + iJVM_EVENT_TYPE_SHUTDOWN = 2, /**<\brief Send this to shutdown the agent. * Use NULL for event data. */ - iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED = 13, /**< Send when a dynamic code is + iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED = 13, /**<\brief Send when dynamic code is * JIT compiled and loaded into - * memory by the JIT engine but + * memory by the JIT engine, but * before the code is executed. * Use iJIT_Method_Load as event * data. */ /** @cond exclude_from_documentation */ - iJVM_EVENT_TYPE_METHOD_UNLOAD_START, /**< Send when a compiled dynamic + iJVM_EVENT_TYPE_METHOD_UNLOAD_START, /**<\brief Send when compiled dynamic * code is being unloaded from memory. * Use iJIT_Method_Load as event data.*/ /** @endcond */ -//TODO: add a note that line info assumes from method load - iJVM_EVENT_TYPE_METHOD_UPDATE, /**< Send to provide a new content for - * an early reported dynamic code. - * The previous content will be invalidate - * starting from time of the notification. + iJVM_EVENT_TYPE_METHOD_UPDATE, /**<\brief Send to provide new content for + * a previously reported dynamic code. + * The previous content will be invalidated + * starting from the time of the notification. * Use iJIT_Method_Load as event data but * required fields are following: * - method_id identify the code to update. @@ -256,103 +252,46 @@ typedef enum iJIT_jvm_event * - method_size specify length of updated code * range. */ - iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, /**< Send when an inline dynamic + + iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, /**<\brief Send when an inline dynamic * code is JIT compiled and loaded - * into memory by the JIT engine + * into memory by the JIT engine, * but before the parent code region - * is started executing. + * starts executing. * Use iJIT_Method_Inline_Load as event data.*/ /** @cond exclude_from_documentation */ - /* Legacy stuff. Do not use it. */ - iJVM_EVENT_TYPE_ENTER_NIDS = 19, - iJVM_EVENT_TYPE_LEAVE_NIDS, + iJVM_EVENT_TYPE_METHOD_UPDATE_V2, /** @endcond */ - iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2 /**< Send when a dynamic code is - * JIT compiled and loaded into - * memory by the JIT engine but - * before the code is executed. - * Use iJIT_Method_Load_V2 as event - * data. */ + iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2 = 21, /**<\brief Send when a dynamic code is + * JIT compiled and loaded into + * memory by the JIT engine, but + * before the code is executed. + * Use iJIT_Method_Load_V2 as event data. */ + + iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V3 /**<\brief Send when a dynamic code is + * JIT compiled and loaded into + * memory by the JIT engine, but + * before the code is executed. + * Use iJIT_Method_Load_V3 as event data. */ } iJIT_JVM_EVENT; -/** @cond exclude_from_documentation */ -/* Legacy stuff. Do not use it. */ -typedef enum _iJIT_ModeFlags -{ - iJIT_NO_NOTIFICATIONS = 0x0000, - iJIT_BE_NOTIFY_ON_LOAD = 0x0001, - iJIT_BE_NOTIFY_ON_UNLOAD = 0x0002, - iJIT_BE_NOTIFY_ON_METHOD_ENTRY = 0x0004, - iJIT_BE_NOTIFY_ON_METHOD_EXIT = 0x0008 - -} iJIT_ModeFlags; -/** @endcond */ - /** - * @enum _iJIT_IsProfilingActiveFlags * @brief Enumerator for the agent's mode */ typedef enum _iJIT_IsProfilingActiveFlags { - iJIT_NOTHING_RUNNING = 0x0000, /**< The agent is not running. + iJIT_NOTHING_RUNNING = 0x0000, /**<\brief The agent is not running; * iJIT_NotifyEvent calls will * not be processed. */ - iJIT_SAMPLING_ON = 0x0001, /**< The agent is running and + iJIT_SAMPLING_ON = 0x0001, /**<\brief The agent is running and * ready to process notifications. */ - -/** @cond exclude_from_documentation */ - /* Legacy. Call Graph is running */ - iJIT_CALLGRAPH_ON = 0x0002 -/** @endcond */ - } iJIT_IsProfilingActiveFlags; -/** @cond exclude_from_documentation */ -/* Legacy stuff. Do not use it. */ -typedef enum _iJDEnvironmentType -{ - iJDE_JittingAPI = 2 - -} iJDEnvironmentType; - -typedef struct _iJIT_Method_Id -{ - unsigned int method_id; - -} *piJIT_Method_Id, iJIT_Method_Id; - -typedef struct _iJIT_Method_NIDS -{ - unsigned int method_id; /**< Unique method ID */ - unsigned int stack_id; /**< NOTE: no need to fill this field, - * it's filled by VTune Amplifier */ - char* method_name; /**< Method name (just the method, without the class) */ - -} *piJIT_Method_NIDS, iJIT_Method_NIDS; -/** @endcond */ - -typedef enum _iJIT_CodeType -{ - iJIT_CT_UNKNOWN = 0, - iJIT_CT_CODE, // executable code - iJIT_CT_DATA, // this kind of "update" will be excluded from the function's body. - iJIT_CT_EOF -} iJIT_CodeType; - -typedef struct _iJIT_Method_Update -{ - unsigned int method_id; - void* load_address; - unsigned int size; - iJIT_CodeType type; - -} *piJIT_Method_Update, iJIT_Method_Update; - /** - * @details Describes a single entry in the line number information of - * a code region that gives information about how the reported code region + * @brief Description of a single entry in the line number information of a code region. + * @details A table of line number entries gives information about how the reported code region * is mapped to source file. * Intel(R) VTune(TM) Amplifier uses line number information to attribute * the samples (virtual address) to a line number. \n @@ -365,7 +304,7 @@ typedef struct _iJIT_Method_Update * 18 1 * 21 30 * - * VTune(TM) Amplifier XE contsructs the following table using the client data + * VTune Amplifier constructs the following table using the client data * * Code subrange Line number * 0-1 2 @@ -377,188 +316,344 @@ typedef struct _iJIT_Method_Update */ typedef struct _LineNumberInfo { - unsigned int Offset; /**< Offset from the begining of the code region. */ - unsigned int LineNumber; /**< Matching source line number offset (from beginning of source file). */ + unsigned int Offset; /**<\brief Offset from the begining of the code region. */ + unsigned int LineNumber; /**<\brief Matching source line number offset (from beginning of source file). */ } *pLineNumberInfo, LineNumberInfo; /** - * Description of a JIT-compiled method + * @brief Enumerator for the code architecture. + */ +typedef enum _iJIT_CodeArchitecture +{ + iJIT_CA_NATIVE = 0, /**<\brief Native to the process architecture that is calling it. */ + + iJIT_CA_32, /**<\brief 32-bit machine code. */ + + iJIT_CA_64 /**<\brief 64-bit machine code. */ + +} iJIT_CodeArchitecture; + +#pragma pack(push, 8) + +/** + * @brief Description of a JIT-compiled method + * @details When you use the iJIT_Method_Load structure to describe + * the JIT compiled method, use iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED + * as an event type to report it. */ typedef struct _iJIT_Method_Load { - unsigned int method_id; /**< Unique method ID. - * Method ID cannot be smaller than 999. - * Either you use the API function + unsigned int method_id; /**<\brief Unique method ID. Cannot be 0. + * You must either use the API function * iJIT_GetNewMethodID to get a valid and unique - * method ID, or you take care of ID uniqueness + * method ID, or else manage ID uniqueness * and correct range by yourself.\n * You must use the same method ID for all code * regions of the same method, otherwise different - * method IDs mean different methods. */ + * method IDs specify different methods. */ - char* method_name; /** The name of the method. It can be optionally + char* method_name; /**<\brief The name of the method. It can be optionally * prefixed with its class name and appended with - * its complete signature. Can't be NULL. */ + * its complete signature. Can't be NULL. */ - void* method_load_address; /** The start virtual address of the method code - * region. If NULL that data provided with + void* method_load_address; /**<\brief The start virtual address of the method code + * region. If NULL, data provided with * event are not accepted. */ - unsigned int method_size; /** The code size of the method in memory. + unsigned int method_size; /**<\brief The code size of the method in memory. * If 0, then data provided with the event are not * accepted. */ - unsigned int line_number_size; /** The number of entries in the line number + unsigned int line_number_size; /**<\brief The number of entries in the line number * table.0 if none. */ - pLineNumberInfo line_number_table; /** Pointer to the line numbers info + pLineNumberInfo line_number_table; /**<\brief Pointer to the line numbers info * array. Can be NULL if * line_number_size is 0. See * LineNumberInfo Structure for a * description of a single entry in * the line number info array */ - unsigned int class_id; /** This field is obsolete. */ + unsigned int class_id; /**<\brief This field is obsolete. */ - char* class_file_name; /** Class name. Can be NULL.*/ + char* class_file_name; /**<\brief Class name. Can be NULL.*/ - char* source_file_name; /** Source file name. Can be NULL.*/ - - void* user_data; /** This field is obsolete. */ - - unsigned int user_data_size; /** This field is obsolete. */ - - iJDEnvironmentType env; /** This field is obsolete. */ + char* source_file_name; /**<\brief Source file name. Can be NULL.*/ } *piJIT_Method_Load, iJIT_Method_Load; -#pragma pack(push, 8) /** - * Description of a JIT-compiled method - * - * When you use the iJIT_Method_Load_V2 structure to describe + * @brief Description of a JIT-compiled method + * @details When you use the iJIT_Method_Load_V2 structure to describe * the JIT compiled method, use iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2 * as an event type to report it. */ typedef struct _iJIT_Method_Load_V2 { - unsigned int method_id; /**< Unique method ID. - * Method ID cannot be smaller than 999. - * Either you use the API function + unsigned int method_id; /**<\brief Unique method ID. Cannot be 0. + * You must either use the API function * iJIT_GetNewMethodID to get a valid and unique - * method ID, or you take care of ID uniqueness + * method ID, or else manage ID uniqueness * and correct range by yourself.\n * You must use the same method ID for all code * regions of the same method, otherwise different - * method IDs mean different methods. */ + * method IDs specify different methods. */ - char* method_name; /** The name of the method. It can be optionally + char* method_name; /**<\brief The name of the method. It can be optionally * prefixed with its class name and appended with * its complete signature. Can't be NULL. */ - void* method_load_address; /** The start virtual address of the method code - * region. If NULL that data provided with + void* method_load_address; /**<\brief The start virtual address of the method code + * region. If NULL, then data provided with the * event are not accepted. */ - unsigned int method_size; /** The code size of the method in memory. + unsigned int method_size; /**<\brief The code size of the method in memory. * If 0, then data provided with the event are not * accepted. */ - unsigned int line_number_size; /** The number of entries in the line number - * table.0 if none. */ + unsigned int line_number_size; /**<\brief The number of entries in the line number + * table. 0 if none. */ - pLineNumberInfo line_number_table; /** Pointer to the line numbers info + pLineNumberInfo line_number_table; /**<\brief Pointer to the line numbers info * array. Can be NULL if * line_number_size is 0. See * LineNumberInfo Structure for a * description of a single entry in - * the line number info array */ + * the line number info array. */ - char* class_file_name; /** Class name. Can be NULL.*/ + char* class_file_name; /**<\brief Class name. Can be NULL. */ - char* source_file_name; /** Source file name. Can be NULL.*/ + char* source_file_name; /**<\brief Source file name. Can be NULL. */ - char* module_name; /** Module name. Can be NULL. + char* module_name; /**<\brief Module name. Can be NULL. The module name can be useful for distinguishing among - different JIT engines. Intel VTune Amplifier will display - reported methods split by specified modules */ + different JIT engines. VTune Amplifier will display + reported methods grouped by specific module. */ } *piJIT_Method_Load_V2, iJIT_Method_Load_V2; -#pragma pack(pop) /** - * Description of an inline JIT-compiled method + * @brief Description of a JIT-compiled method + * @details The iJIT_Method_Load_V3 structure is the same as iJIT_Method_Load_V2 + * with a newly introduced 'arch' field that specifies architecture of the code region. + * When you use the iJIT_Method_Load_V3 structure to describe + * the JIT compiled method, use iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V3 + * as an event type to report it. + */ +typedef struct _iJIT_Method_Load_V3 +{ + unsigned int method_id; /**<\brief Unique method ID. Cannot be 0. + * You must either use the API function + * iJIT_GetNewMethodID to get a valid and unique + * method ID, or manage ID uniqueness + * and correct range by yourself.\n + * You must use the same method ID for all code + * regions of the same method, otherwise they are + * treated as regions of different methods. */ + + char* method_name; /**<\brief The name of the method. It can be optionally + * prefixed with its class name and appended with + * its complete signature. Cannot be NULL. */ + + void* method_load_address; /**<\brief The start virtual address of the method code + * region. If NULL, then data provided with the + * event are not accepted. */ + + unsigned int method_size; /**<\brief The code size of the method in memory. + * If 0, then data provided with the event are not + * accepted. */ + + unsigned int line_number_size; /**<\brief The number of entries in the line number + * table. 0 if none. */ + + pLineNumberInfo line_number_table; /**<\brief Pointer to the line numbers info + * array. Can be NULL if + * line_number_size is 0. See + * LineNumberInfo Structure for a + * description of a single entry in + * the line number info array. */ + + char* class_file_name; /**<\brief Class name. Can be NULL. */ + + char* source_file_name; /**<\brief Source file name. Can be NULL. */ + + char* module_name; /**<\brief Module name. Can be NULL. + * The module name can be useful for distinguishing among + * different JIT engines. VTune Amplifier will display + * reported methods grouped by specific module. */ + + iJIT_CodeArchitecture module_arch; /**<\brief Architecture of the method's code region. + * By default, it is the same as the process + * architecture that is calling it. + * For example, you can use it if your 32-bit JIT + * engine generates 64-bit code. + * + * If JIT engine reports both 32-bit and 64-bit types + * of methods then VTune Amplifier splits the methods + * with the same module name but with different + * architectures in two different modules. VTune Amplifier + * modifies the original name provided with a 64-bit method + * version by ending it with '(64)' */ + +} *piJIT_Method_Load_V3, iJIT_Method_Load_V3; + +/** + * @brief Description of an inline JIT-compiled method + * @details When you use the_iJIT_Method_Inline_Load structure to describe + * the JIT compiled method, use iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED + * as an event type to report it. */ typedef struct _iJIT_Method_Inline_Load { - unsigned int method_id; /**< Unique method ID. - * Method ID cannot be smaller than 999. - * Either you use the API function + unsigned int method_id; /**<\brief Unique method ID. Cannot be 0. + * You must either use the API function * iJIT_GetNewMethodID to get a valid and unique - * method ID, or you take care of ID uniqueness + * method ID, or else manage ID uniqueness * and correct range by yourself. */ - unsigned int parent_method_id; /** Unique immediate parent's method ID. - * Method ID may not be smaller than 999. - * Either you use the API function + unsigned int parent_method_id; /**<\brief Unique immediate parent's method ID. + * Cannot be 0. + * You must either use the API function * iJIT_GetNewMethodID to get a valid and unique - * method ID, or you take care of ID uniqueness + * method ID, or else manage ID uniqueness * and correct range by yourself. */ - char* method_name; /** The name of the method. It can be optionally + char* method_name; /**<\brief The name of the method. It can be optionally * prefixed with its class name and appended with - * its complete signature. Can't be NULL. */ + * its complete signature. Can't be NULL. */ - void* method_load_address; /** The virtual address on which the method - * is inlined. If NULL, then data provided with - * the event are not accepted. */ + void* method_load_address; /** <\brief The virtual address on which the method + * is inlined. If NULL, then data provided with + * the event are not accepted. */ - unsigned int method_size; /** The code size of the method in memory. - * If 0 that data provided with event are not + unsigned int method_size; /**<\brief The code size of the method in memory. + * If 0, then data provided with the event are not * accepted. */ - unsigned int line_number_size; /** The number of entries in the line number + unsigned int line_number_size; /**<\brief The number of entries in the line number * table. 0 if none. */ - pLineNumberInfo line_number_table; /** Pointer to the line numbers info + pLineNumberInfo line_number_table; /**<\brief Pointer to the line numbers info * array. Can be NULL if * line_number_size is 0. See * LineNumberInfo Structure for a * description of a single entry in * the line number info array */ - char* class_file_name; /** Class name. Can be NULL.*/ + char* class_file_name; /**<\brief Class name. Can be NULL.*/ - char* source_file_name; /** Source file name. Can be NULL.*/ + char* source_file_name; /**<\brief Source file name. Can be NULL.*/ } *piJIT_Method_Inline_Load, iJIT_Method_Inline_Load; +/** @cond exclude_from_documentation */ +/** + * @brief Description of a segment type + * @details Use the segment type to specify a type of data supplied + * with the iJVM_EVENT_TYPE_METHOD_UPDATE_V2 event to be applied to + * a certain code trace. + */ +typedef enum _iJIT_SegmentType +{ + iJIT_CT_UNKNOWN = 0, + + iJIT_CT_CODE, /**<\brief Executable code. */ + + iJIT_CT_DATA, /**<\brief Data (not executable code). + * VTune Amplifier uses the format string + * (see iJIT_Method_Update) to represent + * this data in the VTune Amplifier GUI */ + + iJIT_CT_KEEP, /**<\brief Use the previous markup for the trace. + * Can be used for the following + * iJVM_EVENT_TYPE_METHOD_UPDATE_V2 events, + * if the type of the previously reported segment + * type is the same. */ + iJIT_CT_EOF +} iJIT_SegmentType; + +/** + * @brief Description of a dynamic update of the content within JIT-compiled method + * @details The JIT engine may generate the methods that are updated at runtime + * partially by mixed (data + executable code) content. When you use the iJIT_Method_Update + * structure to describe the update of the content within a JIT-compiled method, + * use iJVM_EVENT_TYPE_METHOD_UPDATE_V2 as an event type to report it. + * + * On the first Update event, VTune Amplifier copies the original code range reported by + * the iJVM_EVENT_TYPE_METHOD_LOAD event, then modifies it with the supplied bytes and + * adds the modified range to the original method. For next update events, VTune Amplifier + * does the same but it uses the latest modified version of a code region for update. + * Eventually, VTune Amplifier GUI displays multiple code ranges for the method reported by + * the iJVM_EVENT_TYPE_METHOD_LOAD event. + * Notes: + * - Multiple update events with different types for the same trace are allowed + * but they must be reported for the same code ranges. + * Example, + * @code + * [-- data---] Allowed + * [-- code --] Allowed + * [code] Ignored + * [-- data---] Allowed + * [-- code --] Allowed + * [------------ trace ---------] + * @endcode + * - The types of previously reported events can be changed but they must be reported + * for the same code ranges. + * Example, + * @code + * [-- data---] Allowed + * [-- code --] Allowed + * [-- data---] Allowed + * [-- code --] Allowed + * [------------ trace ---------] + * @endcode + */ + +typedef struct _iJIT_Method_Update +{ + void* load_address; /**<\brief Start address of the update within a method */ + + unsigned int size; /**<\brief The update size */ + + iJIT_SegmentType type; /**<\brief Type of the update */ + + const char* data_format; /**<\brief C string that contains a format string + * that follows the same specifications as format in printf. + * The format string is used for iJIT_CT_CODE only + * and cannot be NULL. + * Format can be changed on the fly. */ +} *piJIT_Method_Update, iJIT_Method_Update; + +/** @endcond */ + +#pragma pack(pop) + /** @cond exclude_from_documentation */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -#ifndef CDECL +#ifndef JITAPI_CDECL # if defined WIN32 || defined _WIN32 -# define CDECL __cdecl +# define JITAPI_CDECL __cdecl # else /* defined WIN32 || defined _WIN32 */ -# if defined _M_X64 || defined _M_AMD64 || defined __x86_64__ -# define CDECL /* not actual on x86_64 platform */ -# else /* _M_X64 || _M_AMD64 || __x86_64__ */ -# define CDECL __attribute__ ((cdecl)) -# endif /* _M_X64 || _M_AMD64 || __x86_64__ */ +# if defined _M_IX86 || defined __i386__ +# define JITAPI_CDECL __attribute__ ((cdecl)) +# else /* _M_IX86 || __i386__ */ +# define JITAPI_CDECL /* actual only on x86_64 platform */ +# endif /* _M_IX86 || __i386__ */ # endif /* defined WIN32 || defined _WIN32 */ -#endif /* CDECL */ +#endif /* JITAPI_CDECL */ -#define JITAPI CDECL +#define JITAPI JITAPI_CDECL /** @endcond */ /** * @brief Generates a new unique method ID. * * You must use this API to obtain unique and valid method IDs for methods or - * traces reported to the agent if you don't have you own mechanism to generate + * traces reported to the agent if you don't have your own mechanism to generate * unique method IDs. * * @return a new unique method ID. When out of unique method IDs, this API @@ -579,26 +674,15 @@ iJIT_IsProfilingActiveFlags JITAPI iJIT_IsProfilingActive(void); * * The reported information is used to attribute samples obtained from any * Intel(R) VTune(TM) Amplifier collector. This API needs to be called - * after JIT compilation and before the first entry into the JIT compiled + * after JIT compilation and before the first entry into the JIT-compiled * code. * * @param[in] event_type - type of the data sent to the agent * @param[in] EventSpecificData - pointer to event-specific data - * + * * @returns 1 on success, otherwise 0. */ -int JITAPI iJIT_NotifyEvent(iJIT_JVM_EVENT event_type, void* EventSpecificData); - -/** @cond exclude_from_documentation */ -/* - * Do not use these legacy APIs, which are here for backward compatibility - * with Intel(R) VTune(TM) Performance Analyzer. - */ -typedef void (*iJIT_ModeChangedEx)(void* UserData, iJIT_ModeFlags Flags); -void JITAPI iJIT_RegisterCallbackEx(void* userdata, - iJIT_ModeChangedEx NewModeCallBackFuncEx); -void JITAPI FinalizeThread(void); -void JITAPI FinalizeProcess(void); +int JITAPI iJIT_NotifyEvent(iJIT_JVM_EVENT event_type, void *EventSpecificData); #ifdef __cplusplus } diff --git a/js/src/vtune/legacy/ittnotify.h b/js/src/vtune/legacy/ittnotify.h new file mode 100644 index 000000000000..36a77f1dfcb2 --- /dev/null +++ b/js/src/vtune/legacy/ittnotify.h @@ -0,0 +1,1039 @@ +/* + This file is provided under a dual BSD/GPLv2 license. When using or + redistributing this file, you may do so under either license. + + GPL LICENSE SUMMARY + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + The full GNU General Public License is included in this distribution + in the file called LICENSE.GPL. + + Contact Information: + http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ + + BSD LICENSE + + Copyright (c) 2005-2014 Intel Corporation. All rights reserved. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _LEGACY_ITTNOTIFY_H_ +#define _LEGACY_ITTNOTIFY_H_ + +/** + * @file + * @brief Legacy User API functions and types + */ + +/** @cond exclude_from_documentation */ +#ifndef ITT_OS_WIN +# define ITT_OS_WIN 1 +#endif /* ITT_OS_WIN */ + +#ifndef ITT_OS_LINUX +# define ITT_OS_LINUX 2 +#endif /* ITT_OS_LINUX */ + +#ifndef ITT_OS_MAC +# define ITT_OS_MAC 3 +#endif /* ITT_OS_MAC */ + +#ifndef ITT_OS_FREEBSD +# define ITT_OS_FREEBSD 4 +#endif /* ITT_OS_FREEBSD */ + +#ifndef ITT_OS +# if defined WIN32 || defined _WIN32 +# define ITT_OS ITT_OS_WIN +# elif defined( __APPLE__ ) && defined( __MACH__ ) +# define ITT_OS ITT_OS_MAC +# elif defined( __FreeBSD__ ) +# define ITT_OS ITT_OS_FREEBSD +# else +# define ITT_OS ITT_OS_LINUX +# endif +#endif /* ITT_OS */ + +#ifndef ITT_PLATFORM_WIN +# define ITT_PLATFORM_WIN 1 +#endif /* ITT_PLATFORM_WIN */ + +#ifndef ITT_PLATFORM_POSIX +# define ITT_PLATFORM_POSIX 2 +#endif /* ITT_PLATFORM_POSIX */ + +#ifndef ITT_PLATFORM_MAC +# define ITT_PLATFORM_MAC 3 +#endif /* ITT_PLATFORM_MAC */ + +#ifndef ITT_PLATFORM_FREEBSD +# define ITT_PLATFORM_FREEBSD 4 +#endif /* ITT_PLATFORM_FREEBSD */ + +#ifndef ITT_PLATFORM +# if ITT_OS==ITT_OS_WIN +# define ITT_PLATFORM ITT_PLATFORM_WIN +# elif ITT_OS==ITT_OS_MAC +# define ITT_PLATFORM ITT_PLATFORM_MAC +# elif ITT_OS==ITT_OS_FREEBSD +# define ITT_PLATFORM ITT_PLATFORM_FREEBSD +# else +# define ITT_PLATFORM ITT_PLATFORM_POSIX +# endif +#endif /* ITT_PLATFORM */ + +#if defined(_UNICODE) && !defined(UNICODE) +#define UNICODE +#endif + +#include +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#include +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#include +#if defined(UNICODE) || defined(_UNICODE) +#include +#endif /* UNICODE || _UNICODE */ +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +#ifndef ITTAPI_CDECL +# if ITT_PLATFORM==ITT_PLATFORM_WIN +# define ITTAPI_CDECL __cdecl +# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +# if defined _M_IX86 || defined __i386__ +# define ITTAPI_CDECL __attribute__ ((cdecl)) +# else /* _M_IX86 || __i386__ */ +# define ITTAPI_CDECL /* actual only on x86 platform */ +# endif /* _M_IX86 || __i386__ */ +# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* ITTAPI_CDECL */ + +#ifndef STDCALL +# if ITT_PLATFORM==ITT_PLATFORM_WIN +# define STDCALL __stdcall +# else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +# if defined _M_IX86 || defined __i386__ +# define STDCALL __attribute__ ((stdcall)) +# else /* _M_IX86 || __i386__ */ +# define STDCALL /* supported only on x86 platform */ +# endif /* _M_IX86 || __i386__ */ +# endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* STDCALL */ + +#define ITTAPI ITTAPI_CDECL +#define LIBITTAPI ITTAPI_CDECL + +/* TODO: Temporary for compatibility! */ +#define ITTAPI_CALL ITTAPI_CDECL +#define LIBITTAPI_CALL ITTAPI_CDECL + +#if ITT_PLATFORM==ITT_PLATFORM_WIN +/* use __forceinline (VC++ specific) */ +#define ITT_INLINE __forceinline +#define ITT_INLINE_ATTRIBUTE /* nothing */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +/* + * Generally, functions are not inlined unless optimization is specified. + * For functions declared inline, this attribute inlines the function even + * if no optimization level was specified. + */ +#ifdef __STRICT_ANSI__ +#define ITT_INLINE static +#define ITT_INLINE_ATTRIBUTE __attribute__((unused)) +#else /* __STRICT_ANSI__ */ +#define ITT_INLINE static inline +#define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused)) +#endif /* __STRICT_ANSI__ */ +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +/** @endcond */ + +/** @cond exclude_from_documentation */ +/* Helper macro for joining tokens */ +#define ITT_JOIN_AUX(p,n) p##n +#define ITT_JOIN(p,n) ITT_JOIN_AUX(p,n) + +#ifdef ITT_MAJOR +#undef ITT_MAJOR +#endif +#ifdef ITT_MINOR +#undef ITT_MINOR +#endif +#define ITT_MAJOR 3 +#define ITT_MINOR 0 + +/* Standard versioning of a token with major and minor version numbers */ +#define ITT_VERSIONIZE(x) \ + ITT_JOIN(x, \ + ITT_JOIN(_, \ + ITT_JOIN(ITT_MAJOR, \ + ITT_JOIN(_, ITT_MINOR)))) + +#ifndef INTEL_ITTNOTIFY_PREFIX +# define INTEL_ITTNOTIFY_PREFIX __itt_ +#endif /* INTEL_ITTNOTIFY_PREFIX */ +#ifndef INTEL_ITTNOTIFY_POSTFIX +# define INTEL_ITTNOTIFY_POSTFIX _ptr_ +#endif /* INTEL_ITTNOTIFY_POSTFIX */ + +#define ITTNOTIFY_NAME_AUX(n) ITT_JOIN(INTEL_ITTNOTIFY_PREFIX,n) +#define ITTNOTIFY_NAME(n) ITT_VERSIONIZE(ITTNOTIFY_NAME_AUX(ITT_JOIN(n,INTEL_ITTNOTIFY_POSTFIX))) + +#define ITTNOTIFY_VOID(n) (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n) +#define ITTNOTIFY_DATA(n) (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n) + +#define ITTNOTIFY_VOID_D0(n,d) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d) +#define ITTNOTIFY_VOID_D1(n,d,x) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x) +#define ITTNOTIFY_VOID_D2(n,d,x,y) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y) +#define ITTNOTIFY_VOID_D3(n,d,x,y,z) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z) +#define ITTNOTIFY_VOID_D4(n,d,x,y,z,a) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a) +#define ITTNOTIFY_VOID_D5(n,d,x,y,z,a,b) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b) +#define ITTNOTIFY_VOID_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? (void)0 : (!ITTNOTIFY_NAME(n)) ? (void)0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c) +#define ITTNOTIFY_DATA_D0(n,d) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d) +#define ITTNOTIFY_DATA_D1(n,d,x) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x) +#define ITTNOTIFY_DATA_D2(n,d,x,y) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y) +#define ITTNOTIFY_DATA_D3(n,d,x,y,z) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z) +#define ITTNOTIFY_DATA_D4(n,d,x,y,z,a) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a) +#define ITTNOTIFY_DATA_D5(n,d,x,y,z,a,b) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b) +#define ITTNOTIFY_DATA_D6(n,d,x,y,z,a,b,c) (!(d)->flags) ? 0 : (!ITTNOTIFY_NAME(n)) ? 0 : ITTNOTIFY_NAME(n)(d,x,y,z,a,b,c) + +#ifdef ITT_STUB +#undef ITT_STUB +#endif +#ifdef ITT_STUBV +#undef ITT_STUBV +#endif +#define ITT_STUBV(api,type,name,args) \ + typedef type (api* ITT_JOIN(ITTNOTIFY_NAME(name),_t)) args; \ + extern ITT_JOIN(ITTNOTIFY_NAME(name),_t) ITTNOTIFY_NAME(name); +#define ITT_STUB ITT_STUBV +/** @endcond */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * @defgroup legacy Legacy API + * @{ + * @} + */ + +/** + * @defgroup legacy_control Collection Control + * @ingroup legacy + * General behavior: application continues to run, but no profiling information is being collected + * + * Pausing occurs not only for the current thread but for all process as well as spawned processes + * - Intel(R) Parallel Inspector and Intel(R) Inspector XE: + * - Does not analyze or report errors that involve memory access. + * - Other errors are reported as usual. Pausing data collection in + * Intel(R) Parallel Inspector and Intel(R) Inspector XE + * only pauses tracing and analyzing memory access. + * It does not pause tracing or analyzing threading APIs. + * . + * - Intel(R) Parallel Amplifier and Intel(R) VTune(TM) Amplifier XE: + * - Does continue to record when new threads are started. + * . + * - Other effects: + * - Possible reduction of runtime overhead. + * . + * @{ + */ +#ifndef _ITTNOTIFY_H_ +/** @brief Pause collection */ +void ITTAPI __itt_pause(void); +/** @brief Resume collection */ +void ITTAPI __itt_resume(void); +/** @brief Detach collection */ +void ITTAPI __itt_detach(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, pause, (void)) +ITT_STUBV(ITTAPI, void, resume, (void)) +ITT_STUBV(ITTAPI, void, detach, (void)) +#define __itt_pause ITTNOTIFY_VOID(pause) +#define __itt_pause_ptr ITTNOTIFY_NAME(pause) +#define __itt_resume ITTNOTIFY_VOID(resume) +#define __itt_resume_ptr ITTNOTIFY_NAME(resume) +#define __itt_detach ITTNOTIFY_VOID(detach) +#define __itt_detach_ptr ITTNOTIFY_NAME(detach) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_pause() +#define __itt_pause_ptr 0 +#define __itt_resume() +#define __itt_resume_ptr 0 +#define __itt_detach() +#define __itt_detach_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_pause_ptr 0 +#define __itt_resume_ptr 0 +#define __itt_detach_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +#endif /* _ITTNOTIFY_H_ */ +/** @} legacy_control group */ + +/** + * @defgroup legacy_threads Threads + * @ingroup legacy + * Threads group + * @warning Legacy API + * @{ + */ +/** + * @deprecated Legacy API + * @brief Set name to be associated with thread in analysis GUI. + * @return __itt_err upon failure (name or namelen being null,name and namelen mismatched) + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +int LIBITTAPI __itt_thr_name_setA(const char *name, int namelen); +int LIBITTAPI __itt_thr_name_setW(const wchar_t *name, int namelen); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_thr_name_set __itt_thr_name_setW +# define __itt_thr_name_set_ptr __itt_thr_name_setW_ptr +#else +# define __itt_thr_name_set __itt_thr_name_setA +# define __itt_thr_name_set_ptr __itt_thr_name_setA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +int LIBITTAPI __itt_thr_name_set(const char *name, int namelen); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(LIBITTAPI, int, thr_name_setA, (const char *name, int namelen)) +ITT_STUB(LIBITTAPI, int, thr_name_setW, (const wchar_t *name, int namelen)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(LIBITTAPI, int, thr_name_set, (const char *name, int namelen)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_thr_name_setA ITTNOTIFY_DATA(thr_name_setA) +#define __itt_thr_name_setA_ptr ITTNOTIFY_NAME(thr_name_setA) +#define __itt_thr_name_setW ITTNOTIFY_DATA(thr_name_setW) +#define __itt_thr_name_setW_ptr ITTNOTIFY_NAME(thr_name_setW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_thr_name_set ITTNOTIFY_DATA(thr_name_set) +#define __itt_thr_name_set_ptr ITTNOTIFY_NAME(thr_name_set) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_thr_name_setA(name, namelen) +#define __itt_thr_name_setA_ptr 0 +#define __itt_thr_name_setW(name, namelen) +#define __itt_thr_name_setW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_thr_name_set(name, namelen) +#define __itt_thr_name_set_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_thr_name_setA_ptr 0 +#define __itt_thr_name_setW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_thr_name_set_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief Mark current thread as ignored from this point on, for the duration of its existence. + */ +void LIBITTAPI __itt_thr_ignore(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(LIBITTAPI, void, thr_ignore, (void)) +#define __itt_thr_ignore ITTNOTIFY_VOID(thr_ignore) +#define __itt_thr_ignore_ptr ITTNOTIFY_NAME(thr_ignore) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_thr_ignore() +#define __itt_thr_ignore_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_thr_ignore_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} legacy_threads group */ + +/** + * @defgroup legacy_sync Synchronization + * @ingroup legacy + * Synchronization group + * @warning Legacy API + * @{ + */ +/** + * @hideinitializer + * @brief possible value of attribute argument for sync object type + */ +#define __itt_attr_barrier 1 + +/** + * @hideinitializer + * @brief possible value of attribute argument for sync object type + */ +#define __itt_attr_mutex 2 + +/** + * @deprecated Legacy API + * @brief Assign a name to a sync object using char or Unicode string + * @param[in] addr - pointer to the sync object. You should use a real pointer to your object + * to make sure that the values don't clash with other object addresses + * @param[in] objtype - null-terminated object type string. If NULL is passed, the object will + * be assumed to be of generic "User Synchronization" type + * @param[in] objname - null-terminated object name string. If NULL, no name will be assigned + * to the object -- you can use the __itt_sync_rename call later to assign + * the name + * @param[in] attribute - one of [#__itt_attr_barrier, #__itt_attr_mutex] values which defines the + * exact semantics of how prepare/acquired/releasing calls work. + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +void ITTAPI __itt_sync_set_nameA(void *addr, const char *objtype, const char *objname, int attribute); +void ITTAPI __itt_sync_set_nameW(void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_sync_set_name __itt_sync_set_nameW +# define __itt_sync_set_name_ptr __itt_sync_set_nameW_ptr +#else /* UNICODE */ +# define __itt_sync_set_name __itt_sync_set_nameA +# define __itt_sync_set_name_ptr __itt_sync_set_nameA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +void ITTAPI __itt_sync_set_name(void *addr, const char* objtype, const char* objname, int attribute); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUBV(ITTAPI, void, sync_set_nameA, (void *addr, const char *objtype, const char *objname, int attribute)) +ITT_STUBV(ITTAPI, void, sync_set_nameW, (void *addr, const wchar_t *objtype, const wchar_t *objname, int attribute)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUBV(ITTAPI, void, sync_set_name, (void *addr, const char *objtype, const char *objname, int attribute)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_sync_set_nameA ITTNOTIFY_VOID(sync_set_nameA) +#define __itt_sync_set_nameA_ptr ITTNOTIFY_NAME(sync_set_nameA) +#define __itt_sync_set_nameW ITTNOTIFY_VOID(sync_set_nameW) +#define __itt_sync_set_nameW_ptr ITTNOTIFY_NAME(sync_set_nameW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_sync_set_name ITTNOTIFY_VOID(sync_set_name) +#define __itt_sync_set_name_ptr ITTNOTIFY_NAME(sync_set_name) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_sync_set_nameA(addr, objtype, objname, attribute) +#define __itt_sync_set_nameA_ptr 0 +#define __itt_sync_set_nameW(addr, objtype, objname, attribute) +#define __itt_sync_set_nameW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_sync_set_name(addr, objtype, objname, attribute) +#define __itt_sync_set_name_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_sync_set_nameA_ptr 0 +#define __itt_sync_set_nameW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_sync_set_name_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief Assign a name and type to a sync object using char or Unicode string + * @param[in] addr - pointer to the sync object. You should use a real pointer to your object + * to make sure that the values don't clash with other object addresses + * @param[in] objtype - null-terminated object type string. If NULL is passed, the object will + * be assumed to be of generic "User Synchronization" type + * @param[in] objname - null-terminated object name string. If NULL, no name will be assigned + * to the object -- you can use the __itt_sync_rename call later to assign + * the name + * @param[in] typelen, namelen - a length of string for appropriate objtype and objname parameter + * @param[in] attribute - one of [#__itt_attr_barrier, #__itt_attr_mutex] values which defines the + * exact semantics of how prepare/acquired/releasing calls work. + * @return __itt_err upon failure (name or namelen being null,name and namelen mismatched) + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +int LIBITTAPI __itt_notify_sync_nameA(void *addr, const char *objtype, int typelen, const char *objname, int namelen, int attribute); +int LIBITTAPI __itt_notify_sync_nameW(void *addr, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_notify_sync_name __itt_notify_sync_nameW +#else +# define __itt_notify_sync_name __itt_notify_sync_nameA +#endif +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +int LIBITTAPI __itt_notify_sync_name(void *addr, const char *objtype, int typelen, const char *objname, int namelen, int attribute); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(LIBITTAPI, int, notify_sync_nameA, (void *addr, const char *objtype, int typelen, const char *objname, int namelen, int attribute)) +ITT_STUB(LIBITTAPI, int, notify_sync_nameW, (void *addr, const wchar_t *objtype, int typelen, const wchar_t *objname, int namelen, int attribute)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(LIBITTAPI, int, notify_sync_name, (void *addr, const char *objtype, int typelen, const char *objname, int namelen, int attribute)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_notify_sync_nameA ITTNOTIFY_DATA(notify_sync_nameA) +#define __itt_notify_sync_nameA_ptr ITTNOTIFY_NAME(notify_sync_nameA) +#define __itt_notify_sync_nameW ITTNOTIFY_DATA(notify_sync_nameW) +#define __itt_notify_sync_nameW_ptr ITTNOTIFY_NAME(notify_sync_nameW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_notify_sync_name ITTNOTIFY_DATA(notify_sync_name) +#define __itt_notify_sync_name_ptr ITTNOTIFY_NAME(notify_sync_name) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_notify_sync_nameA(addr, objtype, typelen, objname, namelen, attribute) +#define __itt_notify_sync_nameA_ptr 0 +#define __itt_notify_sync_nameW(addr, objtype, typelen, objname, namelen, attribute) +#define __itt_notify_sync_nameW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_notify_sync_name(addr, objtype, typelen, objname, namelen, attribute) +#define __itt_notify_sync_name_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_notify_sync_nameA_ptr 0 +#define __itt_notify_sync_nameW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_notify_sync_name_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief Enter spin loop on user-defined sync object + */ +void LIBITTAPI __itt_notify_sync_prepare(void* addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(LIBITTAPI, void, notify_sync_prepare, (void *addr)) +#define __itt_notify_sync_prepare ITTNOTIFY_VOID(notify_sync_prepare) +#define __itt_notify_sync_prepare_ptr ITTNOTIFY_NAME(notify_sync_prepare) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_notify_sync_prepare(addr) +#define __itt_notify_sync_prepare_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_notify_sync_prepare_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief Quit spin loop without acquiring spin object + */ +void LIBITTAPI __itt_notify_sync_cancel(void *addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(LIBITTAPI, void, notify_sync_cancel, (void *addr)) +#define __itt_notify_sync_cancel ITTNOTIFY_VOID(notify_sync_cancel) +#define __itt_notify_sync_cancel_ptr ITTNOTIFY_NAME(notify_sync_cancel) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_notify_sync_cancel(addr) +#define __itt_notify_sync_cancel_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_notify_sync_cancel_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief Successful spin loop completion (sync object acquired) + */ +void LIBITTAPI __itt_notify_sync_acquired(void *addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(LIBITTAPI, void, notify_sync_acquired, (void *addr)) +#define __itt_notify_sync_acquired ITTNOTIFY_VOID(notify_sync_acquired) +#define __itt_notify_sync_acquired_ptr ITTNOTIFY_NAME(notify_sync_acquired) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_notify_sync_acquired(addr) +#define __itt_notify_sync_acquired_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_notify_sync_acquired_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief Start sync object releasing code. Is called before the lock release call. + */ +void LIBITTAPI __itt_notify_sync_releasing(void* addr); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(LIBITTAPI, void, notify_sync_releasing, (void *addr)) +#define __itt_notify_sync_releasing ITTNOTIFY_VOID(notify_sync_releasing) +#define __itt_notify_sync_releasing_ptr ITTNOTIFY_NAME(notify_sync_releasing) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_notify_sync_releasing(addr) +#define __itt_notify_sync_releasing_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_notify_sync_releasing_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} legacy_sync group */ + +#ifndef _ITTNOTIFY_H_ +/** + * @defgroup legacy_events Events + * @ingroup legacy + * Events group + * @{ + */ + +/** @brief user event type */ +typedef int __itt_event; + +/** + * @brief Create an event notification + * @note name or namelen being null/name and namelen not matching, user event feature not enabled + * @return non-zero event identifier upon success and __itt_err otherwise + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +__itt_event LIBITTAPI __itt_event_createA(const char *name, int namelen); +__itt_event LIBITTAPI __itt_event_createW(const wchar_t *name, int namelen); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_event_create __itt_event_createW +# define __itt_event_create_ptr __itt_event_createW_ptr +#else +# define __itt_event_create __itt_event_createA +# define __itt_event_create_ptr __itt_event_createA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +__itt_event LIBITTAPI __itt_event_create(const char *name, int namelen); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(LIBITTAPI, __itt_event, event_createA, (const char *name, int namelen)) +ITT_STUB(LIBITTAPI, __itt_event, event_createW, (const wchar_t *name, int namelen)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(LIBITTAPI, __itt_event, event_create, (const char *name, int namelen)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_event_createA ITTNOTIFY_DATA(event_createA) +#define __itt_event_createA_ptr ITTNOTIFY_NAME(event_createA) +#define __itt_event_createW ITTNOTIFY_DATA(event_createW) +#define __itt_event_createW_ptr ITTNOTIFY_NAME(event_createW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_event_create ITTNOTIFY_DATA(event_create) +#define __itt_event_create_ptr ITTNOTIFY_NAME(event_create) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_event_createA(name, namelen) (__itt_event)0 +#define __itt_event_createA_ptr 0 +#define __itt_event_createW(name, namelen) (__itt_event)0 +#define __itt_event_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_event_create(name, namelen) (__itt_event)0 +#define __itt_event_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_event_createA_ptr 0 +#define __itt_event_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_event_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an event occurrence. + * @return __itt_err upon failure (invalid event id/user event feature not enabled) + */ +int LIBITTAPI __itt_event_start(__itt_event event); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(LIBITTAPI, int, event_start, (__itt_event event)) +#define __itt_event_start ITTNOTIFY_DATA(event_start) +#define __itt_event_start_ptr ITTNOTIFY_NAME(event_start) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_event_start(event) (int)0 +#define __itt_event_start_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_event_start_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @brief Record an event end occurrence. + * @note It is optional if events do not have durations. + * @return __itt_err upon failure (invalid event id/user event feature not enabled) + */ +int LIBITTAPI __itt_event_end(__itt_event event); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(LIBITTAPI, int, event_end, (__itt_event event)) +#define __itt_event_end ITTNOTIFY_DATA(event_end) +#define __itt_event_end_ptr ITTNOTIFY_NAME(event_end) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_event_end(event) (int)0 +#define __itt_event_end_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_event_end_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} legacy_events group */ +#endif /* _ITTNOTIFY_H_ */ + +/** + * @defgroup legacy_memory Memory Accesses + * @ingroup legacy + */ + +/** + * @deprecated Legacy API + * @brief Inform the tool of memory accesses on reading + */ +void LIBITTAPI __itt_memory_read(void *addr, size_t size); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(LIBITTAPI, void, memory_read, (void *addr, size_t size)) +#define __itt_memory_read ITTNOTIFY_VOID(memory_read) +#define __itt_memory_read_ptr ITTNOTIFY_NAME(memory_read) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_memory_read(addr, size) +#define __itt_memory_read_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_memory_read_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief Inform the tool of memory accesses on writing + */ +void LIBITTAPI __itt_memory_write(void *addr, size_t size); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(LIBITTAPI, void, memory_write, (void *addr, size_t size)) +#define __itt_memory_write ITTNOTIFY_VOID(memory_write) +#define __itt_memory_write_ptr ITTNOTIFY_NAME(memory_write) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_memory_write(addr, size) +#define __itt_memory_write_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_memory_write_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief Inform the tool of memory accesses on updating + */ +void LIBITTAPI __itt_memory_update(void *address, size_t size); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(LIBITTAPI, void, memory_update, (void *addr, size_t size)) +#define __itt_memory_update ITTNOTIFY_VOID(memory_update) +#define __itt_memory_update_ptr ITTNOTIFY_NAME(memory_update) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_memory_update(addr, size) +#define __itt_memory_update_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_memory_update_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} legacy_memory group */ + +/** + * @defgroup legacy_state Thread and Object States + * @ingroup legacy + */ + +/** @brief state type */ +typedef int __itt_state_t; + +/** @cond exclude_from_documentation */ +typedef enum __itt_obj_state { + __itt_obj_state_err = 0, + __itt_obj_state_clr = 1, + __itt_obj_state_set = 2, + __itt_obj_state_use = 3 +} __itt_obj_state_t; + +typedef enum __itt_thr_state { + __itt_thr_state_err = 0, + __itt_thr_state_clr = 1, + __itt_thr_state_set = 2 +} __itt_thr_state_t; + +typedef enum __itt_obj_prop { + __itt_obj_prop_watch = 1, + __itt_obj_prop_ignore = 2, + __itt_obj_prop_sharable = 3 +} __itt_obj_prop_t; + +typedef enum __itt_thr_prop { + __itt_thr_prop_quiet = 1 +} __itt_thr_prop_t; +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief managing thread and object states + */ +__itt_state_t LIBITTAPI __itt_state_get(void); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, __itt_state_t, state_get, (void)) +#define __itt_state_get ITTNOTIFY_DATA(state_get) +#define __itt_state_get_ptr ITTNOTIFY_NAME(state_get) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_state_get(void) (__itt_state_t)0 +#define __itt_state_get_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_state_get_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief managing thread and object states + */ +__itt_state_t LIBITTAPI __itt_state_set(__itt_state_t s); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, __itt_state_t, state_set, (__itt_state_t s)) +#define __itt_state_set ITTNOTIFY_DATA(state_set) +#define __itt_state_set_ptr ITTNOTIFY_NAME(state_set) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_state_set(s) (__itt_state_t)0 +#define __itt_state_set_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_state_set_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief managing thread and object modes + */ +__itt_thr_state_t LIBITTAPI __itt_thr_mode_set(__itt_thr_prop_t p, __itt_thr_state_t s); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, __itt_thr_state_t, thr_mode_set, (__itt_thr_prop_t p, __itt_thr_state_t s)) +#define __itt_thr_mode_set ITTNOTIFY_DATA(thr_mode_set) +#define __itt_thr_mode_set_ptr ITTNOTIFY_NAME(thr_mode_set) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_thr_mode_set(p, s) (__itt_thr_state_t)0 +#define __itt_thr_mode_set_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_thr_mode_set_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** + * @deprecated Legacy API + * @brief managing thread and object modes + */ +__itt_obj_state_t LIBITTAPI __itt_obj_mode_set(__itt_obj_prop_t p, __itt_obj_state_t s); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUB(ITTAPI, __itt_obj_state_t, obj_mode_set, (__itt_obj_prop_t p, __itt_obj_state_t s)) +#define __itt_obj_mode_set ITTNOTIFY_DATA(obj_mode_set) +#define __itt_obj_mode_set_ptr ITTNOTIFY_NAME(obj_mode_set) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_obj_mode_set(p, s) (__itt_obj_state_t)0 +#define __itt_obj_mode_set_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_obj_mode_set_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} legacy_state group */ + +/** + * @defgroup frames Frames + * @ingroup legacy + * Frames group + * @{ + */ +/** + * @brief opaque structure for frame identification + */ +typedef struct __itt_frame_t *__itt_frame; + +/** + * @brief Create a global frame with given domain + */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +__itt_frame ITTAPI __itt_frame_createA(const char *domain); +__itt_frame ITTAPI __itt_frame_createW(const wchar_t *domain); +#if defined(UNICODE) || defined(_UNICODE) +# define __itt_frame_create __itt_frame_createW +# define __itt_frame_create_ptr __itt_frame_createW_ptr +#else /* UNICODE */ +# define __itt_frame_create __itt_frame_createA +# define __itt_frame_create_ptr __itt_frame_createA_ptr +#endif /* UNICODE */ +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +__itt_frame ITTAPI __itt_frame_create(const char *domain); +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +#if ITT_PLATFORM==ITT_PLATFORM_WIN +ITT_STUB(ITTAPI, __itt_frame, frame_createA, (const char *domain)) +ITT_STUB(ITTAPI, __itt_frame, frame_createW, (const wchar_t *domain)) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +ITT_STUB(ITTAPI, __itt_frame, frame_create, (const char *domain)) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_frame_createA ITTNOTIFY_DATA(frame_createA) +#define __itt_frame_createA_ptr ITTNOTIFY_NAME(frame_createA) +#define __itt_frame_createW ITTNOTIFY_DATA(frame_createW) +#define __itt_frame_createW_ptr ITTNOTIFY_NAME(frame_createW) +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_frame_create ITTNOTIFY_DATA(frame_create) +#define __itt_frame_create_ptr ITTNOTIFY_NAME(frame_create) +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#else /* INTEL_NO_ITTNOTIFY_API */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_frame_createA(domain) +#define __itt_frame_createA_ptr 0 +#define __itt_frame_createW(domain) +#define __itt_frame_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_frame_create(domain) +#define __itt_frame_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#if ITT_PLATFORM==ITT_PLATFORM_WIN +#define __itt_frame_createA_ptr 0 +#define __itt_frame_createW_ptr 0 +#else /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#define __itt_frame_create_ptr 0 +#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */ +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ + +/** @brief Record an frame begin occurrence. */ +void ITTAPI __itt_frame_begin(__itt_frame frame); +/** @brief Record an frame end occurrence. */ +void ITTAPI __itt_frame_end (__itt_frame frame); + +/** @cond exclude_from_documentation */ +#ifndef INTEL_NO_MACRO_BODY +#ifndef INTEL_NO_ITTNOTIFY_API +ITT_STUBV(ITTAPI, void, frame_begin, (__itt_frame frame)) +ITT_STUBV(ITTAPI, void, frame_end, (__itt_frame frame)) +#define __itt_frame_begin ITTNOTIFY_VOID(frame_begin) +#define __itt_frame_begin_ptr ITTNOTIFY_NAME(frame_begin) +#define __itt_frame_end ITTNOTIFY_VOID(frame_end) +#define __itt_frame_end_ptr ITTNOTIFY_NAME(frame_end) +#else /* INTEL_NO_ITTNOTIFY_API */ +#define __itt_frame_begin(frame) +#define __itt_frame_begin_ptr 0 +#define __itt_frame_end(frame) +#define __itt_frame_end_ptr 0 +#endif /* INTEL_NO_ITTNOTIFY_API */ +#else /* INTEL_NO_MACRO_BODY */ +#define __itt_frame_begin_ptr 0 +#define __itt_frame_end_ptr 0 +#endif /* INTEL_NO_MACRO_BODY */ +/** @endcond */ +/** @} frames group */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _LEGACY_ITTNOTIFY_H_ */ diff --git a/js/src/wasm/WasmCode.cpp b/js/src/wasm/WasmCode.cpp index 2a84fdb20a33..82a4db137b66 100644 --- a/js/src/wasm/WasmCode.cpp +++ b/js/src/wasm/WasmCode.cpp @@ -148,7 +148,7 @@ SendCodeRangesToProfiler(CodeSegment& cs, const Bytes& bytecode, const Metadata& enabled |= PerfFuncEnabled(); #endif #ifdef MOZ_VTUNE - enabled |= IsVTuneProfilingActive(); + enabled |= vtune::IsProfilingActive(); #endif if (!enabled) return; @@ -180,21 +180,9 @@ SendCodeRangesToProfiler(CodeSegment& cs, const Bytes& bytecode, const Metadata& } #endif #ifdef MOZ_VTUNE - if (IsVTuneProfilingActive()) { - unsigned method_id = iJIT_GetNewMethodID(); - if (method_id == 0) - return; - iJIT_Method_Load method; - method.method_id = method_id; - method.method_name = name.begin(); - method.method_load_address = (void*)start; - method.method_size = size; - method.line_number_size = 0; - method.line_number_table = nullptr; - method.class_id = 0; - method.class_file_name = nullptr; - method.source_file_name = nullptr; - iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&method); + if (vtune::IsProfilingActive()) { + cs.vtune_method_id_ = vtune::GenerateUniqueMethodID(); + vtune::MarkWasm(cs, name.begin(), (void*)start, size); } #endif } @@ -261,6 +249,7 @@ CodeSegment::~CodeSegment() if (!bytes_) return; + MOZ_ASSERT(wasmCodeAllocations > 0); wasmCodeAllocations--; @@ -268,7 +257,11 @@ CodeSegment::~CodeSegment() // Match AllocateCodeSegment. uint32_t size = JS_ROUNDUP(length(), ExecutableCodePageSize); +#ifdef MOZ_VTUNE + vtune::UnmarkBytes(bytes_, size); +#endif DeallocateExecutableMemory(bytes_, size); + } void diff --git a/js/src/wasm/WasmCode.h b/js/src/wasm/WasmCode.h index 0e926a93a1d5..fba24ef1132e 100644 --- a/js/src/wasm/WasmCode.h +++ b/js/src/wasm/WasmCode.h @@ -60,6 +60,12 @@ class CodeSegment // The profiling mode may be changed dynamically. bool profilingEnabled_; + public: +#ifdef MOZ_VTUNE + unsigned vtune_method_id_; // Zero if unset. +#endif + + protected: CodeSegment() { PodZero(this); } template friend struct js::MallocProvider; diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp index b46766f9f939..273cf406de0f 100644 --- a/js/src/wasm/WasmSignalHandlers.cpp +++ b/js/src/wasm/WasmSignalHandlers.cpp @@ -1319,10 +1319,10 @@ ProcessHasSignalHandlers() # endif #endif - // The interrupt handler allows the main thread to be paused from another + // The interrupt handler allows the active thread to be paused from another // thread (see InterruptRunningJitCode). #if defined(XP_WIN) - // Windows uses SuspendThread to stop the main thread from another thread. + // Windows uses SuspendThread to stop the active thread from another thread. #else struct sigaction interruptHandler; interruptHandler.sa_flags = SA_SIGINFO; @@ -1419,7 +1419,7 @@ wasm::HaveSignalHandlers() // handled by this function: // 1. Ion loop backedges are patched to instead point to a stub that handles // the interrupt; -// 2. if the main thread's pc is inside wasm code, the pc is updated to point +// 2. if the active thread's pc is inside wasm code, the pc is updated to point // to a stub that handles the interrupt. void js::InterruptRunningJitCode(JSContext* cx) @@ -1443,10 +1443,10 @@ js::InterruptRunningJitCode(JSContext* cx) return; } - // We are not on the runtime's main thread, so to do 1 and 2 above, we need - // to halt the runtime's main thread first. + // We are not on the runtime's active thread, so to do 1 and 2 above, we need + // to halt the runtime's active thread first. #if defined(XP_WIN) - // On Windows, we can simply suspend the main thread and work directly on + // On Windows, we can simply suspend the active thread and work directly on // its context from this thread. SuspendThread can sporadically fail if the // thread is in the middle of a syscall. Rather than retrying in a loop, // just wait for the next request for interrupt. @@ -1462,7 +1462,7 @@ js::InterruptRunningJitCode(JSContext* cx) } cx->finishHandlingJitInterrupt(); #else - // On Unix, we instead deliver an async signal to the main thread which + // On Unix, we instead deliver an async signal to the active thread which // halts the thread and callers our JitInterruptHandler (which has already // been installed by EnsureSignalHandlersInstalled). pthread_t thread = (pthread_t)cx->threadNative(); diff --git a/js/xpconnect/loader/mozJSComponentLoader.cpp b/js/xpconnect/loader/mozJSComponentLoader.cpp index b5cb2a092c4b..2ec4cc02f250 100644 --- a/js/xpconnect/loader/mozJSComponentLoader.cpp +++ b/js/xpconnect/loader/mozJSComponentLoader.cpp @@ -562,7 +562,7 @@ mozJSComponentLoader::PrepareObjectForLocation(JSContext* aCx, CompartmentOptions options; options.creationOptions() - .setZone(SystemZone) + .setSystemZone() .setAddonId(aReuseLoaderGlobal ? nullptr : MapURIToAddonID(aURI)); options.behaviors().setVersion(JSVERSION_LATEST); diff --git a/js/xpconnect/src/Sandbox.cpp b/js/xpconnect/src/Sandbox.cpp index 8882e7743b46..e7bf8b990c4c 100644 --- a/js/xpconnect/src/Sandbox.cpp +++ b/js/xpconnect/src/Sandbox.cpp @@ -1067,11 +1067,11 @@ xpc::CreateSandboxObject(JSContext* cx, MutableHandleValue vp, nsISupports* prin creationOptions.setSharedMemoryAndAtomicsEnabled(true); if (options.sameZoneAs) - creationOptions.setSameZoneAs(js::UncheckedUnwrap(options.sameZoneAs)); + creationOptions.setExistingZone(js::UncheckedUnwrap(options.sameZoneAs)); else if (options.freshZone) - creationOptions.setZone(JS::FreshZone); + creationOptions.setNewZoneInSystemZoneGroup(); else - creationOptions.setZone(JS::SystemZone); + creationOptions.setSystemZone(); creationOptions.setInvisibleToDebugger(options.invisibleToDebugger) .setTrace(TraceXPCGlobal); diff --git a/js/xpconnect/src/XPCShellImpl.cpp b/js/xpconnect/src/XPCShellImpl.cpp index 86e889be9a7f..7aad16b0cf5a 100644 --- a/js/xpconnect/src/XPCShellImpl.cpp +++ b/js/xpconnect/src/XPCShellImpl.cpp @@ -1522,7 +1522,7 @@ XRE_XPCShellMain(int argc, char** argv, char** envp, // Make the default XPCShell global use a fresh zone (rather than the // System Zone) to improve cross-zone test coverage. JS::CompartmentOptions options; - options.creationOptions().setZone(JS::FreshZone); + options.creationOptions().setNewZoneInSystemZoneGroup(); if (xpc::SharedMemoryEnabled()) options.creationOptions().setSharedMemoryAndAtomicsEnabled(true); options.behaviors().setVersion(JSVERSION_LATEST); diff --git a/layout/base/nsRefreshDriver.cpp b/layout/base/nsRefreshDriver.cpp index 5fc327ab895f..717b606bdfe6 100644 --- a/layout/base/nsRefreshDriver.cpp +++ b/layout/base/nsRefreshDriver.cpp @@ -252,6 +252,16 @@ public: nsLayoutUtils::IdlePeriodDeadlineLimit())); } + void SetLastGCCCDuration(TimeDuration aDuration) + { + mLastGCCCDuration = aDuration; + } + + TimeDuration LastGCCCDuration() + { + return mLastGCCCDuration; + } + protected: virtual void StartTimer() = 0; virtual void StopTimer() = 0; @@ -330,6 +340,8 @@ protected: TimeStamp mLastFireTime; TimeStamp mTargetTime; + TimeDuration mLastGCCCDuration; + nsTArray > mContentRefreshDrivers; nsTArray > mRootRefreshDrivers; @@ -578,6 +590,9 @@ private: mProcessedVsync = true; } else { mLastChildTick = TimeStamp::Now(); + if (!mBlockUntil.IsNull() && mBlockUntil > aVsyncTimestamp) { + return; + } } MOZ_ASSERT(aVsyncTimestamp <= TimeStamp::Now()); @@ -585,8 +600,20 @@ private: // the scheduled TickRefreshDriver() runs. Check mVsyncRefreshDriverTimer // before use. if (mVsyncRefreshDriverTimer) { + // Clear the old GC/CC duration. + mVsyncRefreshDriverTimer->SetLastGCCCDuration(TimeDuration()); mVsyncRefreshDriverTimer->RunRefreshDrivers(aVsyncTimestamp); } + + if (!XRE_IsParentProcess()) { + TimeDuration tickDuration = TimeStamp::Now() - mLastChildTick; + mBlockUntil = aVsyncTimestamp + tickDuration; + if (mVsyncRefreshDriverTimer) { + // Since GC/CC slices may run during the tick, but after the actual + // layout processing, they are not considered as part of the tick time. + mBlockUntil -= mVsyncRefreshDriverTimer->LastGCCCDuration(); + } + } } // VsyncRefreshDriverTimer holds this RefreshDriverVsyncObserver and it will @@ -596,6 +623,7 @@ private: Monitor mRefreshTickLock; TimeStamp mRecentVsync; TimeStamp mLastChildTick; + TimeStamp mBlockUntil; TimeDuration mVsyncRate; bool mProcessedVsync; }; // RefreshDriverVsyncObserver @@ -2011,8 +2039,12 @@ nsRefreshDriver::Tick(int64_t aNowEpoch, TimeStamp aNowTime) } if (notifyGC && nsContentUtils::XPConnect()) { + TimeStamp startGCCC = TimeStamp::Now(); nsContentUtils::XPConnect()->NotifyDidPaint(); nsJSContext::NotifyDidPaint(); + if (mActiveTimer) { + mActiveTimer->SetLastGCCCDuration(TimeStamp::Now() - startGCCC); + } } } diff --git a/layout/ipc/PVsync.ipdl b/layout/ipc/PVsync.ipdl index 5d31e34d4c9a..0ae6cc43ae1e 100644 --- a/layout/ipc/PVsync.ipdl +++ b/layout/ipc/PVsync.ipdl @@ -21,7 +21,7 @@ async protocol PVsync child: // Send vsync event from chrome to content process. - async Notify(TimeStamp aVsyncTimestamp) compress; + prio(high) async Notify(TimeStamp aVsyncTimestamp) compress; // Send the vsync rate to the content process. async VsyncRate(float aVsyncRate); diff --git a/mobile/android/chrome/content/geckoview.js b/mobile/android/chrome/content/geckoview.js index 3a5511d72cbf..c6a8fd6187fa 100644 --- a/mobile/android/chrome/content/geckoview.js +++ b/mobile/android/chrome/content/geckoview.js @@ -51,6 +51,8 @@ function startup() { "GeckoViewContent"); ModuleManager.add("resource://gre/modules/GeckoViewNavigation.jsm", "GeckoViewNavigation"); + ModuleManager.add("resource://gre/modules/GeckoViewProgress.jsm", + "GeckoViewProgress"); dump("zerdatime " + Date.now() + " - geckoview chrome startup finished."); } diff --git a/mobile/android/components/extensions/test/mochitest/test_ext_tabs_captureVisibleTab.html b/mobile/android/components/extensions/test/mochitest/test_ext_tabs_captureVisibleTab.html index 9c19cf4695b7..c788f62fbc30 100644 --- a/mobile/android/components/extensions/test/mochitest/test_ext_tabs_captureVisibleTab.html +++ b/mobile/android/components/extensions/test/mochitest/test_ext_tabs_captureVisibleTab.html @@ -146,8 +146,8 @@ add_task(function* testCaptureVisibleTabPermissions() { }, background() { - browser.test.assertFalse("captureVisibleTab" in browser.tabs, - 'Extension without "" permission should not have access to captureVisibleTab'); + browser.test.assertEq(undefined, browser.tabs.captureVisibleTab, + 'Extension without "" permission should not have access to captureVisibleTab'); browser.test.notifyPass("captureVisibleTabPermissions"); }, }); diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoView.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoView.java index 30dc28dc5ce2..657e4aae12b7 100644 --- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoView.java +++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoView.java @@ -48,6 +48,7 @@ public class GeckoView extends LayerView private ChromeDelegate mChromeDelegate; /* package */ ContentListener mContentListener; /* package */ NavigationListener mNavigationListener; + /* package */ ProgressListener mProgressListener; private InputConnectionListener mInputConnectionListener; protected boolean onAttachedToWindowCalled; @@ -117,6 +118,9 @@ public class GeckoView extends LayerView getEventDispatcher().registerUiThreadListener(this, "GeckoView:DOMTitleChanged", "GeckoView:LocationChange", + "GeckoView:PageStart", + "GeckoView:PageStop", + "GeckoView:SecurityChanged", null); } @@ -140,6 +144,18 @@ public class GeckoView extends LayerView mNavigationListener.onCanGoBack(GeckoView.this, message.getBoolean("canGoBack")); mNavigationListener.onCanGoForward(GeckoView.this, message.getBoolean("canGoForward")); } + } else if ("GeckoView:PageStart".equals(event)) { + if (mProgressListener != null) { + mProgressListener.onPageStart(GeckoView.this, message.getString("uri")); + } + } else if ("GeckoView:PageStop".equals(event)) { + if (mProgressListener != null) { + mProgressListener.onPageStop(GeckoView.this, message.getBoolean("success")); + } + } else if ("GeckoView:SecurityChanged".equals(event)) { + if (mProgressListener != null) { + mProgressListener.onSecurityChanged(GeckoView.this, message.getInt("status")); + } } } } @@ -412,6 +428,23 @@ public class GeckoView extends LayerView return mContentListener; } + /** + * Set the progress callback handler. + * This will replace the current handler. + * @param progress An implementation of ProgressListener. + */ + public void setProgressListener(ProgressListener progress) { + mProgressListener = progress; + } + + /** + * Get the progress callback handler. + * @return The current progress callback handler. + */ + public ProgressListener getProgressListener() { + return mProgressListener; + } + /** * Set the navigation callback handler. * This will replace the current handler. @@ -525,6 +558,33 @@ public class GeckoView extends LayerView public void onDebugRequest(GeckoView view, GeckoView.PromptResult result); } + public interface ProgressListener { + static final int STATE_IS_BROKEN = 1; + static final int STATE_IS_SECURE = 2; + static final int STATE_IS_INSECURE = 4; + + /** + * A View has started loading content from the network. + * @param view The GeckoView that initiated the callback. + * @param url The resource being loaded. + */ + public void onPageStart(GeckoView view, String url); + + /** + * A View has finished loading content from the network. + * @param view The GeckoView that initiated the callback. + * @param success Whether the page loaded successfully or an error occurred. + */ + public void onPageStop(GeckoView view, boolean success); + + /** + * The security status has been updated. + * @param view The GeckoView that initiated the callback. + * @param status The new security status. + */ + public void onSecurityChanged(GeckoView view, int status); + } + public interface ContentListener { /** * A page title was discovered in the content or updated after the content diff --git a/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/GeckoViewActivity.java b/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/GeckoViewActivity.java index db7c420eb4b7..ac46913b7776 100644 --- a/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/GeckoViewActivity.java +++ b/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/GeckoViewActivity.java @@ -35,6 +35,7 @@ public class GeckoViewActivity extends Activity { mGeckoView = (GeckoView) findViewById(R.id.gecko_view); mGeckoView.setChromeDelegate(new MyGeckoViewChrome()); mGeckoView.setContentListener(new MyGeckoViewContent()); + mGeckoView.setProgressListener(new MyGeckoViewProgress()); } @Override @@ -95,4 +96,31 @@ public class GeckoViewActivity extends Activity { Log.i(LOGTAG, "Content title changed to " + title); } } + + private class MyGeckoViewProgress implements GeckoView.ProgressListener { + @Override + public void onPageStart(GeckoView view, String url) { + Log.i(LOGTAG, "Starting to load page at " + url); + } + + @Override + public void onPageStop(GeckoView view, boolean success) { + Log.i(LOGTAG, "Stopping page load " + (success ? "successfully" : "unsuccessfully")); + } + + @Override + public void onSecurityChanged(GeckoView view, int status) { + String statusString; + if ((status & STATE_IS_BROKEN) != 0) { + statusString = "broken"; + } else if ((status & STATE_IS_SECURE) != 0) { + statusString = "secure"; + } else if ((status & STATE_IS_INSECURE) != 0) { + statusString = "insecure"; + } else { + statusString = "unknown"; + } + Log.i(LOGTAG, "Security status changed to " + statusString); + } + } } diff --git a/mobile/android/modules/GeckoViewProgress.jsm b/mobile/android/modules/GeckoViewProgress.jsm new file mode 100644 index 000000000000..9427831c3dce --- /dev/null +++ b/mobile/android/modules/GeckoViewProgress.jsm @@ -0,0 +1,81 @@ +/* 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/. */ + +"use strict"; + +this.EXPORTED_SYMBOLS = ["GeckoViewProgress"]; + +const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; + +Cu.import("resource://gre/modules/GeckoViewModule.jsm"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); + +XPCOMUtils.defineLazyModuleGetter(this, "EventDispatcher", + "resource://gre/modules/Messaging.jsm"); + +var dump = Cu.import("resource://gre/modules/AndroidLog.jsm", {}) + .AndroidLog.d.bind(null, "ViewNavigation"); + +var DEBUG = false; + +class GeckoViewProgress extends GeckoViewModule { + init() { + this.window.QueryInterface(Ci.nsIDOMChromeWindow).browserDOMWindow = this; + + this.registerProgressListener(); + } + + registerProgressListener() { + if (DEBUG) { + dump("registerProgressListeners()"); + } + + let flags = Ci.nsIWebProgress.NOTIFY_STATE_NETWORK | Ci.nsIWebProgress.NOTIFY_SECURITY; + this.progressFilter = + Cc["@mozilla.org/appshell/component/browser-status-filter;1"] + .createInstance(Ci.nsIWebProgress); + this.progressFilter.addProgressListener(this, flags); + this.browser.addProgressListener(this.progressFilter, flags); + } + + onStateChange(aWebProgress, aRequest, aStateFlags, aStatus) { + if (DEBUG) { + dump("onStateChange()"); + } + + if (!aWebProgress.isTopLevel) { + return; + } + + if (aStateFlags & Ci.nsIWebProgressListener.STATE_START) { + let uri = aRequest.QueryInterface(Ci.nsIChannel).URI; + let message = { + type: "GeckoView:PageStart", + uri: uri.spec, + }; + + this.eventDispatcher.sendRequest(message); + } else if ((aStateFlags & Ci.nsIWebProgressListener.STATE_STOP) && !aWebProgress.isLoadingDocument) { + let message = { + type: "GeckoView:PageStop", + success: aStatus ? false : true + }; + + this.eventDispatcher.sendRequest(message); + } + } + + onSecurityChange(aWebProgress, aRequest, aState) { + if (DEBUG) { + dump("onSecurityChange()"); + } + + let message = { + type: "GeckoView:SecurityChanged", + status: aState + }; + + this.eventDispatcher.sendRequest(message); + } +} diff --git a/mobile/android/modules/moz.build b/mobile/android/modules/moz.build index 18a8ef508751..bfd8403005cb 100644 --- a/mobile/android/modules/moz.build +++ b/mobile/android/modules/moz.build @@ -35,5 +35,6 @@ EXTRA_JS_MODULES += [ EXTRA_JS_MODULES += [ 'GeckoViewContent.jsm', 'GeckoViewModule.jsm', - 'GeckoViewNavigation.jsm' + 'GeckoViewNavigation.jsm', + 'GeckoViewProgress.jsm' ] diff --git a/modules/libpref/test/unit/test_warnings.js b/modules/libpref/test/unit/test_warnings.js index 856e117b7ea4..6aa2c3b00f7b 100644 --- a/modules/libpref/test/unit/test_warnings.js +++ b/modules/libpref/test/unit/test_warnings.js @@ -54,7 +54,7 @@ function run_test() { run_next_test(); } -add_task(function() { +add_task(function*() { // Simple change, shouldn't cause a warning do_print("Checking that a simple change doesn't cause a warning"); let buf = makeBuffer(100); diff --git a/netwerk/base/ProxyAutoConfig.cpp b/netwerk/base/ProxyAutoConfig.cpp index da394387e375..ef29379d24db 100644 --- a/netwerk/base/ProxyAutoConfig.cpp +++ b/netwerk/base/ProxyAutoConfig.cpp @@ -628,7 +628,7 @@ private: JSAutoRequest ar(mContext); JS::CompartmentOptions options; - options.creationOptions().setZone(JS::SystemZone); + options.creationOptions().setSystemZone(); options.behaviors().setVersion(JSVERSION_LATEST); mGlobal = JS_NewGlobalObject(mContext, &sGlobalClass, nullptr, JS::DontFireOnNewGlobalHook, options); @@ -680,11 +680,11 @@ ProxyAutoConfig::Init(const nsCString &aPACURI, mPACURI = aPACURI; mPACScript = sPacUtils; mPACScript.Append(aPACScript); + mIncludePath = aIncludePath; if (!GetRunning()) return SetupJS(); - mIncludePath = aIncludePath; mJSNeedsSetup = true; return NS_OK; } diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index a1ff1ee3e02d..cd619fab03f7 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1155,4 +1155,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = { static const int32_t kUnknownId = -1; -static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1495206180367000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1495295335769000); diff --git a/security/manager/ssl/nsSTSPreloadList.errors b/security/manager/ssl/nsSTSPreloadList.errors index 81220554fab8..c4adf75cc049 100644 --- a/security/manager/ssl/nsSTSPreloadList.errors +++ b/security/manager/ssl/nsSTSPreloadList.errors @@ -11,7 +11,6 @@ 100dayloans.com: max-age too low: 0 1018hosting.nl: did not receive HSTS header 1022996493.rsc.cdn77.org: could not connect to host -1066.io: could not connect to host 10seos.com: did not receive HSTS header 10tacle.io: could not connect to host 123plons.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] @@ -30,7 +29,6 @@ 206rc.net: max-age too low: 2592000 247loan.com: max-age too low: 0 25daysof.io: could not connect to host -2600hq.com: 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 @@ -74,7 +72,6 @@ aaeblog.net: did not receive HSTS header aaeblog.org: did not receive HSTS header aapp.space: could not connect to host aaron-gustafson.com: did not receive HSTS header -aaronkimmig.de: could not connect to host abearofsoap.com: could not connect to host abecodes.net: did not receive HSTS header abeestrada.com: did not receive HSTS header @@ -191,7 +188,6 @@ alphalabs.xyz: could not connect to host alt33c3.org: could not connect to host altfire.ca: could not connect to host altmv.com: max-age too low: 7776000 -alwaysmine.fi: did not receive HSTS header amaforums.org: could not connect to host amandaonishi.com: could not connect to host amavis.org: did not receive HSTS header @@ -209,7 +205,6 @@ amri.nl: could not connect to host amunoz.org: did not receive HSTS header anagra.ms: could not connect to host analytic-s.ml: could not connect to host -anarchistischegroepnijmegen.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] anassiriphotography.com: could not connect to host ancientkarma.com: could not connect to host andere-gedanken.net: max-age too low: 10 @@ -351,7 +346,6 @@ authentication.io: could not connect to host authoritynutrition.com: did not receive HSTS header auto-serwis.zgorzelec.pl: did not receive HSTS header auto4trade.nl: could not connect to host -autoepc.ro: did not receive HSTS header autojuhos.sk: could not connect to host autokovrik-diskont.ru: did not receive HSTS header autotsum.com: could not connect to host @@ -398,6 +392,7 @@ basicsolutionsus.com: did not receive HSTS header basilisk.io: could not connect to host basnieuwenhuizen.nl: could not connect to host bassh.net: could not connect to host +batonger.com: could not connect to host baud.ninja: could not connect to host baumstark.ca: could not connect to host baysse.eu: could not connect to host @@ -445,6 +440,7 @@ betcafearena.ro: did not receive HSTS header betnet.fr: could not connect to host betplanning.it: did not receive HSTS header bets.de: did not receive HSTS header +betterlifemakers.com: could not connect to host bettween.com: could not connect to host betz.ro: did not receive HSTS header bevapehappy.com: did not receive HSTS header @@ -473,7 +469,7 @@ binderapp.net: could not connect to host biofam.ru: did not receive HSTS header bionicspirit.com: could not connect to host biophysik-ssl.de: did not receive HSTS header -biou.me: could not connect to host +bip.gov.sa: could not connect to host birkman.com: did not receive HSTS header bitchan.it: could not connect to host bitcoinworld.me: could not connect to host @@ -487,7 +483,6 @@ bitheus.com: could not connect to host bithosting.io: did not receive HSTS header bitnet.io: did not receive HSTS header bitsafe.systems: did not receive HSTS header -bittmann.me: could not connect to host bitvigor.com: could not connect to host bityes.org: could not connect to host bivsi.com: could not connect to host @@ -530,6 +525,7 @@ bodyweightsolution.com: could not connect to host boensou.com: did not receive HSTS header bogosity.se: could not connect to host bohan.life: could not connect to host +boilesen.com: could not connect to host bombsquad.studio: could not connect to host bonapp.restaurant: could not connect to host bonfi.net: did not receive HSTS header @@ -544,6 +540,7 @@ bootjp.me: did not receive HSTS header boringsecurity.net: could not connect to host boris.one: did not receive HSTS header borisbesemer.com: could not connect to host +bosun.io: could not connect to host botox.bz: did not receive HSTS header bouwbedrijfpurmerend.nl: did not receive HSTS header bowlroll.net: max-age too low: 0 @@ -565,6 +562,7 @@ brettabel.com: did not receive HSTS header brianmwaters.net: did not receive HSTS header brickoo.com: could not connect to host brid.gy: did not receive HSTS header +brigidaarie.com: could not connect to host britzer-toner.de: did not receive HSTS header brks.xyz: could not connect to host broken-oak.com: could not connect to host @@ -626,7 +624,6 @@ cake.care: could not connect to host calendarr.com: did not receive HSTS header calgaryconstructionjobs.com: did not receive HSTS header calix.com: max-age too low: 0 -callcap.com: did not receive HSTS header calltrackingreports.com: could not connect to host calvin.me: max-age too low: 2592000 calvinallen.net: did not receive HSTS header @@ -809,6 +806,7 @@ cocktailfuture.fr: could not connect to host codabix.com: did not receive HSTS header codabix.de: could not connect to host codabix.net: could not connect to host +code-poets.co.uk: 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: could not connect to host @@ -856,7 +854,6 @@ continuumgaming.com: could not connect to host controlcenter.gigahost.dk: did not receive HSTS header convert.zone: could not connect to host coolchevy.org.ua: could not connect to host -coopens.com: could not connect to host cor-ser.es: could not connect to host coralproject.net: did not receive HSTS header coralrosado.com.br: did not receive HSTS header @@ -874,6 +871,7 @@ count.sh: could not connect to host couragewhispers.ca: did not receive HSTS header coursdeprogrammation.com: could not connect to host coursella.com: did not receive HSTS header +courses.nl: did not receive HSTS header covenantbank.net: could not connect to host coverduck.ru: could not connect to host cpuvinf.eu.org: could not connect to host @@ -920,7 +918,7 @@ csgoelemental.com: could not connect to host csgokings.eu: could not connect to host csohack.tk: could not connect to host cspbuilder.info: could not connect to host -csvape.com: max-age too low: 0 +csvape.com: did not receive HSTS header ct.search.yahoo.com: did not receive HSTS header cthulhuden.com: could not connect to host cubeserver.eu: could not connect to host @@ -928,6 +926,7 @@ cubewano.com: could not connect to host cujanovic.com: did not receive HSTS header cumshots-video.ru: could not connect to host cunha.be: could not connect to host +cuntflaps.me: did not receive HSTS header cuongquach.com: did not receive HSTS header cupidmentor.com: did not receive HSTS header curroapp.com: could not connect to host @@ -1047,9 +1046,7 @@ destom.be: could not connect to host detector.exposed: could not connect to host devcu.net: did not receive HSTS header deviltracks.net: could not connect to host -deviltraxxx.de: could not connect to host devincrow.me: could not connect to host -devpsy.info: did not receive HSTS header devtub.com: did not receive HSTS header devuan.org: did not receive HSTS header diablotine.rocks: could not connect to host @@ -1062,7 +1059,6 @@ digitaldaddy.net: could not connect to host digitalriver.tk: could not connect to host digitalskillswap.com: could not connect to host dim.lighting: could not connect to host -dimonb.com: could not connect to host dinamoelektrik.com: max-age too low: 0 dinkum.online: could not connect to host discoveringdocker.com: did not receive HSTS header @@ -1111,7 +1107,6 @@ 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 -dothebangthingsalon.com: did not receive HSTS header dovetailnow.com: could not connect to host download.jitsi.org: did not receive HSTS header downsouthweddings.com.au: did not receive HSTS header @@ -1124,7 +1119,6 @@ draw.uy: could not connect to host drdevil.ru: could not connect to host drdim.ru: could not connect to host dreadbyte.com: could not connect to host -dreaming.solutions: did not receive HSTS header drishti.guru: could not connect to host drive.google.com: did not receive HSTS header (error ignored - included regardless) drobniuch.pl: could not connect to host @@ -1150,6 +1144,7 @@ dymersion.com: did not receive HSTS header dzimejl.sk: did not receive HSTS header dzlibs.io: could not connect to host dzndk.org: could not connect to host +dzyabchenko.com: could not connect to host e-deca2.org: did not receive HSTS header e-sa.com: did not receive HSTS header e3amn2l.com: could not connect to host @@ -1180,7 +1175,7 @@ edissecurity.sk: did not receive HSTS header edix.ru: could not connect to host edk.com.tr: did not receive HSTS header edmodo.com: did not receive HSTS header -edp-collaborative.com: could not connect to host +edp-collaborative.com: max-age too low: 2500 eduvance.in: did not receive HSTS header edxg.de: could not connect to host efficienthealth.com: did not receive HSTS header @@ -1193,6 +1188,7 @@ ehrenamt-skpfcw.de: could not connect to host eicfood.com: could not connect to host eidolonhost.com: did not receive HSTS header ekbanden.nl: could not connect to host +ekedc.com: could not connect to host elaintehtaat.fi: did not receive HSTS header elan-organics.com: did not receive HSTS header elanguest.pl: could not connect to host @@ -1208,6 +1204,7 @@ elenoon.ir: did not receive HSTS header elgacien.de: could not connect to host elimdengelen.com: did not receive HSTS header elitefishtank.com: could not connect to host +elliotgluck.com: could not connect to host elnutricionista.es: did not receive HSTS header eloanpersonal.com: max-age too low: 0 elpo.xyz: could not connect to host @@ -1216,7 +1213,6 @@ elsitar.com: did not receive HSTS header email.lookout.com: could not connect to host emanatepixels.com: could not connect to host emeldi-commerce.com: max-age too low: 0 -emilyshepherd.me: could not connect to host eminovic.me: could not connect to host emjainteractive.com: did not receive HSTS header emjimadhu.com: could not connect to host @@ -1236,6 +1232,7 @@ endlessdiy.ca: could not connect to host endlesstone.com: did not receive HSTS header enersec.co.uk: 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] +engineeryourmarketing.com: could not connect to host enigmacpt.com: did not receive HSTS header enigmail.net: did not receive HSTS header enjoy-nepal.de: max-age too low: 0 @@ -1284,6 +1281,7 @@ esquonic.com: could not connect to host essexcosmeticdentists.co.uk: did not receive HSTS header essexghosthunters.co.uk: did not receive HSTS header estilosapeca.com: could not connect to host +estoic.net: could not connect to host et-buchholz.de: could not connect to host etdonline.co.uk: could not connect to host eternitylove.us: could not connect to host @@ -1425,6 +1423,7 @@ flowersandclouds.com: could not connect to host flowlo.me: could not connect to host flushstudios.com: did not receive HSTS header flyaces.com: did not receive HSTS header +flyss.net: could not connect to host fm83.nl: could not connect to host fndout.com: did not receive HSTS header fnvsecurity.com: could not connect to host @@ -1511,12 +1510,9 @@ g5led.nl: could not connect to host gabber.scot: could not connect to host gaelleetarnaud.com: did not receive HSTS header gafachi.com: could not connect to host -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 -galgoafegao.com.br: could not connect to host -galgoingles.com.br: 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 @@ -1532,7 +1528,7 @@ gamepiece.com: could not connect to host gamerslair.org: did not receive HSTS header gamesdepartment.co.uk: did not receive HSTS header gameserver-sponsor.de: could not connect to host -gamingmedia.eu: did not receive HSTS header +gamingmedia.eu: could not connect to host gampenhof.de: did not receive HSTS header gaptek.id: did not receive HSTS header garbage-juice.com: could not connect to host @@ -1588,6 +1584,7 @@ gglks.com: did not receive HSTS header gh16.com.ar: could not connect to host gheorghesarcov.ga: could not connect to host gheorghesarcov.tk: could not connect to host +ghostblog.info: could not connect to host giakki.eu: could not connect to host gietvloergarant.nl: did not receive HSTS header gigacloud.org: max-age too low: 0 @@ -1699,7 +1696,6 @@ gurom.lv: could not connect to host gurusupe.com: could not connect to host guso.gq: could not connect to host guso.ml: could not connect to host -guso.site: could not connect to host guso.tech: could not connect to host gussi.is: did not receive HSTS header gvt2.com: could not connect to host (error ignored - included regardless) @@ -1733,6 +1729,7 @@ haitschi.com: could not connect to host haitschi.de: could not connect to host haitschi.net: could not connect to host haitschi.org: could not connect to host +hake.me: could not connect to host haktec.de: could not connect to host haku.moe: could not connect to host hakugin.org: could not connect to host @@ -1780,11 +1777,10 @@ hdwallpapers.net: did not receive HSTS header healtious.com: did not receive HSTS header heart.ge: did not receive HSTS header heartlandrentals.com: did not receive HSTS header -heartsucker.com: could not connect to host heftkaufen.de: did not receive HSTS header helloworldhost.com: did not receive HSTS header helpadmin.net: could not connect to host -helpium.de: 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 @@ -1794,7 +1790,6 @@ hermes-net.de: could not connect to host herpaderp.net: could not connect to host herrenfahrt.com: did not receive HSTS header herzbotschaft.de: did not receive HSTS header -hethely.ch: could not connect to host heutger.net: did not receive HSTS header hibilog.com: could not connect to host hicn.gq: could not connect to host @@ -1827,6 +1822,7 @@ honeytracks.com: [Exception... "Component returned failure code: 0x80004005 (NS_ hongzhaxiaofendui.com: could not connect to host honoo.com: could not connect to host hookandloom.com: did not receive HSTS header +hooowl.com: could not connect to host hooray.beer: could not connect to host horosho.in: could not connect to host horseboners.xxx: did not receive HSTS header @@ -1864,7 +1860,6 @@ 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 huskybutt.dog: could not connect to host hydra.ws: could not connect to host @@ -2027,6 +2022,7 @@ itsamurai.ru: max-age too low: 2592000 itsecurityassurance.pw: could not connect to host itsg-faq.de: could not connect to host itshost.ru: could not connect to host +itspawned.com: could not connect to host ivi-fertility.com: max-age too low: 0 ivi.es: max-age too low: 0 ivk.website: could not connect to host @@ -2056,6 +2052,7 @@ jamesmaurer.com: did not receive HSTS header jamesmorrison.me: did not receive HSTS header jamessan.com: did not receive HSTS header jamourtney.com: could not connect to host +jan-roenspies.de: could not connect to host jan27.org: did not receive HSTS header janario.me: could not connect to host janbrodda.de: max-age too low: 2592000 @@ -2156,18 +2153,19 @@ jznet.org: max-age too low: 86400 k-dev.de: could not connect to host ka-clan.com: could not connect to host kabuabc.com: did not receive HSTS header -kabus.org: could not connect to host kadioglumakina.com.tr: did not receive HSTS header kaela.design: could not connect to host kahopoon.net: could not connect to host kaisers.de: did not receive HSTS header kalami.nl: did not receive HSTS header kaliaa.fi: could not connect to host +kalian.cz: could not connect to host kamikano.com: could not connect to host kaneo-gmbh.de: did not receive HSTS header kaplatz.is: could not connect to host kapucini.si: max-age too low: 0 karaoketonight.com: could not connect to host +karsofsystems.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 @@ -2186,10 +2184,9 @@ 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.com: could not connect to host keeleysam.me: could not connect to host keepclean.me: could not connect to host -ken.fm: did not receive HSTS header +ken.fm: could not connect to host kenderbeton-magyarorszag.hu: did not receive HSTS header kenderbetonmagyarorszag.hu: did not receive HSTS header kenderhaz-magyarorszag.hu: did not receive HSTS header @@ -2238,7 +2235,7 @@ kleinblogje.nl: [Exception... "Component returned failure code: 0x80004005 (NS_E kletterkater.com: did not receive HSTS header klicktojob.de: could not connect to host kmartin.io: did not receive HSTS header -knccloud.com: did not receive HSTS header +knccloud.com: could not connect to host knightsbridgegroup.org: could not connect to host knowledgesnapsites.com: could not connect to host kodokushi.fr: could not connect to host @@ -2346,7 +2343,7 @@ lemp.io: did not receive HSTS header lenovogaming.com: did not receive HSTS header lentri.com: did not receive HSTS header leob.in: did not receive HSTS header -leolana.com: could not connect to host +leolana.com: did not receive HSTS header leon-jaekel.com: could not connect to host leopold.email: could not connect to host leopotamgroup.com: could not connect to host @@ -2417,7 +2414,6 @@ listafirmelor.com: could not connect to host litespeed.io: could not connect to host livedemo.io: could not connect to host livej.am: could not connect to host -liverewrite.com: could not connect to host livi.co: did not receive HSTS header loadingdeck.com: did not receive HSTS header loadso.me: could not connect to host @@ -2507,6 +2503,7 @@ mafiaforum.de: did not receive HSTS header mafiareturns.com: max-age too low: 2592000 magenx.com: did not receive HSTS header mahamed91.pw: could not connect to host +maidofhonorcleaning.net: could not connect to host mail-settings.google.com: did not receive HSTS header (error ignored - included regardless) mail.google.com: did not receive HSTS header (error ignored - included regardless) maildragon.com: could not connect to host @@ -2514,8 +2511,10 @@ mailhost.it: could not connect to host makeitdynamic.com: could not connect to host makerstuff.net: did not receive HSTS header makeuplove.nl: could not connect to host +makeyourank.com: could not connect to host malerversand.de: did not receive HSTS header malfait.nl: could not connect to host +malkaso.com.ua: could not connect to host maltes.website: could not connect to host malwre.io: could not connect to host mamaison.io: could not connect to host @@ -2537,6 +2536,7 @@ marcuskoh.com: could not connect to host mariannematthew.com: could not connect to host marie-curie.fr: could not connect to host marie-elisabeth.dk: did not receive HSTS header +marie.club: could not connect to host mario.party: did not receive HSTS header markaconnor.com: could not connect to host markayapilandirma.com: could not connect to host @@ -2559,7 +2559,7 @@ matatall.com: did not receive HSTS header matchneedle.com: could not connect to host maternalsafety.org: did not receive HSTS header matrip.de: could not connect to host -matrix.ac: did not receive HSTS header +matrix.ac: could not connect to host matrixcheats.net: could not connect to host matsuz.com: could not connect to host mattberryman.com: did not receive HSTS header @@ -2684,7 +2684,6 @@ misterl.net: did not receive HSTS header mitchellrenouf.ca: could not connect to host mitsign.com: could not connect to host mittenhacks.com: could not connect to host -miui-germany.de: did not receive HSTS header mivcon.net: could not connect to host mixtape.moe: [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] miyoshi-kikaku.co.jp: did not receive HSTS header @@ -2710,7 +2709,6 @@ moebel-nagel.de: did not receive HSTS header moelord.org: could not connect to host moen.io: did not receive HSTS header mogry.net: did not receive HSTS header -moho.kr: did not receive HSTS header monarca.systems: could not connect to host monasterialis.eu: could not connect to host mondar.io: did not receive HSTS header @@ -2801,7 +2799,6 @@ myphonebox.de: could not connect to host myraytech.net: did not receive HSTS header mysecretrewards.com: did not receive HSTS header mystery-science-theater-3000.de: did not receive HSTS header -mythslegendscollection.com: did not receive HSTS header myvirtualserver.com: max-age too low: 2592000 myzone.com: did not receive HSTS header n0psled.nl: could not connect to host @@ -2835,6 +2832,7 @@ 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 navjobs.com: did not receive HSTS header nbb.io: could not connect to host nbg-ha.de: could not connect to host @@ -2863,6 +2861,7 @@ netherwind.eu: did not receive HSTS header netloanusa.com: max-age too low: 0 netmagik.com: did not receive HSTS header nettefoundation.com: could not connect to host +netulo.com: 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 @@ -2901,7 +2900,7 @@ 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 ninchisho-online.com: did not receive HSTS header -ninhs.org: could not connect to host +ninhs.org: did not receive HSTS header nippler.org: did not receive HSTS header nippombashi.net: did not receive HSTS header nipponcareers.com: did not receive HSTS header @@ -2920,6 +2919,7 @@ nodetemple.com: could not connect to host nodi.at: could not connect to host noexpect.org: could not connect to host noima.com: did not receive HSTS header +noisky.cn: could not connect to host nolatepayments.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] nolberg.net: could not connect to host nolte.work: could not connect to host @@ -2993,7 +2993,6 @@ offshore-firma.org: could not connect to host ogogoshop.com: could not connect to host oishioffice.com: did not receive HSTS header okane.love: could not connect to host -okay.coffee: could not connect to host okok-rent.com: could not connect to host okok.rent: could not connect to host okutama.in.th: could not connect to host @@ -3041,7 +3040,7 @@ open-mx.de: could not connect to host open-to-repair.fr: did not receive HSTS header opendesk.cc: did not receive HSTS header openmind-shop.de: did not receive HSTS header -openpriv.pw: could not connect to host +openpriv.pw: did not receive HSTS header openprovider.nl: did not receive HSTS header openquery.com.au: did not receive HSTS header openshift.redhat.com: did not receive HSTS header @@ -3068,6 +3067,7 @@ orleika.ml: could not connect to host orthodoxy.lt: did not receive HSTS header osaiyuwu.com: could not connect to host oslfoundation.org: could not connect to host +oslinux.net: did not receive HSTS header osp.cx: could not connect to host ossan-kobe-gourmet.com: did not receive HSTS header ossbinaries.com: could not connect to host @@ -3172,7 +3172,6 @@ pensacolawinterfest.org: could not connect to host pentandra.com: could not connect to host pepperhead.com: did not receive HSTS header pepperworldhotshop.de: did not receive HSTS header -perdel.cn: could not connect to host perfectionis.me: could not connect to host performous.org: could not connect to host perfumista.vn: did not receive HSTS header @@ -3234,6 +3233,7 @@ pkgt.de: could not connect to host placefade.com: could not connect to host placollection.org: could not connect to host plaettliaktion.ch: did not receive HSTS header +planpharmacy.com: 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 @@ -3319,6 +3319,7 @@ propactrading.com: could not connect to host prosocialmachines.com: could not connect to host prosoft.sk: did not receive HSTS header prosperident.com: did not receive HSTS header +proweser.de: could not connect to host prowhisky.de: did not receive HSTS header proximato.com: could not connect to host proxybay.al: could not connect to host @@ -3385,6 +3386,7 @@ randomcage.com: did not receive HSTS header randomcloud.net: could not connect to host rankthespot.com: could not connect to host rannseier.org: did not receive HSTS header +rapido.nu: did not receive HSTS header rapidresearch.me: could not connect to host rapidthunder.io: could not connect to host rasing.me: did not receive HSTS header @@ -3563,7 +3565,6 @@ 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 -samuelkeeley.com: could not connect to host sanasalud.org: could not connect to host sandrolittke.de: did not receive HSTS header sandviks.com: did not receive HSTS header @@ -3604,7 +3605,6 @@ schulterglatzen-altenwalde.de: could not connect to host schultzflorists.com: could not connect to host schwarzkopfforyou.de: did not receive HSTS header scienceathome.org: did not receive HSTS header -sclgroup.cc: did not receive HSTS header scooshonline.co.uk: did not receive HSTS header scotbirchfield.com: did not receive HSTS header scottgthomas.com: could not connect to host @@ -3627,7 +3627,6 @@ sectia22.ro: could not connect to host sectun.com: did not receive HSTS header secure-games.us: could not connect to host secure.link: did not receive HSTS header -securejabber.me: could not connect to host secureradio.net: could not connect to host securesuisse.ch: could not connect to host securetheorem.com: did not receive HSTS header @@ -3635,7 +3634,6 @@ security-carpet.com: could not connect to host security.google.com: did not receive HSTS header (error ignored - included regardless) securitybsides.pl: did not receive HSTS header securityglance.com: could not connect to host -securityheaders.com: could not connect to host securityinet.biz: did not receive HSTS header securityinet.net: did not receive HSTS header securityinet.org.il: did not receive HSTS header @@ -3691,7 +3689,7 @@ shanesage.com: could not connect to host shanewadleigh.com: could not connect to host shareimg.xyz: could not connect to host sharepass.pw: could not connect to host -sharevari.com: did not receive HSTS header +sharevari.com: 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 @@ -3748,16 +3746,12 @@ sites.google.com: did not receive HSTS header (error ignored - included regardle sitesten.com: did not receive HSTS header sitsy.ru: did not receive HSTS header sixtwentyten.com: did not receive HSTS header -skeeley.com: could not connect to host -skhosting.eu: did not receive HSTS header skidstresser.com: could not connect to host skile.ru: could not connect to host skk.io: could not connect to host skoda-clever-lead.de: could not connect to host skoda-im-dialog.de: could not connect to host -skou.dk: could not connect to host skullhouse.nyc: did not receive HSTS header -skyasker.cn: could not connect to host skyflix.me: did not receive HSTS header skyoy.com: could not connect to host slash-dev.de: did not receive HSTS header @@ -3823,10 +3817,8 @@ solsystems.ru: could not connect to host someshit.xyz: could not connect to host somethingnew.xyz: did not receive HSTS header sonicrainboom.rocks: could not connect to host -sortaweird.net: could not connect to host sotiran.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] sotor.de: did not receive HSTS header -soulboy.io: could not connect to host 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 @@ -3849,7 +3841,6 @@ spdysync.com: could not connect to host speculor.net: could not connect to host speed-mailer.com: could not connect to host speedcounter.net: did not receive HSTS header -speeds.vip: did not receive HSTS header speedtest-russia.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] speedy.lt: max-age too low: 0 speidel.com.tr: did not receive HSTS header @@ -3917,7 +3908,6 @@ stirlingpoon.xyz: could not connect to host stkbn.com: did not receive HSTS header stmbgr.com: could not connect to host stn.me.uk: did not receive HSTS header -stnl.de: could not connect to host stocktrade.de: could not connect to host stoffe-monster.de: did not receive HSTS header stole-my.bike: could not connect to host @@ -3949,7 +3939,6 @@ studybay.com: did not receive HSTS header studydrive.net: did not receive HSTS header stugb.de: did not receive HSTS header stw-group.at: could not connect to host -stygium.net: could not connect to host stylenda.com: could not connect to host subbing.work: could not connect to host subdimension.org: could not connect to host @@ -4040,7 +4029,7 @@ tazemama.biz: could not connect to host tazz.in: could not connect to host tc-bonito.de: max-age too low: 3600 tcao.info: could not connect to host -tcby45.xyz: could not connect to host +tcby45.xyz: did not receive HSTS header tcdw.net: could not connect to host tcl.ath.cx: did not receive HSTS header tcomms.org: max-age too low: 0 @@ -4060,6 +4049,7 @@ techmatehq.com: could not connect to host technogroup.cz: did not receive HSTS header technosavvyport.com: did not receive HSTS header techpointed.com: could not connect to host +tecture.de: could not connect to host tedb.us: did not receive HSTS header tegelsensanitaironline.nl: did not receive HSTS header tekshrek.com: did not receive HSTS header @@ -4106,7 +4096,7 @@ theclubjersey.com: did not receive HSTS header thecoffeehouse.xyz: could not connect to host thediaryofadam.com: did not receive HSTS header theendofzion.com: did not receive HSTS header -theeyeopener.com: did not receive HSTS header +theescapistswiki.com: could not connect to host theflowerbasketonline.com: could not connect to host thefootballanalyst.com: could not connect to host thefrozenfire.com: did not receive HSTS header @@ -4211,6 +4201,7 @@ tomli.me: could not connect to host tommsy.com: did not receive HSTS header tommyads.com: could not connect to host tomudding.nl: did not receive HSTS header +tonabor.ru: 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] tonsit.org: did not receive HSTS header tonyfantjr.com: could not connect to host @@ -4338,6 +4329,7 @@ unmanaged.space: could not connect to host uno-pizza.ru: could not connect to host unplugg3r.dk: could not connect to host unravel.ie: could not connect to host +unsupervised.ca: could not connect to host unsystem.net: did not receive HSTS header unterschicht.tv: could not connect to host unwiredbrain.com: could not connect to host @@ -4358,6 +4350,7 @@ uscitizenship.info: did not receive HSTS header uscurrency.gov: did not receive HSTS header used-in.jp: did not receive HSTS header usercare.com: did not receive HSTS header +usleep.net: could not connect to host ustr.gov: max-age too low: 86400 utleieplassen.no: could not connect to host utopiagalaxy.space: could not connect to host @@ -4514,7 +4507,6 @@ webtiles.co.uk: could not connect to host webtobesocial.de: could not connect to host webwork.pw: could not connect to host weddingenvelopes.co.uk: did not receive HSTS header -wegenaer.nl: could not connect to host weizenke.im: could not connect to host wellastore.ru: did not receive HSTS header wellsolveit.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] @@ -4615,7 +4607,6 @@ wsscompany.com.ve: could not connect to host wufu.org: did not receive HSTS header wuhengmin.com: did not receive HSTS header wuji.cz: could not connect to host -wukongmusic.us: could not connect to host wurzelzwerg.net: could not connect to host wusx.club: could not connect to host www.apollo-auto.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] @@ -4673,6 +4664,7 @@ xn--7rvz7ku3ppnr.jp: did not receive HSTS header xn--80aaihqncaejjobbu6v.xn--p1ai: max-age too low: 6000 xn--9pr52k0p5a.com: did not receive HSTS header xn--datenrettung-mnchen-jbc.com: did not receive HSTS header +xn--dmonenjger-q5ag.net: could not connect to host xn--lgb3a8bcpn.cf: could not connect to host xn--lgb3a8bcpn.ga: could not connect to host xn--lgb3a8bcpn.gq: could not connect to host @@ -4734,6 +4726,7 @@ youngandunited.nl: did not receive HSTS header yoursecondphone.co: could not connect to host yourstrongbox.com: could not connect to host ypiresia.fr: could not connect to host +ys-shop.biz: did not receive HSTS header ytcuber.xyz: could not connect to host yu.gg: did not receive HSTS header yuan.ga: did not receive HSTS header diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index 971704794c7e..9518db73302b 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/ #include -const PRTime gPreloadListExpirationTime = INT64_C(1497625372212000); +const PRTime gPreloadListExpirationTime = INT64_C(1497714527517000); static const char kSTSHostTable[] = { /* "0.me.uk", true */ '0', '.', 'm', 'e', '.', 'u', 'k', '\0', @@ -52,6 +52,7 @@ static const char kSTSHostTable[] = { /* "100onrainkajino.com", true */ '1', '0', '0', 'o', 'n', 'r', 'a', 'i', 'n', 'k', 'a', 'j', 'i', 'n', 'o', '.', 'c', 'o', 'm', '\0', /* "1011100.com", true */ '1', '0', '1', '1', '1', '0', '0', '.', 'c', 'o', 'm', '\0', /* "1017scribes.com", true */ '1', '0', '1', '7', 's', 'c', 'r', 'i', 'b', 'e', 's', '.', 'c', 'o', 'm', '\0', + /* "1066.io", true */ '1', '0', '6', '6', '.', 'i', 'o', '\0', /* "10hz.de", true */ '1', '0', 'h', 'z', '.', 'd', 'e', '\0', /* "112app.nl", true */ '1', '1', '2', 'a', 'p', 'p', '.', 'n', 'l', '\0', /* "11urss.com", true */ '1', '1', 'u', 'r', 's', 's', '.', 'c', 'o', 'm', '\0', @@ -115,6 +116,7 @@ static const char kSTSHostTable[] = { /* "24ip.fr", true */ '2', '4', 'i', 'p', '.', 'f', 'r', '\0', /* "24sihu.com", true */ '2', '4', 's', 'i', 'h', 'u', '.', 'c', 'o', 'm', '\0', /* "2600edinburgh.org", true */ '2', '6', '0', '0', 'e', 'd', 'i', 'n', 'b', 'u', 'r', 'g', 'h', '.', 'o', 'r', 'g', '\0', + /* "2600hq.com", true */ '2', '6', '0', '0', 'h', 'q', '.', 'c', 'o', 'm', '\0', /* "263.info", true */ '2', '6', '3', '.', 'i', 'n', 'f', 'o', '\0', /* "28spots.net", true */ '2', '8', 's', 'p', 'o', 't', 's', '.', 'n', 'e', 't', '\0', /* "2acbi-asso.fr", true */ '2', 'a', 'c', 'b', 'i', '-', 'a', 's', 's', 'o', '.', 'f', 'r', '\0', @@ -238,6 +240,7 @@ static const char kSTSHostTable[] = { /* "aanmpc.com", true */ 'a', 'a', 'n', 'm', 'p', 'c', '.', 'c', 'o', 'm', '\0', /* "aaoo.net", true */ 'a', 'a', 'o', 'o', '.', 'n', 'e', 't', '\0', /* "aapas.org.ar", true */ 'a', 'a', 'p', 'a', 's', '.', 'o', 'r', 'g', '.', 'a', 'r', '\0', + /* "aaronkimmig.de", true */ 'a', 'a', 'r', 'o', 'n', 'k', 'i', 'm', 'm', 'i', 'g', '.', 'd', 'e', '\0', /* "aaronsilber.me", true */ 'a', 'a', 'r', 'o', 'n', 's', 'i', 'l', 'b', 'e', 'r', '.', 'm', 'e', '\0', /* "aatf.us", true */ 'a', 'a', 't', 'f', '.', 'u', 's', '\0', /* "aati.info", true */ 'a', 'a', 't', 'i', '.', 'i', 'n', 'f', 'o', '\0', @@ -643,6 +646,7 @@ static const char kSTSHostTable[] = { /* "alupferd.de", true */ 'a', 'l', 'u', 'p', 'f', 'e', 'r', 'd', '.', 'd', 'e', '\0', /* "aluroof.eu", true */ 'a', 'l', 'u', 'r', 'o', 'o', 'f', '.', 'e', 'u', '\0', /* "alvicom.hu", true */ 'a', 'l', 'v', 'i', 'c', 'o', 'm', '.', 'h', 'u', '\0', + /* "alwaysmine.fi", true */ 'a', 'l', 'w', 'a', 'y', 's', 'm', 'i', 'n', 'e', '.', 'f', 'i', '\0', /* "alyoung.com", true */ 'a', 'l', 'y', 'o', 'u', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "alza.at", true */ 'a', 'l', 'z', 'a', '.', 'a', 't', '\0', /* "alza.co.uk", true */ 'a', 'l', 'z', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0', @@ -714,6 +718,7 @@ static const char kSTSHostTable[] = { /* "analyticum.net", true */ 'a', 'n', 'a', 'l', 'y', 't', 'i', 'c', 'u', 'm', '.', 'n', 'e', 't', '\0', /* "analyzemyfriends.com", true */ 'a', 'n', 'a', 'l', 'y', 'z', 'e', 'm', 'y', 'f', 'r', 'i', 'e', 'n', 'd', 's', '.', 'c', 'o', 'm', '\0', /* "ananke.io", true */ 'a', 'n', 'a', 'n', 'k', 'e', '.', 'i', 'o', '\0', + /* "anarchistischegroepnijmegen.nl", false */ 'a', 'n', 'a', 'r', 'c', 'h', 'i', 's', 't', 'i', 's', 'c', 'h', 'e', 'g', 'r', 'o', 'e', 'p', 'n', 'i', 'j', 'm', 'e', 'g', 'e', 'n', '.', 'n', 'l', '\0', /* "anarka.org", true */ 'a', 'n', 'a', 'r', 'k', 'a', '.', 'o', 'r', 'g', '\0', /* "anastasia-shamara.ru", true */ 'a', 'n', 'a', 's', 't', 'a', 's', 'i', 'a', '-', 's', 'h', 'a', 'm', 'a', 'r', 'a', '.', 'r', 'u', '\0', /* "anastasiafond.com", true */ 'a', 'n', 'a', 's', 't', 'a', 's', 'i', 'a', 'f', 'o', 'n', 'd', '.', 'c', 'o', 'm', '\0', @@ -1120,6 +1125,7 @@ static const char kSTSHostTable[] = { /* "autodalmacija.com", true */ 'a', 'u', 't', 'o', 'd', 'a', 'l', 'm', 'a', 'c', 'i', 'j', 'a', '.', 'c', 'o', 'm', '\0', /* "autodeploy.it", true */ 'a', 'u', 't', 'o', 'd', 'e', 'p', 'l', 'o', 'y', '.', 'i', 't', '\0', /* "autoentrepreneurinfo.com", true */ 'a', 'u', 't', 'o', 'e', 'n', 't', 'r', 'e', 'p', 'r', 'e', 'n', 'e', 'u', 'r', 'i', 'n', 'f', 'o', '.', 'c', 'o', 'm', '\0', + /* "autoepc.ro", true */ 'a', 'u', 't', 'o', 'e', 'p', 'c', '.', 'r', 'o', '\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', /* "autoosijek.com", true */ 'a', 'u', 't', 'o', 'o', 's', 'i', 'j', 'e', 'k', '.', 'c', 'o', 'm', '\0', @@ -1314,7 +1320,6 @@ static const char kSTSHostTable[] = { /* "bastiv.com", true */ 'b', 'a', 's', 't', 'i', 'v', '.', 'c', 'o', 'm', '\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', - /* "batonger.com", true */ 'b', 'a', 't', 'o', 'n', 'g', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "batschu.de", true */ 'b', 'a', 't', 's', 'c', 'h', 'u', '.', 'd', 'e', '\0', /* "batten.eu.org", true */ 'b', 'a', 't', 't', 'e', 'n', '.', 'e', 'u', '.', 'o', 'r', 'g', '\0', /* "battleofthegridiron.com", true */ 'b', 'a', 't', 't', 'l', 'e', 'o', 'f', 't', 'h', 'e', 'g', 'r', 'i', 'd', 'i', 'r', 'o', 'n', '.', 'c', 'o', 'm', '\0', @@ -1479,7 +1484,6 @@ static const char kSTSHostTable[] = { /* "betterbabyshop.com.au", true */ 'b', 'e', 't', 't', 'e', 'r', 'b', 'a', 'b', 'y', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "bettercrypto.org", true */ 'b', 'e', 't', 't', 'e', 'r', 'c', 'r', 'y', 'p', 't', 'o', '.', 'o', 'r', 'g', '\0', /* "betterhelp.com", true */ 'b', 'e', 't', 't', 'e', 'r', 'h', 'e', 'l', 'p', '.', 'c', 'o', 'm', '\0', - /* "betterlifemakers.com", true */ 'b', 'e', 't', 't', 'e', 'r', 'l', 'i', 'f', 'e', 'm', 'a', 'k', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0', /* "bettertest.it", true */ 'b', 'e', 't', 't', 'e', 'r', 't', 'e', 's', 't', '.', 'i', 't', '\0', /* "bettingbusiness.ru", true */ 'b', 'e', 't', 't', 'i', 'n', 'g', 'b', 'u', 's', 'i', 'n', 'e', 's', 's', '.', 'r', 'u', '\0', /* "bettolinokitchen.com", true */ 'b', 'e', 't', 't', 'o', 'l', 'i', 'n', 'o', 'k', 'i', 't', 'c', 'h', 'e', 'n', '.', 'c', 'o', 'm', '\0', @@ -1585,7 +1589,7 @@ static const char kSTSHostTable[] = { /* "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', /* "biospeak.solutions", true */ 'b', 'i', 'o', 's', 'p', 'e', 'a', 'k', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0', /* "biosphere.cc", true */ 'b', 'i', 'o', 's', 'p', 'h', 'e', 'r', 'e', '.', 'c', 'c', '\0', - /* "bip.gov.sa", false */ 'b', 'i', 'p', '.', 'g', 'o', 'v', '.', 's', 'a', '\0', + /* "biou.me", true */ 'b', 'i', 'o', 'u', '.', 'm', 'e', '\0', /* "birdfeeder.online", true */ 'b', 'i', 'r', 'd', 'f', 'e', 'e', 'd', 'e', 'r', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0', /* "birdymanbestreviews.com", true */ 'b', 'i', 'r', 'd', 'y', 'm', 'a', 'n', 'b', 'e', 's', 't', 'r', 'e', 'v', 'i', 'e', 'w', 's', '.', 'c', 'o', 'm', '\0', /* "birgit-rydlewski.de", true */ 'b', 'i', 'r', 'g', 'i', 't', '-', 'r', 'y', 'd', 'l', 'e', 'w', 's', 'k', 'i', '.', 'd', 'e', '\0', @@ -1644,6 +1648,7 @@ static const char kSTSHostTable[] = { /* "bitstorm.nl", true */ 'b', 'i', 't', 's', 't', 'o', 'r', 'm', '.', 'n', 'l', '\0', /* "bitstorm.org", true */ 'b', 'i', 't', 's', 't', 'o', 'r', 'm', '.', 'o', 'r', 'g', '\0', /* "bittersweetcandybowl.com", true */ 'b', 'i', 't', 't', 'e', 'r', 's', 'w', 'e', 'e', 't', 'c', 'a', 'n', 'd', 'y', 'b', 'o', 'w', 'l', '.', 'c', 'o', 'm', '\0', + /* "bittmann.me", true */ 'b', 'i', 't', 't', 'm', 'a', 'n', 'n', '.', 'm', 'e', '\0', /* "bittylicious.com", true */ 'b', 'i', 't', 't', 'y', 'l', 'i', 'c', 'i', 'o', 'u', 's', '.', 'c', 'o', 'm', '\0', /* "bitvest.io", true */ 'b', 'i', 't', 'v', 'e', 's', 't', '.', 'i', 'o', '\0', /* "bitwolk.nl", true */ 'b', 'i', 't', 'w', 'o', 'l', 'k', '.', 'n', 'l', '\0', @@ -1792,7 +1797,6 @@ static const char kSTSHostTable[] = { /* "bohaishibei.com", true */ 'b', 'o', 'h', 'a', 'i', 's', 'h', 'i', 'b', 'e', 'i', '.', 'c', 'o', 'm', '\0', /* "bohramt.de", true */ 'b', 'o', 'h', 'r', 'a', 'm', 't', '.', 'd', 'e', '\0', /* "boiadeirodeberna.com", true */ 'b', 'o', 'i', 'a', 'd', 'e', 'i', 'r', 'o', 'd', 'e', 'b', 'e', 'r', 'n', 'a', '.', 'c', 'o', 'm', '\0', - /* "boilesen.com", true */ 'b', 'o', 'i', 'l', 'e', 's', 'e', 'n', '.', 'c', 'o', 'm', '\0', /* "boiseonlinemall.com", true */ 'b', 'o', 'i', 's', 'e', 'o', 'n', 'l', 'i', 'n', 'e', 'm', 'a', 'l', 'l', '.', 'c', 'o', 'm', '\0', /* "bokeyy.com", true */ 'b', 'o', 'k', 'e', 'y', 'y', '.', 'c', 'o', 'm', '\0', /* "bolt.cm", true */ 'b', 'o', 'l', 't', '.', 'c', 'm', '\0', @@ -1826,7 +1830,6 @@ static const char kSTSHostTable[] = { /* "borysek.net", true */ 'b', 'o', 'r', 'y', 's', 'e', 'k', '.', 'n', 'e', 't', '\0', /* "borzoi.com.br", true */ 'b', 'o', 'r', 'z', 'o', 'i', '.', 'c', 'o', 'm', '.', 'b', 'r', '\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', /* "boudah.pl", true */ 'b', 'o', 'u', 'd', 'a', 'h', '.', 'p', 'l', '\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', @@ -1925,7 +1928,6 @@ static const char kSTSHostTable[] = { /* "brightstarkids.com.au", false */ 'b', 'r', 'i', 'g', 'h', 't', 's', 't', 'a', 'r', 'k', 'i', 'd', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "brightstarkids.net", false */ 'b', 'r', 'i', 'g', 'h', 't', 's', 't', 'a', 'r', 'k', 'i', 'd', 's', '.', 'n', 'e', 't', '\0', /* "brightstarkids.sg", false */ 'b', 'r', 'i', 'g', 'h', 't', 's', 't', 'a', 'r', 'k', 'i', 'd', 's', '.', 's', 'g', '\0', - /* "brigidaarie.com", true */ 'b', 'r', 'i', 'g', 'i', 'd', 'a', 'a', 'r', 'i', 'e', '.', 'c', 'o', 'm', '\0', /* "brilliantbuilders.co.uk", true */ 'b', 'r', 'i', 'l', 'l', 'i', 'a', 'n', 't', 'b', 'u', 'i', 'l', 'd', 'e', 'r', 's', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "brilliantdecisionmaking.com", true */ 'b', 'r', 'i', 'l', 'l', 'i', 'a', 'n', 't', 'd', 'e', 'c', 'i', 's', 'i', 'o', 'n', 'm', 'a', 'k', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "brinkhu.is", true */ 'b', 'r', 'i', 'n', 'k', 'h', 'u', '.', 'i', 's', '\0', @@ -2728,7 +2730,6 @@ static const char kSTSHostTable[] = { /* "cocoaheads.at", false */ 'c', 'o', 'c', 'o', 'a', 'h', 'e', 'a', 'd', 's', '.', 'a', 't', '\0', /* "cocodemy.com", true */ 'c', 'o', 'c', 'o', 'd', 'e', 'm', 'y', '.', 'c', 'o', 'm', '\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', @@ -2900,7 +2901,7 @@ static const char kSTSHostTable[] = { /* "contessa32experience.com", true */ 'c', 'o', 'n', 't', 'e', 's', 's', 'a', '3', '2', 'e', 'x', 'p', 'e', 'r', 'i', 'e', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0', /* "contrabass.net", true */ 'c', 'o', 'n', 't', 'r', 'a', 'b', 'a', 's', 's', '.', 'n', 'e', 't', '\0', /* "contributor.google.com", false */ 'c', 'o', 'n', 't', 'r', 'i', 'b', 'u', 't', 'o', 'r', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0', - /* "conve.eu", true */ 'c', 'o', 'n', 'v', 'e', '.', 'e', 'u', '\0', + /* "conve.eu", false */ 'c', 'o', 'n', 'v', 'e', '.', 'e', 'u', '\0', /* "convergemagazine.com", true */ 'c', 'o', 'n', 'v', 'e', 'r', 'g', 'e', 'm', 'a', 'g', 'a', 'z', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0', /* "conversiones.com", true */ 'c', 'o', 'n', 'v', 'e', 'r', 's', 'i', 'o', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "convert.im", true */ 'c', 'o', 'n', 'v', 'e', 'r', 't', '.', 'i', 'm', '\0', @@ -2919,6 +2920,7 @@ static const char kSTSHostTable[] = { /* "coolaj86.com", true */ 'c', 'o', 'o', 'l', 'a', 'j', '8', '6', '.', 'c', 'o', 'm', '\0', /* "cooldan.com", true */ 'c', 'o', 'o', 'l', 'd', 'a', 'n', '.', 'c', 'o', 'm', '\0', /* "coolviewthermostat.com", true */ 'c', 'o', 'o', 'l', 'v', 'i', 'e', 'w', 't', 'h', 'e', 'r', 'm', 'o', 's', 't', 'a', 't', '.', 'c', 'o', 'm', '\0', + /* "coopens.com", true */ 'c', 'o', 'o', 'p', 'e', 'n', 's', '.', 'c', 'o', 'm', '\0', /* "coore.jp", true */ 'c', 'o', 'o', 'r', 'e', '.', 'j', 'p', '\0', /* "cooxa.com", true */ 'c', 'o', 'o', 'x', 'a', '.', 'c', 'o', 'm', '\0', /* "copperhead.co", true */ 'c', 'o', 'p', 'p', 'e', 'r', 'h', 'e', 'a', 'd', '.', 'c', 'o', '\0', @@ -2970,7 +2972,6 @@ static const char kSTSHostTable[] = { /* "couragefound.org", true */ 'c', 'o', 'u', 'r', 'a', 'g', 'e', 'f', 'o', 'u', 'n', 'd', '.', 'o', 'r', 'g', '\0', /* "courageousparentsnetwork.org", true */ 'c', 'o', 'u', 'r', 'a', 'g', 'e', 'o', 'u', 's', 'p', 'a', 'r', 'e', 'n', 't', 's', 'n', 'e', 't', 'w', 'o', 'r', 'k', '.', 'o', 'r', 'g', '\0', /* "coursera.org", true */ 'c', 'o', 'u', 'r', 's', 'e', 'r', 'a', '.', 'o', 'r', 'g', '\0', - /* "courses.nl", true */ 'c', 'o', 'u', 'r', 's', 'e', 's', '.', 'n', 'l', '\0', /* "courtlistener.com", true */ 'c', 'o', 'u', 'r', 't', 'l', 'i', 's', 't', 'e', 'n', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "cousincouples.com", true */ 'c', 'o', 'u', 's', 'i', 'n', 'c', 'o', 'u', 'p', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "covenantoftheriver.org", true */ 'c', 'o', 'v', 'e', 'n', 'a', 'n', 't', 'o', 'f', 't', 'h', 'e', 'r', 'i', 'v', 'e', 'r', '.', 'o', 'r', 'g', '\0', @@ -3135,7 +3136,6 @@ static const char kSTSHostTable[] = { /* "cun.lu", true */ 'c', 'u', 'n', '.', 'l', 'u', '\0', /* "cuni-cuni-club.com", true */ 'c', 'u', 'n', 'i', '-', 'c', 'u', 'n', 'i', '-', 'c', 'l', 'u', 'b', '.', 'c', 'o', 'm', '\0', /* "cuni-rec.com", true */ 'c', 'u', 'n', 'i', '-', 'r', 'e', 'c', '.', 'c', 'o', 'm', '\0', - /* "cuntflaps.me", true */ 'c', 'u', 'n', 't', 'f', 'l', 'a', 'p', 's', '.', 'm', 'e', '\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', @@ -3590,6 +3590,7 @@ static const char kSTSHostTable[] = { /* "devh.net", true */ 'd', 'e', 'v', 'h', '.', 'n', 'e', 't', '\0', /* "deviant.email", true */ 'd', 'e', 'v', 'i', 'a', 'n', 't', '.', 'e', 'm', 'a', 'i', 'l', '\0', /* "devilshakerz.com", true */ 'd', 'e', 'v', 'i', 'l', 's', 'h', 'a', 'k', 'e', 'r', 'z', '.', 'c', 'o', 'm', '\0', + /* "deviltraxxx.de", true */ 'd', 'e', 'v', 'i', 'l', 't', 'r', 'a', 'x', 'x', 'x', '.', 'd', 'e', '\0', /* "devinfo.net", false */ 'd', 'e', 'v', 'i', 'n', 'f', 'o', '.', 'n', 'e', 't', '\0', /* "devisnow.fr", true */ 'd', 'e', 'v', 'i', 's', 'n', 'o', 'w', '.', 'f', 'r', '\0', /* "devistravaux.org", true */ 'd', 'e', 'v', 'i', 's', 't', 'r', 'a', 'v', 'a', 'u', 'x', '.', 'o', 'r', 'g', '\0', @@ -3604,6 +3605,7 @@ static const char kSTSHostTable[] = { /* "devopps.me", true */ 'd', 'e', 'v', 'o', 'p', 'p', 's', '.', 'm', 'e', '\0', /* "devops-survey.com", true */ 'd', 'e', 'v', 'o', 'p', 's', '-', 's', 'u', 'r', 'v', 'e', 'y', '.', 'c', 'o', 'm', '\0', /* "devopsconnected.com", false */ 'd', 'e', 'v', 'o', 'p', 's', 'c', 'o', 'n', 'n', 'e', 'c', 't', 'e', 'd', '.', 'c', 'o', 'm', '\0', + /* "devpsy.info", true */ 'd', 'e', 'v', 'p', 's', 'y', '.', 'i', 'n', 'f', 'o', '\0', /* "devstaff.gr", true */ 'd', 'e', 'v', 's', 't', 'a', 'f', 'f', '.', 'g', 'r', '\0', /* "devzero.io", true */ 'd', 'e', 'v', 'z', 'e', 'r', 'o', '.', 'i', 'o', '\0', /* "dewalch.net", true */ 'd', 'e', 'w', 'a', 'l', 'c', 'h', '.', 'n', 'e', 't', '\0', @@ -3705,6 +3707,7 @@ static const char kSTSHostTable[] = { /* "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', + /* "dimonb.com", true */ 'd', 'i', 'm', 'o', 'n', 'b', '.', 'c', 'o', 'm', '\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', @@ -3894,6 +3897,7 @@ static const char kSTSHostTable[] = { /* "dotacni-parazit.cz", true */ 'd', 'o', 't', 'a', 'c', 'n', 'i', '-', 'p', 'a', 'r', 'a', 'z', 'i', 't', '.', 'c', 'z', '\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', /* "dotkod.pl", true */ 'd', 'o', 't', 'k', 'o', 'd', '.', 'p', 'l', '\0', /* "dotphoto.com", true */ 'd', 'o', 't', 'p', 'h', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0', @@ -3939,6 +3943,7 @@ static const char kSTSHostTable[] = { /* "drbethanybarnes.com", true */ 'd', 'r', 'b', 'e', 't', 'h', 'a', 'n', 'y', 'b', 'a', 'r', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "dreamcatcherblog.de", true */ 'd', 'r', 'e', 'a', 'm', 'c', 'a', 't', 'c', 'h', 'e', 'r', 'b', 'l', 'o', 'g', '.', 'd', 'e', '\0', /* "dreamcreator108.com", true */ 'd', 'r', 'e', 'a', 'm', 'c', 'r', 'e', 'a', 't', 'o', 'r', '1', '0', '8', '.', 'c', 'o', 'm', '\0', + /* "dreaming.solutions", true */ 'd', 'r', 'e', 'a', 'm', 'i', 'n', 'g', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0', /* "dreamlinehost.com", false */ 'd', 'r', 'e', 'a', 'm', 'l', 'i', 'n', 'e', 'h', 'o', 's', 't', '.', 'c', 'o', 'm', '\0', /* "dreamsforabetterworld.com.au", true */ 'd', 'r', 'e', 'a', 'm', 's', 'f', 'o', 'r', 'a', 'b', 'e', 't', 't', 'e', 'r', 'w', 'o', 'r', 'l', 'd', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "dreamtechie.com", true */ 'd', 'r', 'e', 'a', 'm', 't', 'e', 'c', 'h', 'i', 'e', '.', 'c', 'o', 'm', '\0', @@ -4062,7 +4067,6 @@ static const char kSTSHostTable[] = { /* "dziekonski.com", true */ 'd', 'z', 'i', 'e', 'k', 'o', 'n', 's', 'k', 'i', '.', 'c', 'o', 'm', '\0', /* "dzndk.com", true */ 'd', 'z', 'n', 'd', 'k', '.', 'c', 'o', 'm', '\0', /* "dzndk.net", true */ 'd', 'z', 'n', 'd', 'k', '.', 'n', 'e', 't', '\0', - /* "dzyabchenko.com", true */ 'd', 'z', 'y', 'a', 'b', 'c', 'h', 'e', 'n', 'k', 'o', '.', 'c', 'o', 'm', '\0', /* "e-aut.net", true */ 'e', '-', 'a', 'u', 't', '.', 'n', 'e', 't', '\0', /* "e-biografias.net", true */ 'e', '-', 'b', 'i', 'o', 'g', 'r', 'a', 'f', 'i', 'a', 's', '.', 'n', 'e', 't', '\0', /* "e-isfa.eu", true */ 'e', '-', 'i', 's', 'f', 'a', '.', 'e', 'u', '\0', @@ -4248,7 +4252,6 @@ static const char kSTSHostTable[] = { /* "eitler.cx", true */ 'e', 'i', 't', 'l', 'e', 'r', '.', 'c', 'x', '\0', /* "eiyoushi-shigoto.com", true */ 'e', 'i', 'y', 'o', 'u', 's', 'h', 'i', '-', 's', 'h', 'i', 'g', 'o', 't', 'o', '.', 'c', 'o', 'm', '\0', /* "ejeff.org", true */ 'e', 'j', 'e', 'f', 'f', '.', 'o', 'r', 'g', '\0', - /* "ekedc.com", true */ 'e', 'k', 'e', 'd', 'c', '.', 'c', 'o', 'm', '\0', /* "ekodevices.com", true */ 'e', 'k', 'o', 'd', 'e', 'v', 'i', 'c', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "ekokontakt.cz", true */ 'e', 'k', 'o', 'k', 'o', 'n', 't', 'a', 'k', 't', '.', 'c', 'z', '\0', /* "ekostecki.de", true */ 'e', 'k', 'o', 's', 't', 'e', 'c', 'k', 'i', '.', 'd', 'e', '\0', @@ -4301,7 +4304,6 @@ static const char kSTSHostTable[] = { /* "elizabethgreenfield.com", true */ 'e', 'l', 'i', 'z', 'a', 'b', 'e', 't', 'h', 'g', 'r', 'e', 'e', 'n', 'f', 'i', 'e', 'l', 'd', '.', 'c', 'o', 'm', '\0', /* "ella-kwikmed.com", false */ 'e', 'l', 'l', 'a', '-', 'k', 'w', 'i', 'k', 'm', 'e', 'd', '.', 'c', 'o', 'm', '\0', /* "ellegaard.dk", true */ 'e', 'l', 'l', 'e', 'g', 'a', 'a', 'r', 'd', '.', 'd', 'k', '\0', - /* "elliotgluck.com", true */ 'e', 'l', 'l', 'i', 'o', 't', 'g', 'l', 'u', 'c', 'k', '.', 'c', 'o', 'm', '\0', /* "elliquiy.com", true */ 'e', 'l', 'l', 'i', 'q', 'u', 'i', 'y', '.', 'c', 'o', 'm', '\0', /* "elliriehl.at", true */ 'e', 'l', 'l', 'i', 'r', 'i', 'e', 'h', 'l', '.', 'a', 't', '\0', /* "ellsinger.me", true */ 'e', 'l', 'l', 's', 'i', 'n', 'g', 'e', 'r', '.', 'm', 'e', '\0', @@ -4337,6 +4339,7 @@ static const char kSTSHostTable[] = { /* "emilstahl.dk", true */ 'e', 'm', 'i', 'l', 's', 't', 'a', 'h', 'l', '.', 'd', 'k', '\0', /* "emilvarga.com", true */ 'e', 'm', 'i', 'l', 'v', 'a', 'r', 'g', 'a', '.', 'c', 'o', 'm', '\0', /* "emilyhorsman.com", true */ 'e', 'm', 'i', 'l', 'y', 'h', 'o', 'r', 's', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0', + /* "emilyshepherd.me", true */ 'e', 'm', 'i', 'l', 'y', 's', 'h', 'e', 'p', 'h', 'e', 'r', 'd', '.', 'm', 'e', '\0', /* "emirabiz.com", false */ 'e', 'm', 'i', 'r', 'a', 'b', 'i', 'z', '.', 'c', 'o', 'm', '\0', /* "emkanrecords.com", true */ 'e', 'm', 'k', 'a', 'n', 'r', 'e', 'c', 'o', 'r', 'd', 's', '.', 'c', 'o', 'm', '\0', /* "emkei.cz", true */ 'e', 'm', 'k', 'e', 'i', '.', 'c', 'z', '\0', @@ -4384,7 +4387,6 @@ static const char kSTSHostTable[] = { /* "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", false */ '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', /* "engineowning.com", true */ 'e', 'n', 'g', 'i', 'n', 'e', 'o', 'w', 'n', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "enginepit.com", true */ 'e', 'n', 'g', 'i', 'n', 'e', 'p', 'i', 't', '.', 'c', 'o', 'm', '\0', /* "enginx.net", true */ 'e', 'n', 'g', 'i', 'n', 'x', '.', 'n', 'e', 't', '\0', @@ -4523,7 +4525,6 @@ static const char kSTSHostTable[] = { /* "estcequonmetenprodaujourdhui.info", true */ 'e', 's', 't', 'c', 'e', 'q', 'u', 'o', 'n', 'm', 'e', 't', 'e', 'n', 'p', 'r', 'o', 'd', 'a', 'u', 'j', 'o', 'u', 'r', 'd', 'h', 'u', 'i', '.', 'i', 'n', 'f', 'o', '\0', /* "esteam.se", true */ 'e', 's', 't', 'e', 'a', 'm', '.', 's', 'e', '\0', /* "estebanborges.com", true */ 'e', 's', 't', 'e', 'b', 'a', 'n', 'b', 'o', 'r', 'g', 'e', 's', '.', 'c', 'o', 'm', '\0', - /* "estoic.net", true */ 'e', 's', 't', 'o', 'i', 'c', '.', 'n', 'e', 't', '\0', /* "estonoentraenelexamen.com", true */ 'e', 's', 't', 'o', 'n', 'o', 'e', 'n', 't', 'r', 'a', 'e', 'n', 'e', 'l', 'e', 'x', 'a', 'm', 'e', 'n', '.', 'c', 'o', 'm', '\0', /* "estrietoit.com", false */ 'e', 's', 't', 'r', 'i', 'e', 't', 'o', 'i', 't', '.', 'c', 'o', 'm', '\0', /* "et180.com", true */ 'e', 't', '1', '8', '0', '.', 'c', 'o', 'm', '\0', @@ -5023,7 +5024,6 @@ static const char kSTSHostTable[] = { /* "flymns.fr", true */ 'f', 'l', 'y', 'm', 'n', 's', '.', 'f', 'r', '\0', /* "flynn.io", true */ 'f', 'l', 'y', 'n', 'n', '.', 'i', 'o', '\0', /* "flyserver.co.il", true */ 'f', 'l', 'y', 's', 'e', 'r', 'v', 'e', 'r', '.', 'c', 'o', '.', 'i', 'l', '\0', - /* "flyss.net", true */ 'f', 'l', 'y', 's', 's', '.', 'n', 'e', 't', '\0', /* "fm.ie", true */ 'f', 'm', '.', 'i', 'e', '\0', /* "fmarchal.fr", true */ 'f', 'm', 'a', 'r', 'c', 'h', 'a', 'l', '.', 'f', 'r', '\0', /* "fnb-griffinonline.com", true */ 'f', 'n', 'b', '-', 'g', 'r', 'i', 'f', 'f', 'i', 'n', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0', @@ -5303,6 +5303,7 @@ static const char kSTSHostTable[] = { /* "gagniard.org", true */ 'g', 'a', 'g', 'n', 'i', 'a', 'r', 'd', '.', 'o', 'r', 'g', '\0', /* "gagor.pl", true */ 'g', 'a', 'g', 'o', 'r', '.', 'p', 'l', '\0', /* "gagstempel.de", true */ 'g', 'a', 'g', 's', 't', 'e', 'm', 'p', 'e', 'l', '.', 'd', 'e', '\0', + /* "gaichon.com", true */ 'g', 'a', 'i', 'c', 'h', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "gaireg.de", true */ 'g', 'a', 'i', 'r', 'e', 'g', '.', 'd', 'e', '\0', /* "gaiserik.com", false */ 'g', 'a', 'i', 's', 'e', 'r', 'i', 'k', '.', 'c', 'o', 'm', '\0', /* "gaite.me", true */ 'g', 'a', 'i', 't', 'e', '.', 'm', 'e', '\0', @@ -5314,6 +5315,8 @@ static const char kSTSHostTable[] = { /* "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', /* "galena.io", true */ 'g', 'a', 'l', 'e', 'n', 'a', '.', 'i', 'o', '\0', + /* "galgoafegao.com.br", true */ 'g', 'a', 'l', 'g', 'o', 'a', 'f', 'e', 'g', 'a', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', + /* "galgoingles.com.br", true */ 'g', 'a', 'l', 'g', 'o', 'i', 'n', 'g', 'l', 'e', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', /* "galgopersa.com.br", true */ 'g', 'a', 'l', 'g', 'o', 'p', 'e', 'r', 's', 'a', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', /* "galletasgabi.com.mx", true */ 'g', 'a', 'l', 'l', 'e', 't', 'a', 's', 'g', 'a', 'b', 'i', '.', 'c', 'o', 'm', '.', 'm', 'x', '\0', /* "gam3rs.de", true */ 'g', 'a', 'm', '3', 'r', 's', '.', 'd', 'e', '\0', @@ -5510,7 +5513,6 @@ static const char kSTSHostTable[] = { /* "gha.st", true */ 'g', 'h', 'a', '.', 's', 't', '\0', /* "ghcif.de", true */ 'g', 'h', 'c', 'i', 'f', '.', 'd', 'e', '\0', /* "gheorghe-sarcov.ga", true */ 'g', 'h', 'e', 'o', 'r', 'g', 'h', 'e', '-', 's', 'a', 'r', 'c', 'o', 'v', '.', 'g', 'a', '\0', - /* "ghostblog.info", true */ 'g', 'h', 'o', 's', 't', 'b', 'l', 'o', 'g', '.', 'i', 'n', 'f', 'o', '\0', /* "ghostcir.com", true */ 'g', 'h', 'o', 's', 't', 'c', 'i', 'r', '.', 'c', 'o', 'm', '\0', /* "ghostwritershigh.com", true */ 'g', 'h', 'o', 's', 't', 'w', 'r', 'i', 't', 'e', 'r', 's', 'h', 'i', 'g', 'h', '.', 'c', 'o', 'm', '\0', /* "ghrelinblocker.info", true */ 'g', 'h', 'r', 'e', 'l', 'i', 'n', 'b', 'l', 'o', 'c', 'k', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0', @@ -5856,6 +5858,7 @@ static const char kSTSHostTable[] = { /* "gus.host", true */ 'g', 'u', 's', '.', 'h', 'o', 's', 't', '\0', /* "gus.moe", true */ 'g', 'u', 's', '.', 'm', 'o', 'e', '\0', /* "guscaplan.me", true */ 'g', 'u', 's', 'c', 'a', 'p', 'l', 'a', 'n', '.', 'm', 'e', '\0', + /* "guso.site", true */ 'g', 'u', 's', 'o', '.', 's', 'i', 't', 'e', '\0', /* "guthabenkarten-billiger.de", true */ 'g', 'u', 't', 'h', 'a', 'b', 'e', 'n', 'k', 'a', 'r', 't', 'e', 'n', '-', 'b', 'i', 'l', 'l', 'i', 'g', 'e', 'r', '.', 'd', 'e', '\0', /* "guts.me", true */ 'g', 'u', 't', 's', '.', 'm', 'e', '\0', /* "guvernalternativa.ro", true */ 'g', 'u', 'v', 'e', 'r', 'n', 'a', 'l', 't', 'e', 'r', 'n', 'a', 't', 'i', 'v', 'a', '.', 'r', 'o', '\0', @@ -5918,7 +5921,6 @@ static const char kSTSHostTable[] = { /* "hajnzic.at", true */ 'h', 'a', 'j', 'n', 'z', 'i', 'c', '.', 'a', 't', '\0', /* "hakase.kr", true */ 'h', 'a', 'k', 'a', 's', 'e', '.', 'k', 'r', '\0', /* "hakatabijin-mind.com", true */ 'h', 'a', 'k', 'a', 't', 'a', 'b', 'i', 'j', 'i', 'n', '-', 'm', 'i', 'n', 'd', '.', 'c', 'o', 'm', '\0', - /* "hake.me", true */ 'h', 'a', 'k', 'e', '.', 'm', 'e', '\0', /* "hakugin.me", true */ 'h', 'a', 'k', 'u', 'g', 'i', 'n', '.', 'm', 'e', '\0', /* "halcyonsbastion.com", true */ 'h', 'a', 'l', 'c', 'y', 'o', 'n', 's', 'b', 'a', 's', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "halkyon.net", true */ 'h', 'a', 'l', 'k', 'y', 'o', 'n', '.', 'n', 'e', 't', '\0', @@ -6044,6 +6046,7 @@ static const char kSTSHostTable[] = { /* "healthjoy.com", true */ 'h', 'e', 'a', 'l', 't', 'h', 'j', 'o', 'y', '.', 'c', 'o', 'm', '\0', /* "heartgames.pl", true */ 'h', 'e', 'a', 'r', 't', 'g', 'a', 'm', 'e', 's', '.', 'p', 'l', '\0', /* "heartmdinstitute.com", true */ 'h', 'e', 'a', 'r', 't', 'm', 'd', 'i', 'n', 's', 't', 'i', 't', 'u', 't', 'e', '.', 'c', 'o', 'm', '\0', + /* "heartsucker.com", true */ 'h', 'e', 'a', 'r', 't', 's', 'u', 'c', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "hearty.blog", true */ 'h', 'e', 'a', 'r', 't', 'y', '.', 'b', 'l', 'o', 'g', '\0', /* "hearty.ga", true */ 'h', 'e', 'a', 'r', 't', 'y', '.', 'g', 'a', '\0', /* "hearty.ink", true */ 'h', 'e', 'a', 'r', 't', 'y', '.', 'i', 'n', 'k', '\0', @@ -6136,6 +6139,7 @@ static const char kSTSHostTable[] = { /* "herringsresidence.be", true */ 'h', 'e', 'r', 'r', 'i', 'n', 'g', 's', 'r', 'e', 's', 'i', 'd', 'e', 'n', 'c', 'e', '.', 'b', 'e', '\0', /* "herrsmith.com", true */ 'h', 'e', 'r', 'r', 's', 'm', 'i', 't', 'h', '.', 'c', 'o', 'm', '\0', /* "hesaplama.net", true */ 'h', 'e', 's', 'a', 'p', 'l', 'a', 'm', 'a', '.', 'n', 'e', 't', '\0', + /* "hethely.ch", true */ 'h', 'e', 't', 'h', 'e', 'l', 'y', '.', 'c', 'h', '\0', /* "hetmer.com", true */ 'h', 'e', 't', 'm', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "heute-kaufen.de", true */ 'h', 'e', 'u', 't', 'e', '-', 'k', 'a', 'u', 'f', 'e', 'n', '.', 'd', 'e', '\0', /* "hex2013.com", true */ 'h', 'e', 'x', '2', '0', '1', '3', '.', 'c', 'o', 'm', '\0', @@ -6260,7 +6264,6 @@ static const char kSTSHostTable[] = { /* "hoodoo.tech", true */ 'h', 'o', 'o', 'd', 'o', 'o', '.', 't', 'e', 'c', 'h', '\0', /* "hoodtrader.com", true */ 'h', 'o', 'o', 'd', 't', 'r', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "hookbin.com", true */ 'h', 'o', 'o', 'k', 'b', 'i', 'n', '.', 'c', 'o', 'm', '\0', - /* "hooowl.com", true */ 'h', 'o', 'o', 'o', 'w', 'l', '.', 'c', 'o', 'm', '\0', /* "hoopsacademyusa.com", true */ 'h', 'o', 'o', 'p', 's', 'a', 'c', 'a', 'd', 'e', 'm', 'y', 'u', 's', 'a', '.', 'c', 'o', 'm', '\0', /* "hoovism.com", true */ 'h', 'o', 'o', 'v', 'i', 's', 'm', '.', 'c', 'o', 'm', '\0', /* "hopesb.org", true */ 'h', 'o', 'p', 'e', 's', 'b', '.', 'o', 'r', 'g', '\0', @@ -6383,6 +6386,7 @@ static const char kSTSHostTable[] = { /* "hunter.io", true */ 'h', 'u', 'n', 't', 'e', 'r', '.', 'i', 'o', '\0', /* "huodongweb.com", true */ 'h', 'u', 'o', 'd', 'o', 'n', 'g', 'w', 'e', 'b', '.', 'c', 'o', 'm', '\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', /* "huroji.com", true */ 'h', 'u', 'r', 'o', 'j', 'i', '.', 'c', 'o', 'm', '\0', @@ -6949,12 +6953,11 @@ static const char kSTSHostTable[] = { /* "its-v.de", true */ 'i', 't', 's', '-', 'v', '.', 'd', 'e', '\0', /* "its4living.com", true */ 'i', 't', 's', '4', 'l', 'i', 'v', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "itsanicedoor.co.uk", true */ 'i', 't', 's', 'a', 'n', 'i', 'c', 'e', 'd', 'o', 'o', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0', - /* "itsatrap.nl", true */ 'i', 't', 's', 'a', 't', 'r', 'a', 'p', '.', 'n', 'l', '\0', + /* "itsatrap.nl", false */ 'i', 't', 's', 'a', 't', 'r', 'a', 'p', '.', 'n', 'l', '\0', /* "itsecguy.com", true */ 'i', 't', 's', 'e', 'c', 'g', 'u', 'y', '.', 'c', 'o', 'm', '\0', /* "itsgoingdown.org", true */ 'i', 't', 's', 'g', 'o', 'i', 'n', 'g', 'd', 'o', 'w', 'n', '.', 'o', 'r', 'g', '\0', /* "itskayla.com", false */ 'i', 't', 's', 'k', 'a', 'y', 'l', 'a', '.', 'c', 'o', 'm', '\0', /* "itsok.de", true */ 'i', 't', 's', 'o', 'k', '.', 'd', 'e', '\0', - /* "itspawned.com", true */ 'i', 't', 's', 'p', 'a', 'w', 'n', 'e', 'd', '.', 'c', 'o', 'm', '\0', /* "itspersonaltraining.nl", true */ 'i', 't', 's', 'p', 'e', 'r', 's', 'o', 'n', 'a', 'l', 't', 'r', 'a', 'i', 'n', 'i', 'n', 'g', '.', 'n', 'l', '\0', /* "itsryan.com", false */ 'i', 't', 's', 'r', 'y', 'a', 'n', '.', 'c', 'o', 'm', '\0', /* "itu2015.de", true */ 'i', 't', 'u', '2', '0', '1', '5', '.', 'd', 'e', '\0', @@ -7062,7 +7065,6 @@ static const char kSTSHostTable[] = { /* "jamonsilva.com", true */ 'j', 'a', 'm', 'o', 'n', 's', 'i', 'l', 'v', 'a', '.', 'c', 'o', 'm', '\0', /* "jan-and-maaret.de", true */ 'j', 'a', 'n', '-', 'a', 'n', 'd', '-', 'm', 'a', 'a', 'r', 'e', 't', '.', 'd', 'e', '\0', /* "jan-cermak.cz", true */ 'j', 'a', 'n', '-', 'c', 'e', 'r', 'm', 'a', 'k', '.', 'c', 'z', '\0', - /* "jan-roenspies.de", true */ 'j', 'a', 'n', '-', 'r', 'o', 'e', 'n', 's', 'p', 'i', 'e', 's', '.', 'd', 'e', '\0', /* "jangho.me", true */ 'j', 'a', 'n', 'g', 'h', 'o', '.', 'm', 'e', '\0', /* "jani.media", true */ 'j', 'a', 'n', 'i', '.', 'm', 'e', 'd', 'i', 'a', '\0', /* "janik.xyz", true */ 'j', 'a', 'n', 'i', 'k', '.', 'x', 'y', 'z', '\0', @@ -7132,7 +7134,7 @@ static const char kSTSHostTable[] = { /* "jeffersonregan.com", true */ 'j', 'e', 'f', 'f', 'e', 'r', 's', 'o', 'n', 'r', 'e', 'g', 'a', 'n', '.', 'c', 'o', 'm', '\0', /* "jeffersonregan.net", true */ 'j', 'e', 'f', 'f', 'e', 'r', 's', 'o', 'n', 'r', 'e', 'g', 'a', 'n', '.', 'n', 'e', 't', '\0', /* "jeffersonregan.org", true */ 'j', 'e', 'f', 'f', 'e', 'r', 's', 'o', 'n', 'r', 'e', 'g', 'a', 'n', '.', 'o', 'r', 'g', '\0', - /* "jeffsanders.com", false */ 'j', 'e', 'f', 'f', 's', 'a', 'n', 'd', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0', + /* "jeffsanders.com", true */ 'j', 'e', 'f', 'f', 's', 'a', 'n', 'd', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0', /* "jefftickle.com", true */ 'j', 'e', 'f', 'f', 't', 'i', 'c', 'k', 'l', 'e', '.', 'c', 'o', 'm', '\0', /* "jekkt.com", true */ 'j', 'e', 'k', 'k', 't', '.', 'c', 'o', 'm', '\0', /* "jellow.nl", true */ 'j', 'e', 'l', 'l', 'o', 'w', '.', 'n', 'l', '\0', @@ -7374,6 +7376,7 @@ static const char kSTSHostTable[] = { /* "kab-s.de", true */ 'k', 'a', 'b', '-', 's', '.', 'd', 'e', '\0', /* "kabat-fans.cz", true */ 'k', 'a', 'b', 'a', 't', '-', 'f', 'a', 'n', 's', '.', 'c', 'z', '\0', /* "kabeuchi.com", true */ 'k', 'a', 'b', 'e', 'u', 'c', 'h', 'i', '.', 'c', 'o', 'm', '\0', + /* "kabus.org", true */ 'k', 'a', 'b', 'u', 's', '.', 'o', 'r', 'g', '\0', /* "kachlikova2.cz", true */ 'k', 'a', 'c', 'h', 'l', 'i', 'k', 'o', 'v', 'a', '2', '.', 'c', 'z', '\0', /* "kackscharf.de", true */ 'k', 'a', 'c', 'k', 's', 'c', 'h', 'a', 'r', 'f', '.', 'd', 'e', '\0', /* "kadmec.com", true */ 'k', 'a', 'd', 'm', 'e', 'c', '.', 'c', 'o', 'm', '\0', @@ -7394,7 +7397,6 @@ static const char kSTSHostTable[] = { /* "kaleidomarketing.com", true */ 'k', 'a', 'l', 'e', 'i', 'd', 'o', 'm', 'a', 'r', 'k', 'e', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "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', - /* "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', @@ -7445,7 +7447,6 @@ static const char kSTSHostTable[] = { /* "karmaplatform.com", true */ 'k', 'a', 'r', 'm', 'a', 'p', 'l', 'a', 't', 'f', 'o', 'r', 'm', '.', 'c', 'o', 'm', '\0', /* "karmaspa.se", true */ 'k', 'a', 'r', 'm', 'a', 's', 'p', 'a', '.', 's', 'e', '\0', /* "karmic.com", true */ 'k', 'a', 'r', 'm', 'i', 'c', '.', 'c', 'o', 'm', '\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', @@ -7491,6 +7492,7 @@ static const char kSTSHostTable[] = { /* "keaneokelley.com", true */ 'k', 'e', 'a', 'n', 'e', 'o', 'k', 'e', 'l', 'l', 'e', 'y', '.', 'c', 'o', 'm', '\0', /* "keaysmillwork.com", true */ 'k', 'e', 'a', 'y', 's', 'm', 'i', 'l', 'l', 'w', 'o', 'r', 'k', '.', 'c', 'o', 'm', '\0', /* "kedarastudios.com", true */ 'k', 'e', 'd', 'a', 'r', 'a', 's', 't', 'u', 'd', 'i', 'o', 's', '.', 'c', 'o', 'm', '\0', + /* "keeleysam.com", true */ 'k', 'e', 'e', 'l', 'e', 'y', 's', 'a', 'm', '.', 'c', 'o', 'm', '\0', /* "keepa.com", true */ 'k', 'e', 'e', 'p', 'a', '.', 'c', 'o', 'm', '\0', /* "keepcoalintheground.org", true */ 'k', 'e', 'e', 'p', 'c', 'o', 'a', 'l', 'i', 'n', 't', 'h', 'e', 'g', 'r', 'o', 'u', 'n', 'd', '.', 'o', 'r', 'g', '\0', /* "keeperapp.com", true */ 'k', 'e', 'e', 'p', 'e', 'r', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0', @@ -8040,7 +8042,7 @@ static const char kSTSHostTable[] = { /* "ld-begunjscica.si", true */ 'l', 'd', '-', 'b', 'e', 'g', 'u', 'n', 'j', 's', 'c', 'i', 'c', 'a', '.', 's', 'i', '\0', /* "ldc.com.br", false */ 'l', 'd', 'c', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', /* "le-bar.org", true */ 'l', 'e', '-', 'b', 'a', 'r', '.', 'o', 'r', 'g', '\0', - /* "le-dev.de", true */ 'l', 'e', '-', 'd', 'e', 'v', '.', 'd', 'e', '\0', + /* "le-dev.de", false */ 'l', 'e', '-', 'd', 'e', 'v', '.', 'd', 'e', '\0', /* "le-h.de", true */ 'l', 'e', '-', 'h', '.', 'd', 'e', '\0', /* "le-hosting.de", true */ 'l', 'e', '-', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'e', '\0', /* "le42mars.fr", true */ 'l', 'e', '4', '2', 'm', 'a', 'r', 's', '.', 'f', 'r', '\0', @@ -8299,6 +8301,7 @@ static const char kSTSHostTable[] = { /* "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', /* "liveregistratie.nl", true */ 'l', 'i', 'v', 'e', 'r', 'e', 'g', 'i', 's', 't', 'r', 'a', 't', 'i', 'e', '.', 'n', 'l', '\0', + /* "liverewrite.com", true */ 'l', 'i', 'v', 'e', 'r', 'e', 'w', 'r', 'i', 't', 'e', '.', 'c', 'o', 'm', '\0', /* "liverpoolmutualhomes.org", false */ 'l', 'i', 'v', 'e', 'r', 'p', 'o', 'o', 'l', 'm', 'u', 't', 'u', 'a', 'l', 'h', 'o', 'm', 'e', 's', '.', 'o', 'r', 'g', '\0', /* "living-space.co.nz", true */ 'l', 'i', 'v', 'i', 'n', 'g', '-', 's', 'p', 'a', 'c', 'e', '.', 'c', 'o', '.', 'n', 'z', '\0', /* "livingworduk.org", true */ 'l', 'i', 'v', 'i', 'n', 'g', 'w', 'o', 'r', 'd', 'u', 'k', '.', 'o', 'r', 'g', '\0', @@ -8407,7 +8410,7 @@ static const char kSTSHostTable[] = { /* "loqu8.com", true */ 'l', 'o', 'q', 'u', '8', '.', 'c', 'o', 'm', '\0', /* "lordjevington.co.uk", true */ 'l', 'o', 'r', 'd', 'j', 'e', 'v', 'i', 'n', 'g', 't', 'o', 'n', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "lore.azurewebsites.net", true */ 'l', 'o', 'r', 'e', '.', 'a', 'z', 'u', 'r', 'e', 'w', 'e', 'b', 's', 'i', 't', 'e', 's', '.', 'n', 'e', 't', '\0', - /* "lorenadumitrascu.ro", true */ 'l', 'o', 'r', 'e', 'n', 'a', 'd', 'u', 'm', 'i', 't', 'r', 'a', 's', 'c', 'u', '.', 'r', 'o', '\0', + /* "lorenadumitrascu.ro", false */ 'l', 'o', 'r', 'e', 'n', 'a', 'd', 'u', 'm', 'i', 't', 'r', 'a', 's', 'c', 'u', '.', 'r', 'o', '\0', /* "losless.fr", true */ 'l', 'o', 's', 'l', 'e', 's', 's', '.', 'f', 'r', '\0', /* "lost.host", true */ 'l', 'o', 's', 't', '.', 'h', 'o', 's', 't', '\0', /* "lostg.com", true */ 'l', 'o', 's', 't', 'g', '.', 'c', 'o', 'm', '\0', @@ -8585,7 +8588,6 @@ static const char kSTSHostTable[] = { /* "mahefa.co.uk", true */ 'm', 'a', 'h', 'e', 'f', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "mahfouzadedimeji.com", true */ 'm', 'a', 'h', 'f', 'o', 'u', 'z', 'a', 'd', 'e', 'd', 'i', 'm', 'e', 'j', 'i', '.', 'c', 'o', 'm', '\0', /* "mahrer.net", true */ 'm', 'a', 'h', 'r', 'e', 'r', '.', 'n', 'e', 't', '\0', - /* "maidofhonorcleaning.net", true */ 'm', 'a', 'i', 'd', 'o', 'f', 'h', 'o', 'n', 'o', 'r', 'c', 'l', 'e', 'a', 'n', 'i', 'n', 'g', '.', 'n', 'e', 't', '\0', /* "mail-rotter.de", true */ 'm', 'a', 'i', 'l', '-', 'r', 'o', 't', 't', 'e', 'r', '.', 'd', 'e', '\0', /* "mail-settings.google.com", true */ 'm', 'a', 'i', 'l', '-', 's', 'e', 't', 't', 'i', 'n', 'g', 's', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0', /* "mail.de", true */ 'm', 'a', 'i', 'l', '.', 'd', 'e', '\0', @@ -8614,7 +8616,6 @@ static const char kSTSHostTable[] = { /* "majesnix.org", true */ 'm', 'a', 'j', 'e', 's', 'n', 'i', 'x', '.', 'o', 'r', 'g', '\0', /* "make-pizza.info", true */ 'm', 'a', 'k', 'e', '-', 'p', 'i', 'z', 'z', 'a', '.', 'i', 'n', 'f', 'o', '\0', /* "makedin.net", true */ 'm', 'a', 'k', 'e', 'd', 'i', 'n', '.', 'n', 'e', 't', '\0', - /* "makeyourank.com", true */ 'm', 'a', 'k', 'e', 'y', 'o', 'u', 'r', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0', /* "makeyourlaws.org", true */ 'm', 'a', 'k', 'e', 'y', 'o', 'u', 'r', 'l', 'a', 'w', 's', '.', 'o', 'r', 'g', '\0', /* "makkusu.photo", true */ 'm', 'a', 'k', 'k', 'u', 's', 'u', '.', 'p', 'h', 'o', 't', 'o', '\0', /* "makowitz.cz", true */ 'm', 'a', 'k', 'o', 'w', 'i', 't', 'z', '.', 'c', 'z', '\0', @@ -8631,7 +8632,6 @@ static const char kSTSHostTable[] = { /* "maliskovik.si", true */ 'm', 'a', 'l', 'i', 's', 'k', 'o', 'v', 'i', 'k', '.', 's', 'i', '\0', /* "maljaars-fotografie.nl", true */ 'm', 'a', 'l', 'j', 'a', 'a', 'r', 's', '-', 'f', 'o', 't', 'o', 'g', 'r', 'a', 'f', 'i', 'e', '.', 'n', 'l', '\0', /* "maljaars-media.nl", true */ 'm', 'a', 'l', 'j', 'a', 'a', 'r', 's', '-', 'm', 'e', 'd', 'i', 'a', '.', 'n', 'l', '\0', - /* "malkaso.com.ua", true */ 'm', 'a', 'l', 'k', 'a', 's', 'o', '.', 'c', 'o', 'm', '.', 'u', 'a', '\0', /* "mall.cz", true */ 'm', 'a', 'l', 'l', '.', 'c', 'z', '\0', /* "mall.hr", true */ 'm', 'a', 'l', 'l', '.', 'h', 'r', '\0', /* "mall.hu", true */ 'm', 'a', 'l', 'l', '.', 'h', 'u', '\0', @@ -8703,7 +8703,6 @@ static const char kSTSHostTable[] = { /* "margaretrosefashions.co.uk", true */ 'm', 'a', 'r', 'g', 'a', 'r', 'e', 't', 'r', 'o', 's', 'e', 'f', 'a', 's', 'h', 'i', 'o', 'n', 's', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "marianatherapy.com", true */ 'm', 'a', 'r', 'i', 'a', 'n', 'a', 't', 'h', 'e', 'r', 'a', 'p', 'y', '.', 'c', 'o', 'm', '\0', /* "mariaolesen.dk", true */ 'm', 'a', 'r', 'i', 'a', 'o', 'l', 'e', 's', 'e', 'n', '.', 'd', 'k', '\0', - /* "marie.club", true */ 'm', 'a', 'r', 'i', 'e', '.', 'c', 'l', 'u', 'b', '\0', /* "mariehane.com", true */ 'm', 'a', 'r', 'i', 'e', 'h', 'a', 'n', 'e', '.', 'c', 'o', 'm', '\0', /* "mariemiramont.fr", true */ 'm', 'a', 'r', 'i', 'e', 'm', 'i', 'r', 'a', 'm', 'o', 'n', 't', '.', 'f', 'r', '\0', /* "marikafranke.de", true */ 'm', 'a', 'r', 'i', 'k', 'a', 'f', 'r', 'a', 'n', 'k', 'e', '.', 'd', 'e', '\0', @@ -9209,6 +9208,7 @@ static const char kSTSHostTable[] = { /* "mitsukabose.com", true */ 'm', 'i', 't', 's', 'u', 'k', 'a', 'b', 'o', 's', 'e', '.', 'c', 'o', 'm', '\0', /* "mittelunsachlich.de", true */ 'm', 'i', 't', 't', 'e', 'l', 'u', 'n', 's', 'a', 'c', 'h', 'l', 'i', 'c', 'h', '.', 'd', 'e', '\0', /* "mitzpettel.com", true */ 'm', 'i', 't', 'z', 'p', 'e', 't', 't', 'e', 'l', '.', 'c', 'o', 'm', '\0', + /* "miui-germany.de", true */ 'm', 'i', 'u', 'i', '-', 'g', 'e', 'r', 'm', 'a', 'n', 'y', '.', 'd', 'e', '\0', /* "mixposure.com", true */ 'm', 'i', 'x', 'p', 'o', 's', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "miyatore.com", true */ 'm', 'i', 'y', 'a', 't', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "mizque.ch", true */ 'm', 'i', 'z', 'q', 'u', 'e', '.', 'c', 'h', '\0', @@ -9291,6 +9291,7 @@ static const char kSTSHostTable[] = { /* "moegirl.org", true */ 'm', 'o', 'e', 'g', 'i', 'r', 'l', '.', 'o', 'r', 'g', '\0', /* "moehrke.cc", true */ 'm', 'o', 'e', 'h', 'r', 'k', 'e', '.', 'c', 'c', '\0', /* "moevenpick-cafe.com", true */ 'm', 'o', 'e', 'v', 'e', 'n', 'p', 'i', 'c', 'k', '-', 'c', 'a', 'f', 'e', '.', 'c', 'o', 'm', '\0', + /* "moho.kr", true */ 'm', 'o', 'h', 'o', '.', 'k', 'r', '\0', /* "mojaknjiznica.com", false */ 'm', 'o', 'j', 'a', 'k', 'n', 'j', 'i', 'z', 'n', 'i', 'c', 'a', '.', 'c', 'o', 'm', '\0', /* "mojapraca.sk", true */ 'm', 'o', 'j', 'a', 'p', 'r', 'a', 'c', 'a', '.', 's', 'k', '\0', /* "mojzis.com", true */ 'm', 'o', 'j', 'z', 'i', 's', '.', 'c', 'o', 'm', '\0', @@ -9596,6 +9597,7 @@ static const char kSTSHostTable[] = { /* "mytc.fr", true */ 'm', 'y', 't', 'c', '.', 'f', 'r', '\0', /* "mythengay.ch", true */ 'm', 'y', 't', 'h', 'e', 'n', 'g', 'a', 'y', '.', 'c', 'h', '\0', /* "mythlogic.com", true */ 'm', 'y', 't', 'h', 'l', 'o', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0', + /* "mythslegendscollection.com", true */ 'm', 'y', 't', 'h', 's', 'l', 'e', 'g', 'e', 'n', 'd', 's', 'c', 'o', 'l', 'l', 'e', 'c', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "mytraiteurs.com", true */ 'm', 'y', 't', 'r', 'a', 'i', 't', 'e', 'u', 'r', 's', '.', 'c', 'o', 'm', '\0', /* "mytripcar.co.uk", true */ 'm', 'y', 't', 'r', 'i', 'p', 'c', 'a', 'r', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "mytripcar.de", true */ 'm', 'y', 't', 'r', 'i', 'p', 'c', 'a', 'r', '.', 'd', 'e', '\0', @@ -9683,7 +9685,6 @@ static const char kSTSHostTable[] = { /* "naudles.me", true */ 'n', 'a', 'u', 'd', 'l', 'e', 's', '.', 'm', 'e', '\0', /* "naughty.audio", true */ 'n', 'a', 'u', 'g', 'h', 't', 'y', '.', 'a', 'u', 'd', 'i', 'o', '\0', /* "navdeep.ca", true */ 'n', 'a', 'v', 'd', 'e', 'e', 'p', '.', 'c', 'a', '\0', - /* "navenlle.com", true */ 'n', 'a', 'v', 'e', 'n', 'l', 'l', 'e', '.', 'c', 'o', 'm', '\0', /* "navigate-it-services.de", false */ 'n', 'a', 'v', 'i', 'g', 'a', 't', 'e', '-', 'i', 't', '-', 's', 'e', 'r', 'v', 'i', 'c', 'e', 's', '.', 'd', 'e', '\0', /* "naviteq.eu", true */ 'n', 'a', 'v', 'i', 't', 'e', 'q', '.', 'e', 'u', '\0', /* "navstevnik.sk", true */ 'n', 'a', 'v', 's', 't', 'e', 'v', 'n', 'i', 'k', '.', 's', 'k', '\0', @@ -9805,7 +9806,6 @@ static const char kSTSHostTable[] = { /* "nettools.link", true */ 'n', 'e', 't', 't', 'o', 'o', 'l', 's', '.', 'l', 'i', 'n', 'k', '\0', /* "nettopower.dk", true */ 'n', 'e', 't', 't', 'o', 'p', 'o', 'w', 'e', 'r', '.', 'd', 'k', '\0', /* "nettx.co.uk", true */ 'n', 'e', 't', 't', 'x', '.', 'c', 'o', '.', 'u', 'k', '\0', - /* "netulo.com", true */ 'n', 'e', 't', 'u', 'l', 'o', '.', 'c', 'o', 'm', '\0', /* "netvizura.co.uk", true */ 'n', 'e', 't', 'v', 'i', 'z', 'u', 'r', 'a', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "netwarc.eu", true */ 'n', 'e', 't', 'w', 'a', 'r', 'c', '.', 'e', 'u', '\0', /* "netwarc.nl", true */ 'n', 'e', 't', 'w', 'a', 'r', 'c', '.', 'n', 'l', '\0', @@ -9986,7 +9986,6 @@ static const char kSTSHostTable[] = { /* "nohttps.org", true */ 'n', 'o', 'h', 't', 't', 'p', 's', '.', 'o', 'r', 'g', '\0', /* "nohup.se", true */ 'n', 'o', 'h', 'u', 'p', '.', 's', 'e', '\0', /* "noisetrap.cz", true */ 'n', 'o', 'i', 's', 'e', 't', 'r', 'a', 'p', '.', 'c', 'z', '\0', - /* "noisky.cn", true */ 'n', 'o', 'i', 's', 'k', 'y', '.', 'c', 'n', '\0', /* "noisyfox.cn", true */ 'n', 'o', 'i', 's', 'y', 'f', 'o', 'x', '.', 'c', 'n', '\0', /* "nojestorget.se", true */ 'n', 'o', 'j', 'e', 's', 't', 'o', 'r', 'g', 'e', 't', '.', 's', 'e', '\0', /* "nolaviz.org", true */ 'n', 'o', 'l', 'a', 'v', 'i', 'z', '.', 'o', 'r', 'g', '\0', @@ -10201,6 +10200,7 @@ static const char kSTSHostTable[] = { /* "oiepoie.nl", false */ 'o', 'i', 'e', 'p', 'o', 'i', 'e', '.', 'n', 'l', '\0', /* "ojls.co", true */ 'o', 'j', 'l', 's', '.', 'c', 'o', '\0', /* "okad.eu", true */ 'o', 'k', 'a', 'd', '.', 'e', 'u', '\0', + /* "okay.coffee", true */ 'o', 'k', 'a', 'y', '.', 'c', 'o', 'f', 'f', 'e', 'e', '\0', /* "okaz.de", true */ 'o', 'k', 'a', 'z', '.', 'd', 'e', '\0', /* "okchicas.com", true */ 'o', 'k', 'c', 'h', 'i', 'c', 'a', 's', '.', 'c', 'o', 'm', '\0', /* "oke.com.tw", false */ 'o', 'k', 'e', '.', 'c', 'o', 'm', '.', 't', 'w', '\0', @@ -10378,7 +10378,6 @@ static const char kSTSHostTable[] = { /* "oshayr.com", true */ 'o', 's', 'h', 'a', 'y', 'r', '.', 'c', 'o', 'm', '\0', /* "oshell.me", true */ 'o', 's', 'h', 'e', 'l', 'l', '.', 'm', 'e', '\0', /* "oskuro.net", true */ 'o', 's', 'k', 'u', 'r', 'o', '.', 'n', 'e', 't', '\0', - /* "oslinux.net", true */ 'o', 's', 'l', 'i', 'n', 'u', 'x', '.', 'n', 'e', 't', '\0', /* "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', @@ -10679,6 +10678,7 @@ static const char kSTSHostTable[] = { /* "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", false */ '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', @@ -10902,7 +10902,6 @@ static const char kSTSHostTable[] = { /* "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', @@ -11189,7 +11188,6 @@ static const char kSTSHostTable[] = { /* "proust.ch", false */ 'p', 'r', 'o', 'u', 's', 't', '.', 'c', 'h', '\0', /* "proust.media", false */ 'p', 'r', 'o', 'u', 's', 't', '.', 'm', 'e', 'd', 'i', 'a', '\0', /* "proustmedia.de", false */ 'p', 'r', 'o', 'u', 's', 't', 'm', 'e', 'd', 'i', 'a', '.', 'd', 'e', '\0', - /* "proweser.de", true */ 'p', 'r', 'o', 'w', 'e', 's', 'e', 'r', '.', 'd', 'e', '\0', /* "prowise.com", true */ 'p', 'r', 'o', 'w', 'i', 's', 'e', '.', 'c', 'o', 'm', '\0', /* "proxybay.co", true */ 'p', 'r', 'o', 'x', 'y', 'b', 'a', 'y', '.', 'c', 'o', '\0', /* "proxybay.la", true */ 'p', 'r', 'o', 'x', 'y', 'b', 'a', 'y', '.', 'l', 'a', '\0', @@ -11456,7 +11454,6 @@ static const char kSTSHostTable[] = { /* "rapenroer.com", true */ 'r', 'a', 'p', 'e', 'n', 'r', 'o', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "rapenroer.nl", true */ 'r', 'a', 'p', 'e', 'n', 'r', 'o', 'e', 'r', '.', 'n', 'l', '\0', /* "raphael.li", true */ 'r', 'a', 'p', 'h', 'a', 'e', 'l', '.', 'l', 'i', '\0', - /* "rapido.nu", true */ 'r', 'a', 'p', 'i', 'd', 'o', '.', 'n', 'u', '\0', /* "rapidshit.net", true */ 'r', 'a', 'p', 'i', 'd', 's', 'h', 'i', 't', '.', 'n', 'e', 't', '\0', /* "rasagiline.com", true */ 'r', 'a', 's', 'a', 'g', 'i', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0', /* "rasebo.ro", true */ 'r', 'a', 's', 'e', 'b', 'o', '.', 'r', 'o', '\0', @@ -12060,6 +12057,7 @@ static const char kSTSHostTable[] = { /* "samkelleher.com", true */ 's', 'a', 'm', 'k', 'e', 'l', 'l', 'e', 'h', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "saml-gateway.org", true */ 's', 'a', 'm', 'l', '-', 'g', 'a', 't', 'e', 'w', 'a', 'y', '.', 'o', 'r', 'g', '\0', /* "sampcup.com", false */ 's', 'a', 'm', 'p', 'c', 'u', 'p', '.', 'c', 'o', 'm', '\0', + /* "samuelkeeley.com", true */ 's', 'a', 'm', 'u', 'e', 'l', 'k', 'e', 'e', 'l', 'e', 'y', '.', 'c', 'o', 'm', '\0', /* "samwilberforce.com", true */ 's', 'a', 'm', 'w', 'i', 'l', 'b', 'e', 'r', 'f', 'o', 'r', 'c', 'e', '.', 'c', 'o', 'm', '\0', /* "samwu.tw", false */ 's', 'a', 'm', 'w', 'u', '.', 't', 'w', '\0', /* "sanandreasstories.com", true */ 's', 'a', 'n', 'a', 'n', 'd', 'r', 'e', 'a', 's', 's', 't', 'o', 'r', 'i', 'e', 's', '.', 'c', 'o', 'm', '\0', @@ -12222,6 +12220,7 @@ static const char kSTSHostTable[] = { /* "sciencesolutions.eu", true */ 's', 'c', 'i', 'e', 'n', 'c', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'e', 'u', '\0', /* "sciencex.com", true */ 's', 'c', 'i', 'e', 'n', 'c', 'e', 'x', '.', 'c', 'o', 'm', '\0', /* "scivillage.com", true */ 's', 'c', 'i', 'v', 'i', 'l', 'l', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0', + /* "sclgroup.cc", true */ 's', 'c', 'l', 'g', 'r', 'o', 'u', 'p', '.', 'c', 'c', '\0', /* "scoolcode.com", true */ 's', 'c', 'o', 'o', 'l', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0', /* "scooterservis.com", true */ 's', 'c', 'o', 'o', 't', 'e', 'r', 's', 'e', 'r', 'v', 'i', 's', '.', 'c', 'o', 'm', '\0', /* "scootfleet.com", true */ 's', 'c', 'o', 'o', 't', 'f', 'l', 'e', 'e', 't', '.', 'c', 'o', 'm', '\0', @@ -12309,6 +12308,7 @@ static const char kSTSHostTable[] = { /* "securedrop.org", true */ 's', 'e', 'c', 'u', 'r', 'e', 'd', 'r', 'o', 'p', '.', 'o', 'r', 'g', '\0', /* "secureesolutions.com", true */ 's', 'e', 'c', 'u', 'r', 'e', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0', /* "secureideas.com", false */ 's', 'e', 'c', 'u', 'r', 'e', 'i', 'd', 'e', 'a', 's', '.', 'c', 'o', 'm', '\0', + /* "securejabber.me", true */ 's', 'e', 'c', 'u', 'r', 'e', 'j', 'a', 'b', 'b', 'e', 'r', '.', 'm', 'e', '\0', /* "secureobscure.com", true */ 's', 'e', 'c', 'u', 'r', 'e', 'o', 'b', 's', 'c', 'u', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "secureonline.co", true */ 's', 'e', 'c', 'u', 'r', 'e', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', '\0', /* "securethe.news", true */ 's', 'e', 'c', 'u', 'r', 'e', 't', 'h', 'e', '.', 'n', 'e', 'w', 's', '\0', @@ -12317,6 +12317,7 @@ static const char kSTSHostTable[] = { /* "security-taskforce.be", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '-', 't', 'a', 's', 'k', 'f', 'o', 'r', 'c', 'e', '.', 'b', 'e', '\0', /* "security-thoughts.org", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '-', 't', 'h', 'o', 'u', 'g', 'h', 't', 's', '.', 'o', 'r', 'g', '\0', /* "security.google.com", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0', + /* "securityheaders.com", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'h', 'e', 'a', 'd', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0', /* "securityheaders.io", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'h', 'e', 'a', 'd', 'e', 'r', 's', '.', 'i', 'o', '\0', /* "securitymap.wiki", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'm', 'a', 'p', '.', 'w', 'i', 'k', 'i', '\0', /* "securityprimes.in", true */ 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'p', 'r', 'i', 'm', 'e', 's', '.', 'i', 'n', '\0', @@ -12702,9 +12703,11 @@ static const char kSTSHostTable[] = { /* "skarrok.com", false */ 's', 'k', 'a', 'r', 'r', 'o', 'k', '.', 'c', 'o', 'm', '\0', /* "skatclub-beratzhausen.de", true */ 's', 'k', 'a', 't', 'c', 'l', 'u', 'b', '-', 'b', 'e', 'r', 'a', 't', 'z', 'h', 'a', 'u', 's', 'e', 'n', '.', 'd', 'e', '\0', /* "skatn.de", true */ 's', 'k', 'a', 't', 'n', '.', 'd', 'e', '\0', + /* "skeeley.com", true */ 's', 'k', 'e', 'e', 'l', 'e', 'y', '.', 'c', 'o', 'm', '\0', /* "skepticalsports.com", true */ 's', 'k', 'e', 'p', 't', 'i', 'c', 'a', 'l', 's', 'p', 'o', 'r', 't', 's', '.', 'c', 'o', 'm', '\0', /* "sketchmyroom.com", true */ 's', 'k', 'e', 't', 'c', 'h', 'm', 'y', 'r', 'o', 'o', 'm', '.', 'c', 'o', 'm', '\0', /* "skhoop.cz", true */ 's', 'k', 'h', 'o', 'o', 'p', '.', 'c', 'z', '\0', + /* "skhosting.eu", true */ 's', 'k', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'e', 'u', '\0', /* "ski-insurance.com.au", true */ 's', 'k', 'i', '-', 'i', 'n', 's', 'u', 'r', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "skia.org", true */ 's', 'k', 'i', 'a', '.', 'o', 'r', 'g', '\0', /* "skigebiete-test.de", true */ 's', 'k', 'i', 'g', 'e', 'b', 'i', 'e', 't', 'e', '-', 't', 'e', 's', 't', '.', 'd', 'e', '\0', @@ -12729,8 +12732,10 @@ static const char kSTSHostTable[] = { /* "skontorp-enterprise.no", true */ 's', 'k', 'o', 'n', 't', 'o', 'r', 'p', '-', 'e', 'n', 't', 'e', 'r', 'p', 'r', 'i', 's', 'e', '.', 'n', 'o', '\0', /* "skory.us", true */ 's', 'k', 'o', 'r', 'y', '.', 'u', 's', '\0', /* "skotty.io", true */ 's', 'k', 'o', 't', 't', 'y', '.', 'i', 'o', '\0', + /* "skou.dk", true */ 's', 'k', 'o', 'u', '.', 'd', 'k', '\0', /* "sktsolution.com", true */ 's', 'k', 't', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "sky-aroma.com", true */ 's', 'k', 'y', '-', 'a', 'r', 'o', 'm', 'a', '.', 'c', 'o', 'm', '\0', + /* "skyasker.cn", true */ 's', 'k', 'y', 'a', 's', 'k', 'e', 'r', '.', 'c', 'n', '\0', /* "skyasker.com", true */ 's', 'k', 'y', 'a', 's', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "skydragoness.com", true */ 's', 'k', 'y', 'd', 'r', 'a', 'g', 'o', 'n', 'e', 's', 's', '.', 'c', 'o', 'm', '\0', /* "skydrive.live.com", false */ 's', 'k', 'y', 'd', 'r', 'i', 'v', 'e', '.', 'l', 'i', 'v', 'e', '.', 'c', 'o', 'm', '\0', @@ -12964,6 +12969,7 @@ static const char kSTSHostTable[] = { /* "sorenstudios.com", true */ 's', 'o', 'r', 'e', 'n', 's', 't', 'u', 'd', 'i', 'o', 's', '.', 'c', 'o', 'm', '\0', /* "sorincocorada.ro", true */ 's', 'o', 'r', 'i', 'n', 'c', 'o', 'c', 'o', 'r', 'a', 'd', 'a', '.', 'r', 'o', '\0', /* "sorn.service.gov.uk", true */ 's', 'o', 'r', 'n', '.', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'g', 'o', 'v', '.', 'u', 'k', '\0', + /* "sortaweird.net", false */ 's', 'o', 'r', 't', 'a', 'w', 'e', 'i', 'r', 'd', '.', 'n', 'e', 't', '\0', /* "soruly.com", true */ 's', 'o', 'r', 'u', 'l', 'y', '.', 'c', 'o', 'm', '\0', /* "sorz.org", true */ 's', 'o', 'r', 'z', '.', 'o', 'r', 'g', '\0', /* "sos.sk", false */ 's', 'o', 's', '.', 's', 'k', '\0', @@ -12976,6 +12982,7 @@ static const char kSTSHostTable[] = { /* "soucorneteiro.com.br", true */ 's', 'o', 'u', 'c', 'o', 'r', 'n', 'e', 't', 'e', 'i', 'r', 'o', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', /* "souki.cz", true */ 's', 'o', 'u', 'k', 'i', '.', 'c', 'z', '\0', /* "soul-source.co.uk", true */ 's', 'o', 'u', 'l', '-', 's', 'o', 'u', 'r', 'c', 'e', '.', 'c', 'o', '.', 'u', 'k', '\0', + /* "soulboy.io", false */ 's', 'o', 'u', 'l', 'b', 'o', 'y', '.', 'i', 'o', '\0', /* "soulmate.dating", true */ 's', 'o', 'u', 'l', 'm', 'a', 't', 'e', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0', /* "soulogic.com", false */ 's', 'o', 'u', 'l', 'o', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0', /* "soumikghosh.com", true */ 's', 'o', 'u', 'm', 'i', 'k', 'g', 'h', 'o', 's', 'h', '.', 'c', 'o', 'm', '\0', @@ -13035,6 +13042,7 @@ static const char kSTSHostTable[] = { /* "spedplus.com.br", false */ 's', 'p', 'e', 'd', 'p', 'l', 'u', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', /* "speeddate.it", false */ 's', 'p', 'e', 'e', 'd', 'd', 'a', 't', 'e', '.', 'i', 't', '\0', /* "speedmann.de", false */ 's', 'p', 'e', 'e', 'd', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0', + /* "speeds.vip", true */ 's', 'p', 'e', 'e', 'd', 's', '.', 'v', 'i', 'p', '\0', /* "speedyprep.com", true */ 's', 'p', 'e', 'e', 'd', 'y', 'p', 'r', 'e', 'p', '.', 'c', 'o', 'm', '\0', /* "speich.net", true */ 's', 'p', 'e', 'i', 'c', 'h', '.', 'n', 'e', 't', '\0', /* "spenglerei-shop.de", true */ 's', 'p', 'e', 'n', 'g', 'l', 'e', 'r', 'e', 'i', '-', 's', 'h', 'o', 'p', '.', 'd', 'e', '\0', @@ -13279,6 +13287,7 @@ static const char kSTSHostTable[] = { /* "stjohnin.com", true */ 's', 't', 'j', 'o', 'h', 'n', 'i', 'n', '.', 'c', 'o', 'm', '\0', /* "stjohnmiami.org", true */ 's', 't', 'j', 'o', 'h', 'n', 'm', 'i', 'a', 'm', 'i', '.', 'o', 'r', 'g', '\0', /* "stmsolutions.pl", true */ 's', 't', 'm', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'p', 'l', '\0', + /* "stnl.de", true */ 's', 't', 'n', 'l', '.', 'd', 'e', '\0', /* "stocktrader.com", true */ 's', 't', 'o', 'c', 'k', 't', 'r', 'a', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "stoffelen.nl", true */ 's', 't', 'o', 'f', 'f', 'e', 'l', 'e', 'n', '.', 'n', 'l', '\0', /* "stoianlawfirm.com", true */ 's', 't', 'o', 'i', 'a', 'n', 'l', 'a', 'w', 'f', 'i', 'r', 'm', '.', 'c', 'o', 'm', '\0', @@ -13356,6 +13365,7 @@ static const char kSTSHostTable[] = { /* "sturbock.me", true */ 's', 't', 'u', 'r', 'b', 'o', 'c', 'k', '.', 'm', 'e', '\0', /* "stutelage.com", true */ 's', 't', 'u', 't', 'e', 'l', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0', /* "stuur.nl", false */ 's', 't', 'u', 'u', 'r', '.', 'n', 'l', '\0', + /* "stygium.net", false */ 's', 't', 'y', 'g', 'i', 'u', 'm', '.', 'n', 'e', 't', '\0', /* "styleci.io", true */ 's', 't', 'y', 'l', 'e', 'c', 'i', '.', 'i', 'o', '\0', /* "stylefast.com.au", true */ 's', 't', 'y', 'l', 'e', 'f', 'a', 's', 't', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "styles.pm", true */ 's', 't', 'y', 'l', 'e', 's', '.', 'p', 'm', '\0', @@ -13688,7 +13698,6 @@ static const char kSTSHostTable[] = { /* "techvalue.gr", true */ 't', 'e', 'c', 'h', 'v', 'a', 'l', 'u', 'e', '.', 'g', 'r', '\0', /* "techwords.io", true */ 't', 'e', 'c', 'h', 'w', 'o', 'r', 'd', 's', '.', 'i', 'o', '\0', /* "tecnogaming.com", true */ 't', 'e', 'c', 'n', 'o', 'g', 'a', 'm', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', - /* "tecture.de", true */ 't', 'e', 'c', 't', 'u', 'r', 'e', '.', 'd', 'e', '\0', /* "teddy.ch", true */ 't', 'e', 'd', 'd', 'y', '.', 'c', 'h', '\0', /* "tedeh.net", true */ 't', 'e', 'd', 'e', 'h', '.', 'n', 'e', 't', '\0', /* "tedovo.com", true */ 't', 'e', 'd', 'o', 'v', 'o', '.', 'c', 'o', 'm', '\0', @@ -13823,7 +13832,7 @@ static const char kSTSHostTable[] = { /* "thedronechart.com", true */ 't', 'h', 'e', 'd', 'r', 'o', 'n', 'e', 'c', 'h', 'a', 'r', 't', '.', 'c', 'o', 'm', '\0', /* "thedrop.pw", true */ 't', 'h', 'e', 'd', 'r', 'o', 'p', '.', 'p', 'w', '\0', /* "thedutchmarketers.com", true */ 't', 'h', 'e', 'd', 'u', 't', 'c', 'h', 'm', 'a', 'r', 'k', 'e', 't', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0', - /* "theescapistswiki.com", true */ 't', 'h', 'e', 'e', 's', 'c', 'a', 'p', 'i', 's', 't', 's', 'w', 'i', 'k', 'i', '.', 'c', 'o', 'm', '\0', + /* "theeyeopener.com", false */ 't', 'h', 'e', 'e', 'y', 'e', 'o', 'p', 'e', 'n', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "thefarbeyond.com", true */ 't', 'h', 'e', 'f', 'a', 'r', 'b', 'e', 'y', 'o', 'n', 'd', '.', 'c', 'o', 'm', '\0', /* "theflyingbear.net", true */ 't', 'h', 'e', 'f', 'l', 'y', 'i', 'n', 'g', 'b', 'e', 'a', 'r', '.', 'n', 'e', 't', '\0', /* "thefox.co", true */ 't', 'h', 'e', 'f', 'o', 'x', '.', 'c', 'o', '\0', @@ -14136,7 +14145,6 @@ static const char kSTSHostTable[] = { /* "tomvote.com", true */ 't', 'o', 'm', 'v', 'o', 't', 'e', '.', 'c', 'o', 'm', '\0', /* "tomwiggers.nl", false */ 't', 'o', 'm', 'w', 'i', 'g', 'g', 'e', 'r', 's', '.', 'n', 'l', '\0', /* "tomwilson.io", true */ 't', 'o', 'm', 'w', 'i', 'l', 's', 'o', 'n', '.', 'i', 'o', '\0', - /* "tonabor.ru", true */ 't', 'o', 'n', 'a', 'b', 'o', 'r', '.', 'r', 'u', '\0', /* "tonage.de", true */ 't', 'o', 'n', 'a', 'g', 'e', '.', 'd', 'e', '\0', /* "toncusters.nl", true */ 't', 'o', 'n', 'c', 'u', 's', 't', 'e', 'r', 's', '.', 'n', 'l', '\0', /* "tonegidoarchief.nl", true */ 't', 'o', 'n', 'e', 'g', 'i', 'd', 'o', 'a', 'r', 'c', 'h', 'i', 'e', 'f', '.', 'n', 'l', '\0', @@ -14621,7 +14629,6 @@ static const char kSTSHostTable[] = { /* "unseen.is", true */ 'u', 'n', 's', 'e', 'e', 'n', '.', 'i', 's', '\0', /* "unseen.tw", true */ 'u', 'n', 's', 'e', 'e', 'n', '.', 't', 'w', '\0', /* "unser-gartenforum.de", true */ 'u', 'n', 's', 'e', 'r', '-', 'g', 'a', 'r', 't', 'e', 'n', 'f', 'o', 'r', 'u', 'm', '.', 'd', 'e', '\0', - /* "unsupervised.ca", true */ 'u', 'n', 's', 'u', 'p', 'e', 'r', 'v', 'i', 's', 'e', 'd', '.', 'c', 'a', '\0', /* "unsuspicious.click", true */ 'u', 'n', 's', 'u', 's', 'p', 'i', 'c', 'i', 'o', 'u', 's', '.', 'c', 'l', 'i', 'c', 'k', '\0', /* "unterfrankenclan.de", true */ 'u', 'n', 't', 'e', 'r', 'f', 'r', 'a', 'n', 'k', 'e', 'n', 'c', 'l', 'a', 'n', '.', 'd', 'e', '\0', /* "untoldstory.eu", true */ 'u', 'n', 't', 'o', 'l', 'd', 's', 't', 'o', 'r', 'y', '.', 'e', 'u', '\0', @@ -14686,7 +14693,6 @@ static const char kSTSHostTable[] = { /* "usimmigration.us", true */ 'u', 's', 'i', 'm', 'm', 'i', 'g', 'r', 'a', 't', 'i', 'o', 'n', '.', 'u', 's', '\0', /* "usitcolours.bg", true */ 'u', 's', 'i', 't', 'c', 'o', 'l', 'o', 'u', 'r', 's', '.', 'b', 'g', '\0', /* "uslab.io", true */ 'u', 's', 'l', 'a', 'b', '.', 'i', 'o', '\0', - /* "usleep.net", true */ 'u', 's', 'l', 'e', 'e', 'p', '.', 'n', 'e', 't', '\0', /* "usmint.gov", true */ 'u', 's', 'm', 'i', 'n', 't', '.', 'g', 'o', 'v', '\0', /* "usparklodging.com", true */ 'u', 's', 'p', 'a', 'r', 'k', 'l', 'o', 'd', 'g', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "usportsgo.com", true */ 'u', 's', 'p', 'o', 'r', 't', 's', 'g', 'o', '.', 'c', 'o', 'm', '\0', @@ -15206,6 +15212,7 @@ static const char kSTSHostTable[] = { /* "weekly.fyi", true */ 'w', 'e', 'e', 'k', 'l', 'y', '.', 'f', 'y', 'i', '\0', /* "weerstatistieken.nl", true */ 'w', 'e', 'e', 'r', 's', 't', 'a', 't', 'i', 's', 't', 'i', 'e', 'k', 'e', 'n', '.', 'n', 'l', '\0', /* "wefinanceinc.com", true */ 'w', 'e', 'f', 'i', 'n', 'a', 'n', 'c', 'e', 'i', 'n', 'c', '.', 'c', 'o', 'm', '\0', + /* "wegenaer.nl", true */ 'w', 'e', 'g', 'e', 'n', 'a', 'e', 'r', '.', 'n', 'l', '\0', /* "weggeweest.nl", true */ 'w', 'e', 'g', 'g', 'e', 'w', 'e', 'e', 's', 't', '.', 'n', 'l', '\0', /* "wegner.no", true */ 'w', 'e', 'g', 'n', 'e', 'r', '.', 'n', 'o', '\0', /* "weibomiaopai.com", true */ 'w', 'e', 'i', 'b', 'o', 'm', 'i', 'a', 'o', 'p', 'a', 'i', '.', 'c', 'o', 'm', '\0', @@ -15523,6 +15530,7 @@ static const char kSTSHostTable[] = { /* "wubocong.com", true */ 'w', 'u', 'b', 'o', 'c', 'o', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "wubthecaptain.eu", true */ 'w', 'u', 'b', 't', 'h', 'e', 'c', 'a', 'p', 't', 'a', 'i', 'n', '.', 'e', 'u', '\0', /* "wuetix.de", true */ 'w', 'u', 'e', 't', 'i', 'x', '.', 'd', 'e', '\0', + /* "wukongmusic.us", true */ 'w', 'u', 'k', 'o', 'n', 'g', 'm', 'u', 's', 'i', 'c', '.', 'u', 's', '\0', /* "wumbo.co.nz", true */ 'w', 'u', 'm', 'b', 'o', '.', 'c', 'o', '.', 'n', 'z', '\0', /* "wunderkarten.de", true */ 'w', 'u', 'n', 'd', 'e', 'r', 'k', 'a', 'r', 't', 'e', 'n', '.', 'd', 'e', '\0', /* "wunderlist.com", true */ 'w', 'u', 'n', 'd', 'e', 'r', 'l', 'i', 's', 't', '.', 'c', 'o', 'm', '\0', @@ -15637,7 +15645,7 @@ static const char kSTSHostTable[] = { /* "xecureit.com", true */ 'x', 'e', 'c', 'u', 'r', 'e', 'i', 't', '.', 'c', 'o', 'm', '\0', /* "xenophile.name", true */ 'x', 'e', 'n', 'o', 'p', 'h', 'i', 'l', 'e', '.', 'n', 'a', 'm', 'e', '\0', /* "xerhost.de", false */ 'x', 'e', 'r', 'h', 'o', 's', 't', '.', 'd', 'e', '\0', - /* "xetown.com", true */ 'x', 'e', 't', 'o', 'w', 'n', '.', 'c', 'o', 'm', '\0', + /* "xetown.com", false */ 'x', 'e', 't', 'o', 'w', 'n', '.', 'c', 'o', 'm', '\0', /* "xfix.pw", true */ 'x', 'f', 'i', 'x', '.', 'p', 'w', '\0', /* "xfrag-networks.com", false */ 'x', 'f', 'r', 'a', 'g', '-', 'n', 'e', 't', 'w', 'o', 'r', 'k', 's', '.', 'c', 'o', 'm', '\0', /* "xg3n1us.de", true */ 'x', 'g', '3', 'n', '1', 'u', 's', '.', 'd', 'e', '\0', @@ -15692,7 +15700,6 @@ static const char kSTSHostTable[] = { /* "xn--aviao-dra1a.pt", true */ 'x', 'n', '-', '-', 'a', 'v', 'i', 'a', 'o', '-', 'd', 'r', 'a', '1', 'a', '.', 'p', 't', '\0', /* "xn--detrkl13b9sbv53j.com", true */ 'x', 'n', '-', '-', 'd', 'e', 't', 'r', 'k', 'l', '1', '3', 'b', '9', 's', 'b', 'v', '5', '3', 'j', '.', 'c', 'o', 'm', '\0', /* "xn--detrkl13b9sbv53j.org", true */ 'x', 'n', '-', '-', 'd', 'e', 't', 'r', 'k', 'l', '1', '3', 'b', '9', 's', 'b', 'v', '5', '3', 'j', '.', 'o', 'r', 'g', '\0', - /* "xn--dmonenjger-q5ag.net", true */ 'x', 'n', '-', '-', 'd', 'm', 'o', 'n', 'e', 'n', 'j', 'g', 'e', 'r', '-', 'q', '5', 'a', 'g', '.', 'n', 'e', 't', '\0', /* "xn--fischereiverein-mnsterhausen-i7c.de", true */ 'x', 'n', '-', '-', 'f', 'i', 's', 'c', 'h', 'e', 'r', 'e', 'i', 'v', 'e', 'r', 'e', 'i', 'n', '-', 'm', 'n', 's', 't', 'e', 'r', 'h', 'a', 'u', 's', 'e', 'n', '-', 'i', '7', 'c', '.', 'd', 'e', '\0', /* "xn--hfk-allgu-schwaben-stb.de", true */ 'x', 'n', '-', '-', 'h', 'f', 'k', '-', 'a', 'l', 'l', 'g', 'u', '-', 's', 'c', 'h', 'w', 'a', 'b', 'e', 'n', '-', 's', 't', 'b', '.', 'd', 'e', '\0', /* "xn--jda.tk", true */ 'x', 'n', '-', '-', 'j', 'd', 'a', '.', 't', 'k', '\0', @@ -15857,7 +15864,6 @@ static const char kSTSHostTable[] = { /* "ypcs.fi", true */ 'y', 'p', 'c', 's', '.', 'f', 'i', '\0', /* "ypid.de", true */ 'y', 'p', 'i', 'd', '.', 'd', 'e', '\0', /* "yplanapp.com", true */ 'y', 'p', 'l', 'a', 'n', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0', - /* "ys-shop.biz", true */ 'y', 's', '-', 's', 'h', 'o', 'p', '.', 'b', 'i', 'z', '\0', /* "ytec.ca", true */ 'y', 't', 'e', 'c', '.', 'c', 'a', '\0', /* "ytuquelees.net", true */ 'y', 't', 'u', 'q', 'u', 'e', 'l', 'e', 'e', 's', '.', 'n', 'e', 't', '\0', /* "ytvwld.de", true */ 'y', 't', 'v', 'w', 'l', 'd', '.', 'd', 'e', '\0', @@ -16119,1624 +16125,1624 @@ static const nsSTSPreload kSTSPreloadList[] = { { 441, true }, { 457, true }, { 465, true }, - { 475, true }, - { 486, true }, - { 493, true }, - { 508, true }, - { 522, true }, - { 534, true }, - { 545, true }, - { 556, true }, - { 567, true }, - { 577, true }, - { 587, true }, - { 612, true }, + { 473, true }, + { 483, true }, + { 494, true }, + { 501, true }, + { 516, true }, + { 530, true }, + { 542, true }, + { 553, true }, + { 564, true }, + { 575, true }, + { 585, true }, + { 595, true }, { 620, true }, - { 630, true }, + { 628, true }, { 638, true }, - { 656, false }, - { 672, true }, - { 683, true }, - { 704, true }, - { 720, true }, + { 646, true }, + { 664, false }, + { 680, true }, + { 691, true }, + { 712, true }, { 728, true }, - { 753, true }, - { 775, true }, - { 792, true }, - { 815, true }, - { 825, true }, - { 836, true }, - { 847, true }, - { 861, true }, - { 883, true }, - { 895, true }, - { 902, true }, - { 911, true }, - { 922, true }, - { 929, true }, - { 940, true }, - { 951, true }, - { 958, true }, - { 965, true }, - { 976, true }, - { 983, true }, - { 995, true }, - { 1012, true }, - { 1030, true }, - { 1044, true }, - { 1056, true }, - { 1067, true }, - { 1076, true }, - { 1082, true }, - { 1097, true }, + { 736, true }, + { 761, true }, + { 783, true }, + { 800, true }, + { 823, true }, + { 833, true }, + { 844, true }, + { 855, true }, + { 869, true }, + { 891, true }, + { 903, true }, + { 910, true }, + { 919, true }, + { 930, true }, + { 937, true }, + { 948, true }, + { 959, true }, + { 966, true }, + { 973, true }, + { 984, true }, + { 991, true }, + { 1003, true }, + { 1020, true }, + { 1038, true }, + { 1052, true }, + { 1064, true }, + { 1075, true }, + { 1084, true }, + { 1090, true }, { 1105, true }, - { 1114, true }, + { 1113, true }, { 1122, true }, - { 1133, true }, - { 1143, true }, - { 1161, true }, - { 1177, true }, - { 1186, true }, + { 1130, true }, + { 1141, true }, + { 1151, true }, + { 1169, true }, + { 1185, true }, { 1194, true }, { 1202, true }, - { 1213, true }, - { 1231, true }, - { 1240, true }, - { 1252, true }, - { 1266, true }, - { 1274, true }, - { 1284, true }, - { 1300, false }, - { 1313, true }, - { 1322, true }, - { 1336, true }, - { 1345, true }, - { 1366, true }, - { 1386, true }, - { 1395, true }, + { 1210, true }, + { 1221, true }, + { 1239, true }, + { 1250, true }, + { 1259, true }, + { 1271, true }, + { 1285, true }, + { 1293, true }, + { 1303, true }, + { 1319, false }, + { 1332, true }, + { 1341, true }, + { 1355, true }, + { 1364, true }, + { 1385, true }, { 1405, true }, - { 1420, true }, - { 1428, true }, - { 1445, true }, - { 1461, true }, - { 1468, true }, - { 1481, true }, - { 1490, false }, - { 1502, true }, - { 1510, true }, + { 1414, true }, + { 1424, true }, + { 1439, true }, + { 1447, true }, + { 1464, true }, + { 1480, true }, + { 1487, true }, + { 1500, true }, + { 1509, false }, { 1521, true }, - { 1528, true }, - { 1537, true }, - { 1546, true }, - { 1559, true }, - { 1568, true }, + { 1529, true }, + { 1540, true }, + { 1547, true }, + { 1556, true }, + { 1565, true }, + { 1578, true }, { 1587, true }, { 1606, true }, - { 1618, true }, - { 1632, true }, - { 1644, true }, - { 1655, true }, - { 1664, true }, - { 1675, true }, - { 1688, true }, - { 1696, true }, - { 1711, true }, - { 1723, true }, - { 1736, true }, - { 1746, true }, - { 1760, true }, - { 1774, true }, - { 1788, true }, - { 1796, true }, - { 1803, true }, - { 1814, true }, - { 1827, true }, - { 1836, true }, - { 1848, true }, - { 1859, true }, - { 1869, true }, - { 1880, true }, - { 1891, true }, - { 1904, true }, - { 1912, false }, - { 1921, false }, - { 1934, true }, - { 1942, true }, - { 1954, true }, - { 1966, true }, - { 1981, true }, + { 1625, true }, + { 1637, true }, + { 1651, true }, + { 1663, true }, + { 1674, true }, + { 1683, true }, + { 1694, true }, + { 1707, true }, + { 1715, true }, + { 1730, true }, + { 1742, true }, + { 1755, true }, + { 1765, true }, + { 1779, true }, + { 1793, true }, + { 1807, true }, + { 1815, true }, + { 1822, true }, + { 1833, true }, + { 1846, true }, + { 1855, true }, + { 1867, true }, + { 1878, true }, + { 1888, true }, + { 1899, true }, + { 1910, true }, + { 1923, true }, + { 1931, false }, + { 1940, false }, + { 1953, true }, + { 1961, true }, + { 1973, true }, + { 1985, true }, { 2000, true }, - { 2007, false }, - { 2026, true }, - { 2036, true }, - { 2042, true }, - { 2051, true }, - { 2064, true }, - { 2076, true }, - { 2085, true }, - { 2098, true }, - { 2108, true }, - { 2118, false }, - { 2125, true }, - { 2136, true }, - { 2148, true }, - { 2156, true }, - { 2169, true }, - { 2176, true }, - { 2185, true }, - { 2197, true }, - { 2206, true }, - { 2227, true }, - { 2251, true }, - { 2266, true }, - { 2277, true }, - { 2283, true }, + { 2019, true }, + { 2026, false }, + { 2045, true }, + { 2055, true }, + { 2061, true }, + { 2070, true }, + { 2083, true }, + { 2095, true }, + { 2104, true }, + { 2117, true }, + { 2127, true }, + { 2137, false }, + { 2144, true }, + { 2155, true }, + { 2167, true }, + { 2175, true }, + { 2188, true }, + { 2195, true }, + { 2204, true }, + { 2216, true }, + { 2225, true }, + { 2246, true }, + { 2270, true }, + { 2285, true }, { 2296, true }, - { 2308, true }, - { 2320, true }, - { 2328, true }, - { 2338, true }, - { 2345, true }, - { 2362, true }, - { 2369, true }, - { 2378, true }, - { 2399, true }, - { 2412, false }, - { 2425, true }, - { 2435, true }, - { 2488, true }, - { 2500, true }, - { 2509, true }, - { 2518, true }, + { 2302, true }, + { 2315, true }, + { 2327, true }, + { 2339, true }, + { 2347, true }, + { 2357, true }, + { 2364, true }, + { 2381, true }, + { 2388, true }, + { 2397, true }, + { 2418, true }, + { 2431, false }, + { 2444, true }, + { 2454, true }, + { 2507, true }, + { 2519, true }, { 2528, true }, - { 2538, true }, - { 2549, true }, + { 2537, true }, + { 2547, true }, { 2557, true }, - { 2564, true }, + { 2568, true }, { 2576, true }, - { 2592, true }, - { 2604, true }, - { 2614, true }, - { 2625, true }, + { 2583, true }, + { 2595, true }, + { 2611, true }, + { 2623, true }, + { 2633, true }, { 2644, true }, - { 2655, true }, - { 2665, true }, - { 2676, true }, - { 2685, true }, - { 2698, true }, - { 2713, true }, - { 2721, true }, - { 2731, true }, - { 2748, true }, - { 2763, true }, - { 2775, true }, - { 2791, true }, - { 2801, true }, - { 2808, true }, - { 2819, true }, - { 2834, true }, - { 2844, true }, - { 2872, true }, - { 2891, true }, - { 2901, true }, - { 2912, true }, - { 2930, true }, - { 2941, true }, - { 2955, true }, - { 2967, true }, + { 2663, true }, + { 2674, true }, + { 2684, true }, + { 2695, true }, + { 2704, true }, + { 2717, true }, + { 2732, true }, + { 2747, true }, + { 2755, true }, + { 2765, true }, + { 2782, true }, + { 2797, true }, + { 2809, true }, + { 2825, true }, + { 2835, true }, + { 2842, true }, + { 2853, true }, + { 2868, true }, + { 2878, true }, + { 2906, true }, + { 2925, true }, + { 2935, true }, + { 2946, true }, + { 2964, true }, + { 2975, true }, { 2989, true }, - { 3005, true }, - { 3016, false }, - { 3032, false }, - { 3044, true }, - { 3057, true }, - { 3074, true }, - { 3099, true }, - { 3116, true }, - { 3140, false }, - { 3148, true }, - { 3172, true }, - { 3185, true }, - { 3197, true }, - { 3208, true }, - { 3226, true }, - { 3250, true }, - { 3257, true }, - { 3270, true }, - { 3283, true }, - { 3292, true }, - { 3309, true }, - { 3321, true }, - { 3340, true }, - { 3363, true }, - { 3377, true }, - { 3401, true }, - { 3417, true }, - { 3430, true }, - { 3447, true }, - { 3467, true }, - { 3480, true }, - { 3498, true }, - { 3513, true }, - { 3534, true }, - { 3554, true }, - { 3579, true }, - { 3591, true }, - { 3602, true }, - { 3621, false }, - { 3628, true }, - { 3649, true }, - { 3661, true }, - { 3678, true }, - { 3691, true }, - { 3707, true }, - { 3728, true }, - { 3740, true }, - { 3753, false }, - { 3762, false }, - { 3772, true }, - { 3787, true }, - { 3804, true }, - { 3818, true }, - { 3831, true }, - { 3847, true }, - { 3858, true }, - { 3870, true }, - { 3891, false }, - { 3901, true }, - { 3916, true }, - { 3930, false }, - { 3943, true }, - { 3952, true }, - { 3967, true }, - { 3981, true }, - { 3993, true }, - { 4008, true }, - { 4021, true }, - { 4033, true }, - { 4045, true }, - { 4057, true }, - { 4069, true }, - { 4081, true }, - { 4089, true }, - { 4102, true }, - { 4113, true }, - { 4130, true }, - { 4144, true }, - { 4160, true }, - { 4173, true }, - { 4190, true }, - { 4206, true }, - { 4221, true }, - { 4236, true }, - { 4254, true }, - { 4263, true }, - { 4276, true }, + { 3001, true }, + { 3023, true }, + { 3039, true }, + { 3050, false }, + { 3066, false }, + { 3078, true }, + { 3091, true }, + { 3108, true }, + { 3133, true }, + { 3150, true }, + { 3174, false }, + { 3182, true }, + { 3206, true }, + { 3219, true }, + { 3231, true }, + { 3242, true }, + { 3260, true }, + { 3284, true }, + { 3291, true }, + { 3304, true }, + { 3317, true }, + { 3326, true }, + { 3343, true }, + { 3355, true }, + { 3374, true }, + { 3397, true }, + { 3411, true }, + { 3435, true }, + { 3451, true }, + { 3464, true }, + { 3481, true }, + { 3501, true }, + { 3514, true }, + { 3532, true }, + { 3547, true }, + { 3568, true }, + { 3588, true }, + { 3613, true }, + { 3625, true }, + { 3636, true }, + { 3655, false }, + { 3662, true }, + { 3683, true }, + { 3695, true }, + { 3712, true }, + { 3725, true }, + { 3741, true }, + { 3762, true }, + { 3774, true }, + { 3787, false }, + { 3796, false }, + { 3806, true }, + { 3821, true }, + { 3838, true }, + { 3852, true }, + { 3865, true }, + { 3881, true }, + { 3892, true }, + { 3904, true }, + { 3925, false }, + { 3935, true }, + { 3950, true }, + { 3964, false }, + { 3977, true }, + { 3986, true }, + { 4001, true }, + { 4015, true }, + { 4027, true }, + { 4042, true }, + { 4055, true }, + { 4067, true }, + { 4079, true }, + { 4091, true }, + { 4103, true }, + { 4115, true }, + { 4123, true }, + { 4136, true }, + { 4147, true }, + { 4164, true }, + { 4178, true }, + { 4194, true }, + { 4207, true }, + { 4224, true }, + { 4240, true }, + { 4255, true }, + { 4270, true }, + { 4288, true }, { 4297, true }, - { 4306, true }, - { 4316, true }, - { 4341, true }, - { 4352, true }, - { 4364, true }, - { 4383, true }, - { 4395, true }, - { 4414, true }, - { 4433, true }, - { 4452, true }, - { 4463, true }, - { 4475, true }, - { 4490, true }, - { 4501, true }, - { 4514, true }, - { 4526, true }, - { 4539, true }, - { 4553, true }, - { 4575, true }, - { 4598, true }, - { 4608, true }, - { 4630, true }, - { 4639, true }, - { 4652, true }, - { 4666, true }, - { 4678, true }, - { 4691, true }, - { 4718, true }, - { 4744, true }, - { 4755, true }, - { 4768, true }, - { 4779, true }, - { 4803, true }, - { 4820, true }, - { 4848, true }, - { 4864, true }, - { 4873, true }, - { 4883, true }, - { 4897, true }, - { 4916, true }, - { 4926, true }, - { 4940, true }, - { 4948, false }, - { 4969, true }, - { 4987, true }, - { 4998, true }, - { 5008, true }, - { 5017, true }, - { 5036, true }, - { 5057, true }, - { 5071, true }, - { 5090, true }, - { 5103, true }, - { 5114, true }, - { 5134, true }, - { 5152, true }, - { 5170, false }, - { 5189, true }, - { 5203, true }, - { 5224, true }, - { 5240, true }, - { 5250, true }, - { 5263, true }, - { 5276, true }, - { 5290, true }, - { 5304, true }, - { 5314, true }, + { 4310, true }, + { 4331, true }, + { 4340, true }, + { 4350, true }, + { 4375, true }, + { 4386, true }, + { 4398, true }, + { 4417, true }, + { 4429, true }, + { 4448, true }, + { 4467, true }, + { 4486, true }, + { 4497, true }, + { 4509, true }, + { 4524, true }, + { 4535, true }, + { 4548, true }, + { 4560, true }, + { 4573, true }, + { 4587, true }, + { 4609, true }, + { 4632, true }, + { 4642, true }, + { 4664, true }, + { 4673, true }, + { 4686, true }, + { 4700, true }, + { 4712, true }, + { 4725, true }, + { 4752, true }, + { 4778, true }, + { 4789, true }, + { 4802, true }, + { 4813, true }, + { 4837, true }, + { 4854, true }, + { 4882, true }, + { 4898, true }, + { 4907, true }, + { 4917, true }, + { 4931, true }, + { 4950, true }, + { 4960, true }, + { 4974, true }, + { 4982, false }, + { 5003, true }, + { 5021, true }, + { 5032, true }, + { 5042, true }, + { 5051, true }, + { 5070, true }, + { 5091, true }, + { 5105, true }, + { 5124, true }, + { 5137, true }, + { 5148, true }, + { 5168, true }, + { 5186, true }, + { 5204, false }, + { 5223, true }, + { 5237, true }, + { 5258, true }, + { 5274, true }, + { 5284, true }, + { 5297, true }, + { 5310, true }, { 5324, true }, - { 5334, true }, - { 5344, true }, - { 5354, true }, - { 5364, true }, - { 5381, true }, - { 5391, false }, - { 5399, true }, - { 5410, true }, - { 5421, true }, - { 5432, true }, - { 5450, true }, - { 5459, true }, - { 5479, true }, - { 5490, true }, - { 5507, true }, - { 5531, true }, - { 5545, true }, - { 5564, true }, - { 5586, true }, - { 5596, true }, - { 5608, true }, - { 5624, true }, - { 5635, true }, - { 5649, true }, - { 5665, true }, - { 5680, true }, - { 5688, true }, - { 5697, true }, - { 5714, false }, - { 5726, true }, - { 5745, true }, - { 5762, true }, - { 5770, false }, - { 5786, true }, - { 5804, true }, - { 5815, true }, - { 5828, true }, - { 5836, true }, - { 5850, true }, + { 5338, true }, + { 5348, true }, + { 5358, true }, + { 5368, true }, + { 5378, true }, + { 5388, true }, + { 5398, true }, + { 5415, true }, + { 5425, false }, + { 5433, true }, + { 5444, true }, + { 5455, true }, + { 5466, true }, + { 5484, true }, + { 5493, true }, + { 5513, true }, + { 5524, true }, + { 5541, true }, + { 5565, true }, + { 5579, true }, + { 5598, true }, + { 5620, true }, + { 5630, true }, + { 5642, true }, + { 5658, true }, + { 5669, true }, + { 5683, true }, + { 5699, true }, + { 5714, true }, + { 5722, true }, + { 5731, true }, + { 5748, false }, + { 5760, true }, + { 5779, true }, + { 5796, true }, + { 5804, false }, + { 5820, true }, + { 5838, true }, + { 5849, true }, { 5862, true }, - { 5872, false }, - { 5885, true }, - { 5897, true }, - { 5909, true }, - { 5923, true }, - { 5933, true }, - { 5941, true }, - { 5951, true }, - { 5965, true }, - { 5978, true }, - { 5990, true }, - { 6009, true }, - { 6028, true }, - { 6038, true }, - { 6071, true }, - { 6081, true }, - { 6095, true }, - { 6102, true }, - { 6119, true }, - { 6135, true }, - { 6144, true }, - { 6151, true }, - { 6165, true }, - { 6173, true }, - { 6184, true }, + { 5870, true }, + { 5884, true }, + { 5896, true }, + { 5906, false }, + { 5919, true }, + { 5931, true }, + { 5943, true }, + { 5957, true }, + { 5967, true }, + { 5975, true }, + { 5985, true }, + { 5999, true }, + { 6012, true }, + { 6024, true }, + { 6043, true }, + { 6062, true }, + { 6072, true }, + { 6105, true }, + { 6115, true }, + { 6129, true }, + { 6136, true }, + { 6153, true }, + { 6169, true }, + { 6178, true }, + { 6185, true }, { 6199, true }, - { 6214, true }, - { 6231, true }, - { 6244, true }, - { 6254, true }, + { 6207, true }, + { 6218, true }, + { 6233, true }, + { 6248, true }, { 6265, true }, - { 6280, true }, - { 6303, true }, + { 6278, true }, + { 6288, true }, + { 6299, true }, { 6314, true }, - { 6326, true }, { 6337, true }, - { 6357, true }, - { 6368, true }, - { 6379, true }, - { 6390, true }, - { 6401, true }, - { 6414, true }, - { 6432, true }, - { 6444, true }, - { 6461, true }, - { 6470, true }, - { 6484, true }, + { 6348, true }, + { 6360, true }, + { 6371, true }, + { 6391, true }, + { 6402, true }, + { 6413, true }, + { 6424, true }, + { 6435, true }, + { 6448, true }, + { 6466, true }, + { 6478, true }, { 6495, true }, - { 6512, true }, - { 6523, true }, - { 6531, true }, - { 6540, false }, - { 6566, false }, - { 6577, true }, - { 6587, false }, - { 6604, true }, - { 6614, true }, - { 6627, true }, - { 6639, true }, + { 6504, true }, + { 6518, true }, + { 6529, true }, + { 6546, true }, + { 6557, true }, + { 6565, true }, + { 6574, false }, + { 6600, false }, + { 6611, true }, + { 6621, false }, + { 6638, true }, { 6648, true }, - { 6665, true }, - { 6672, true }, - { 6696, true }, - { 6712, true }, - { 6732, true }, - { 6757, true }, - { 6782, true }, - { 6807, true }, - { 6819, true }, - { 6831, true }, - { 6840, true }, - { 6853, false }, - { 6862, true }, - { 6878, true }, - { 6894, true }, - { 6906, true }, - { 6920, true }, + { 6661, true }, + { 6673, true }, + { 6682, true }, + { 6699, true }, + { 6706, true }, + { 6730, true }, + { 6746, true }, + { 6766, true }, + { 6791, true }, + { 6816, true }, + { 6841, true }, + { 6853, true }, + { 6865, true }, + { 6874, true }, + { 6887, false }, + { 6896, true }, + { 6912, true }, + { 6928, true }, { 6940, true }, - { 6955, true }, - { 6976, true }, - { 6988, true }, - { 6999, true }, - { 7009, true }, - { 7021, true }, + { 6954, true }, + { 6974, true }, + { 6989, true }, + { 7010, true }, + { 7022, true }, { 7033, true }, - { 7042, true }, - { 7054, true }, - { 7073, true }, - { 7086, true }, - { 7097, true }, - { 7106, true }, - { 7124, true }, - { 7138, true }, - { 7152, true }, - { 7168, true }, - { 7184, true }, - { 7204, true }, - { 7225, true }, - { 7239, true }, - { 7252, true }, - { 7267, true }, - { 7277, true }, - { 7295, true }, - { 7310, true }, - { 7328, true }, - { 7338, true }, - { 7353, true }, - { 7371, true }, - { 7385, true }, - { 7399, true }, - { 7413, true }, - { 7425, true }, - { 7440, true }, - { 7454, true }, - { 7469, true }, - { 7479, true }, - { 7493, true }, - { 7508, true }, - { 7522, true }, - { 7536, true }, - { 7552, true }, - { 7564, true }, - { 7577, false }, - { 7592, true }, - { 7619, true }, - { 7631, true }, - { 7646, true }, - { 7660, true }, - { 7682, true }, - { 7705, true }, - { 7726, true }, - { 7738, true }, - { 7751, true }, - { 7763, true }, - { 7776, true }, - { 7791, true }, - { 7802, false }, - { 7818, true }, - { 7829, true }, - { 7841, true }, - { 7854, true }, - { 7874, true }, - { 7887, true }, - { 7905, true }, - { 7922, true }, - { 7946, true }, - { 7965, true }, - { 7979, true }, - { 7992, true }, - { 8008, true }, - { 8024, true }, - { 8043, true }, - { 8056, true }, + { 7043, true }, + { 7055, true }, + { 7067, true }, + { 7076, true }, + { 7088, true }, + { 7107, true }, + { 7120, true }, + { 7131, true }, + { 7140, true }, + { 7158, true }, + { 7172, true }, + { 7186, true }, + { 7202, true }, + { 7218, true }, + { 7238, true }, + { 7259, true }, + { 7273, true }, + { 7286, true }, + { 7301, true }, + { 7311, true }, + { 7329, true }, + { 7344, true }, + { 7362, true }, + { 7372, true }, + { 7387, true }, + { 7405, true }, + { 7419, true }, + { 7433, true }, + { 7447, true }, + { 7459, true }, + { 7474, true }, + { 7488, true }, + { 7503, true }, + { 7513, true }, + { 7527, true }, + { 7542, true }, + { 7556, true }, + { 7570, true }, + { 7586, true }, + { 7598, true }, + { 7611, false }, + { 7626, true }, + { 7653, true }, + { 7665, true }, + { 7680, true }, + { 7694, true }, + { 7716, true }, + { 7739, true }, + { 7760, true }, + { 7772, true }, + { 7785, true }, + { 7797, true }, + { 7810, true }, + { 7825, true }, + { 7836, false }, + { 7852, true }, + { 7863, true }, + { 7875, true }, + { 7888, true }, + { 7908, true }, + { 7921, true }, + { 7939, true }, + { 7956, true }, + { 7980, true }, + { 7999, true }, + { 8013, true }, + { 8026, true }, + { 8042, true }, + { 8058, true }, { 8077, true }, - { 8097, true }, - { 8117, true }, - { 8133, true }, - { 8146, false }, - { 8159, true }, - { 8171, true }, - { 8181, true }, - { 8194, true }, - { 8208, true }, - { 8224, true }, - { 8238, true }, - { 8254, true }, - { 8266, true }, - { 8280, true }, - { 8291, true }, - { 8310, true }, - { 8323, true }, - { 8337, true }, - { 8345, true }, - { 8358, true }, - { 8373, true }, - { 8387, true }, - { 8404, true }, - { 8423, true }, - { 8435, true }, - { 8449, true }, - { 8471, true }, - { 8485, true }, - { 8497, true }, - { 8525, true }, - { 8540, true }, - { 8552, true }, - { 8563, true }, + { 8090, true }, + { 8111, true }, + { 8131, true }, + { 8151, true }, + { 8167, true }, + { 8180, false }, + { 8193, true }, + { 8205, true }, + { 8215, true }, + { 8228, true }, + { 8242, true }, + { 8258, true }, + { 8272, true }, + { 8288, true }, + { 8300, true }, + { 8314, true }, + { 8325, true }, + { 8344, true }, + { 8357, true }, + { 8371, true }, + { 8379, true }, + { 8392, true }, + { 8407, true }, + { 8421, true }, + { 8438, true }, + { 8457, true }, + { 8469, true }, + { 8483, true }, + { 8505, true }, + { 8519, true }, + { 8531, true }, + { 8559, true }, { 8574, true }, { 8586, true }, - { 8594, true }, - { 8605, true }, - { 8613, true }, - { 8621, true }, - { 8629, true }, - { 8637, true }, - { 8650, true }, - { 8657, true }, - { 8667, true }, - { 8680, true }, - { 8692, true }, + { 8597, true }, + { 8608, true }, + { 8622, true }, + { 8634, true }, + { 8642, true }, + { 8653, true }, + { 8661, true }, + { 8669, true }, + { 8677, true }, + { 8685, true }, + { 8698, true }, { 8705, true }, - { 8725, true }, - { 8737, true }, - { 8749, true }, - { 8767, true }, - { 8795, true }, - { 8808, true }, - { 8817, true }, - { 8830, true }, - { 8842, true }, + { 8715, true }, + { 8728, true }, + { 8740, true }, + { 8753, true }, + { 8773, true }, + { 8785, true }, + { 8797, true }, + { 8815, true }, + { 8843, true }, { 8856, true }, - { 8869, true }, - { 8880, true }, + { 8865, true }, + { 8878, true }, { 8890, true }, - { 8901, true }, - { 8911, true }, - { 8922, true }, - { 8931, true }, - { 8947, true }, - { 8963, true }, - { 8991, true }, - { 9010, true }, - { 9025, true }, - { 9045, true }, - { 9057, true }, - { 9069, true }, - { 9082, true }, - { 9091, true }, - { 9100, true }, - { 9119, true }, + { 8904, true }, + { 8917, true }, + { 8928, true }, + { 8938, true }, + { 8949, true }, + { 8959, true }, + { 8970, true }, + { 8979, true }, + { 8995, true }, + { 9011, true }, + { 9039, true }, + { 9058, true }, + { 9073, true }, + { 9093, true }, + { 9105, true }, + { 9117, true }, { 9130, true }, - { 9141, true }, - { 9156, true }, - { 9176, true }, - { 9194, true }, + { 9139, true }, + { 9148, true }, + { 9167, true }, + { 9178, true }, + { 9189, true }, { 9204, true }, - { 9221, true }, - { 9232, true }, + { 9224, true }, { 9242, true }, - { 9256, true }, - { 9273, true }, - { 9282, true }, - { 9293, true }, - { 9313, true }, - { 9332, true }, - { 9343, true }, - { 9354, true }, - { 9372, true }, - { 9398, false }, - { 9409, true }, - { 9431, true }, - { 9453, true }, - { 9467, true }, - { 9482, true }, - { 9496, true }, - { 9510, true }, - { 9525, true }, - { 9546, true }, - { 9556, true }, - { 9567, true }, - { 9588, true }, - { 9606, true }, - { 9624, true }, - { 9637, true }, - { 9645, true }, - { 9658, true }, - { 9672, true }, - { 9694, true }, - { 9709, true }, - { 9726, true }, - { 9748, true }, - { 9763, true }, - { 9780, true }, - { 9801, true }, - { 9817, true }, - { 9844, true }, - { 9860, true }, - { 9877, true }, - { 9892, true }, - { 9906, true }, + { 9252, true }, + { 9269, true }, + { 9280, true }, + { 9290, true }, + { 9304, true }, + { 9321, true }, + { 9330, true }, + { 9341, true }, + { 9361, true }, + { 9380, true }, + { 9391, true }, + { 9402, true }, + { 9420, true }, + { 9446, false }, + { 9457, true }, + { 9479, true }, + { 9501, true }, + { 9515, true }, + { 9530, true }, + { 9544, true }, + { 9558, true }, + { 9573, true }, + { 9594, true }, + { 9604, false }, + { 9635, true }, + { 9646, true }, + { 9667, true }, + { 9685, true }, + { 9703, true }, + { 9716, true }, + { 9724, true }, + { 9737, true }, + { 9751, true }, + { 9773, true }, + { 9788, true }, + { 9805, true }, + { 9827, true }, + { 9842, true }, + { 9859, true }, + { 9880, true }, + { 9896, true }, { 9923, true }, - { 9940, true }, - { 9952, true }, - { 9970, true }, - { 9987, true }, + { 9939, true }, + { 9956, true }, + { 9971, true }, + { 9985, true }, { 10002, true }, - { 10016, true }, - { 10033, true }, - { 10051, true }, + { 10019, true }, + { 10031, true }, + { 10049, true }, { 10066, true }, - { 10078, true }, - { 10094, true }, - { 10107, true }, - { 10127, true }, - { 10147, true }, - { 10158, true }, - { 10169, true }, - { 10180, true }, - { 10195, true }, + { 10081, true }, + { 10095, true }, + { 10112, true }, + { 10130, true }, + { 10145, true }, + { 10157, true }, + { 10173, true }, + { 10186, true }, { 10206, true }, - { 10223, true }, - { 10239, true }, - { 10250, true }, - { 10261, true }, - { 10273, true }, - { 10286, true }, - { 10305, true }, - { 10316, true }, + { 10226, true }, + { 10237, true }, + { 10248, true }, + { 10259, true }, + { 10274, true }, + { 10285, true }, + { 10302, true }, + { 10318, true }, { 10329, true }, - { 10343, true }, - { 10361, false }, - { 10374, false }, - { 10383, true }, - { 10400, true }, - { 10417, true }, - { 10437, true }, - { 10448, true }, - { 10459, true }, - { 10477, true }, - { 10509, true }, - { 10536, true }, - { 10548, true }, - { 10558, true }, - { 10576, true }, - { 10591, true }, - { 10603, true }, + { 10340, true }, + { 10352, true }, + { 10365, true }, + { 10384, true }, + { 10395, true }, + { 10408, true }, + { 10422, true }, + { 10440, false }, + { 10453, false }, + { 10462, true }, + { 10479, true }, + { 10496, true }, + { 10516, true }, + { 10527, true }, + { 10538, true }, + { 10556, true }, + { 10588, true }, { 10615, true }, - { 10635, true }, - { 10654, true }, - { 10674, true }, - { 10697, false }, - { 10721, true }, + { 10627, true }, + { 10637, true }, + { 10655, true }, + { 10670, true }, + { 10682, true }, + { 10694, true }, + { 10714, true }, { 10733, true }, - { 10744, true }, - { 10756, true }, - { 10768, true }, - { 10784, true }, - { 10801, true }, - { 10820, true }, - { 10834, true }, - { 10845, true }, - { 10861, true }, + { 10753, true }, + { 10776, false }, + { 10800, true }, + { 10812, true }, + { 10823, true }, + { 10835, true }, + { 10847, true }, + { 10863, true }, { 10880, true }, - { 10893, true }, - { 10906, true }, - { 10918, true }, - { 10934, true }, - { 10950, true }, - { 10962, true }, - { 10978, true }, - { 10995, true }, - { 11009, true }, - { 11024, true }, - { 11039, true }, - { 11050, true }, - { 11068, true }, - { 11084, true }, - { 11105, true }, - { 11119, true }, - { 11134, true }, - { 11144, true }, - { 11157, true }, - { 11174, true }, - { 11187, true }, - { 11200, true }, - { 11216, true }, - { 11227, true }, - { 11239, true }, - { 11250, true }, - { 11257, true }, - { 11265, false }, - { 11276, true }, - { 11287, true }, - { 11300, false }, - { 11308, true }, + { 10899, true }, + { 10913, true }, + { 10924, true }, + { 10940, true }, + { 10959, true }, + { 10972, true }, + { 10985, true }, + { 10997, true }, + { 11013, true }, + { 11029, true }, + { 11041, true }, + { 11057, true }, + { 11074, true }, + { 11088, true }, + { 11103, true }, + { 11118, true }, + { 11129, true }, + { 11147, true }, + { 11163, true }, + { 11184, true }, + { 11198, true }, + { 11213, true }, + { 11223, true }, + { 11236, true }, + { 11253, true }, + { 11266, true }, + { 11279, true }, + { 11295, true }, + { 11306, true }, { 11318, true }, - { 11325, true }, - { 11339, false }, - { 11353, true }, - { 11369, true }, - { 11378, true }, - { 11408, true }, - { 11431, true }, - { 11444, true }, - { 11463, true }, - { 11476, false }, - { 11495, true }, - { 11511, false }, - { 11527, true }, - { 11543, false }, - { 11558, false }, - { 11571, true }, - { 11587, true }, - { 11599, true }, - { 11618, true }, - { 11639, true }, - { 11652, true }, - { 11665, true }, - { 11675, true }, - { 11686, true }, + { 11329, true }, + { 11336, true }, + { 11344, false }, + { 11355, true }, + { 11366, true }, + { 11379, false }, + { 11387, true }, + { 11397, true }, + { 11404, true }, + { 11418, false }, + { 11432, true }, + { 11448, true }, + { 11457, true }, + { 11487, true }, + { 11510, true }, + { 11523, true }, + { 11542, true }, + { 11555, false }, + { 11574, true }, + { 11590, false }, + { 11606, true }, + { 11622, false }, + { 11637, false }, + { 11650, true }, + { 11666, true }, + { 11678, true }, { 11697, true }, - { 11711, true }, - { 11727, true }, - { 11744, false }, - { 11761, true }, - { 11787, true }, - { 11800, true }, - { 11814, true }, - { 11833, true }, - { 11854, true }, + { 11718, true }, + { 11731, true }, + { 11744, true }, + { 11754, true }, + { 11765, true }, + { 11776, true }, + { 11790, true }, + { 11806, true }, + { 11823, false }, + { 11840, true }, { 11866, true }, - { 11880, true }, - { 11904, true }, - { 11913, true }, - { 11926, true }, - { 11939, true }, - { 11953, true }, - { 11964, true }, - { 11973, true }, - { 11986, true }, - { 11999, true }, - { 12011, true }, - { 12032, false }, - { 12050, true }, - { 12073, true }, - { 12100, true }, - { 12119, true }, - { 12139, true }, - { 12150, true }, - { 12167, true }, + { 11879, true }, + { 11893, true }, + { 11912, true }, + { 11933, true }, + { 11945, true }, + { 11959, true }, + { 11983, true }, + { 11992, true }, + { 12005, true }, + { 12018, true }, + { 12032, true }, + { 12043, true }, + { 12052, true }, + { 12065, true }, + { 12078, true }, + { 12090, true }, + { 12111, false }, + { 12129, true }, + { 12152, true }, { 12179, true }, - { 12193, true }, - { 12201, true }, + { 12198, true }, { 12218, true }, - { 12231, true }, - { 12243, true }, - { 12261, true }, - { 12284, false }, - { 12300, true }, - { 12306, true }, - { 12318, true }, - { 12328, true }, + { 12229, true }, + { 12246, true }, + { 12258, true }, + { 12272, true }, + { 12280, true }, + { 12297, true }, + { 12310, true }, + { 12322, true }, { 12340, true }, - { 12351, true }, - { 12361, true }, - { 12378, true }, + { 12363, false }, + { 12379, true }, + { 12385, true }, { 12397, true }, - { 12409, true }, - { 12421, true }, - { 12434, true }, - { 12463, true }, - { 12479, true }, - { 12492, true }, - { 12506, true }, - { 12522, true }, - { 12541, true }, - { 12565, true }, - { 12578, true }, - { 12587, true }, - { 12599, true }, - { 12615, true }, - { 12629, true }, - { 12645, true }, - { 12665, true }, - { 12679, true }, - { 12687, true }, - { 12701, true }, - { 12719, true }, - { 12739, true }, - { 12761, true }, - { 12773, true }, - { 12789, true }, - { 12803, false }, - { 12816, true }, - { 12831, true }, - { 12849, true }, - { 12863, true }, - { 12872, true }, - { 12884, true }, - { 12902, true }, - { 12922, false }, - { 12937, true }, - { 12950, true }, - { 12960, true }, - { 12974, true }, - { 13000, true }, - { 13010, true }, - { 13024, true }, - { 13036, true }, - { 13054, true }, - { 13072, false }, - { 13088, true }, - { 13098, true }, - { 13109, true }, - { 13122, true }, - { 13138, true }, - { 13146, true }, - { 13157, true }, + { 12407, true }, + { 12419, true }, + { 12430, true }, + { 12440, true }, + { 12457, true }, + { 12476, true }, + { 12488, true }, + { 12500, true }, + { 12513, true }, + { 12542, true }, + { 12558, true }, + { 12571, true }, + { 12585, true }, + { 12601, true }, + { 12620, true }, + { 12644, true }, + { 12657, true }, + { 12666, true }, + { 12678, true }, + { 12694, true }, + { 12708, true }, + { 12724, true }, + { 12744, true }, + { 12758, true }, + { 12766, true }, + { 12780, true }, + { 12798, true }, + { 12818, true }, + { 12840, true }, + { 12852, true }, + { 12868, true }, + { 12882, false }, + { 12895, true }, + { 12910, true }, + { 12928, true }, + { 12942, true }, + { 12951, true }, + { 12963, true }, + { 12981, true }, + { 13001, false }, + { 13016, true }, + { 13029, true }, + { 13039, true }, + { 13053, true }, + { 13079, true }, + { 13089, true }, + { 13103, true }, + { 13115, true }, + { 13133, true }, + { 13151, false }, { 13167, true }, - { 13182, true }, + { 13177, true }, + { 13188, true }, { 13201, true }, - { 13214, true }, - { 13232, false }, - { 13247, true }, - { 13267, true }, - { 13278, true }, - { 13290, true }, - { 13303, true }, - { 13323, false }, - { 13337, true }, - { 13350, true }, - { 13368, true }, + { 13217, true }, + { 13225, true }, + { 13236, true }, + { 13246, true }, + { 13261, true }, + { 13280, true }, + { 13293, true }, + { 13311, false }, + { 13326, true }, + { 13346, true }, + { 13357, true }, + { 13369, true }, { 13382, true }, - { 13395, true }, - { 13407, true }, - { 13421, true }, - { 13434, true }, - { 13448, true }, - { 13460, true }, - { 13478, true }, - { 13490, true }, - { 13501, true }, - { 13512, true }, - { 13525, true }, - { 13538, true }, - { 13553, true }, - { 13564, true }, - { 13575, true }, - { 13586, true }, - { 13596, true }, + { 13402, false }, + { 13416, true }, + { 13429, true }, + { 13447, true }, + { 13461, true }, + { 13474, true }, + { 13486, true }, + { 13500, true }, + { 13513, true }, + { 13527, true }, + { 13539, true }, + { 13557, true }, + { 13569, true }, + { 13580, true }, + { 13591, true }, + { 13604, true }, { 13617, true }, - { 13626, true }, - { 13633, true }, - { 13647, false }, - { 13660, true }, - { 13670, true }, - { 13683, true }, + { 13632, true }, + { 13643, true }, + { 13654, true }, + { 13665, true }, + { 13675, true }, { 13696, true }, - { 13708, true }, - { 13725, true }, - { 13736, true }, - { 13750, true }, - { 13760, true }, - { 13778, true }, - { 13788, true }, - { 13800, true }, - { 13814, true }, - { 13831, true }, - { 13845, true }, - { 13855, true }, - { 13871, true }, - { 13882, true }, - { 13899, true }, - { 13911, true }, - { 13933, true }, - { 13959, true }, - { 13974, true }, - { 13987, true }, - { 14005, true }, - { 14016, true }, - { 14026, true }, - { 14036, true }, - { 14055, true }, - { 14075, true }, - { 14087, true }, - { 14101, true }, - { 14108, true }, - { 14118, true }, - { 14128, true }, - { 14150, true }, - { 14162, true }, + { 13705, true }, + { 13712, true }, + { 13726, false }, + { 13739, true }, + { 13749, true }, + { 13762, true }, + { 13775, true }, + { 13787, true }, + { 13804, true }, + { 13815, true }, + { 13829, true }, + { 13839, true }, + { 13857, true }, + { 13867, true }, + { 13879, true }, + { 13893, true }, + { 13910, true }, + { 13924, true }, + { 13934, true }, + { 13950, true }, + { 13961, true }, + { 13978, true }, + { 13990, true }, + { 14012, true }, + { 14038, true }, + { 14053, true }, + { 14066, true }, + { 14084, true }, + { 14095, true }, + { 14105, true }, + { 14115, true }, + { 14134, true }, + { 14154, true }, + { 14166, true }, { 14180, true }, - { 14192, true }, - { 14205, true }, - { 14233, true }, - { 14243, true }, - { 14251, true }, - { 14263, false }, - { 14283, true }, - { 14290, true }, - { 14306, true }, + { 14187, true }, + { 14197, true }, + { 14207, true }, + { 14229, true }, + { 14241, true }, + { 14259, true }, + { 14271, true }, + { 14284, true }, + { 14312, true }, { 14322, true }, - { 14337, true }, - { 14347, true }, - { 14365, true }, - { 14380, true }, - { 14407, true }, - { 14424, true }, - { 14442, true }, - { 14450, true }, - { 14464, true }, - { 14475, true }, - { 14484, true }, - { 14511, true }, - { 14519, true }, + { 14330, true }, + { 14342, false }, + { 14362, true }, + { 14369, true }, + { 14385, true }, + { 14401, true }, + { 14416, true }, + { 14426, true }, + { 14444, true }, + { 14459, true }, + { 14486, true }, + { 14503, true }, + { 14521, true }, { 14529, true }, - { 14545, true }, - { 14557, true }, - { 14572, true }, - { 14584, true }, - { 14599, true }, - { 14614, true }, - { 14626, true }, - { 14647, true }, - { 14664, true }, + { 14543, true }, + { 14554, true }, + { 14563, true }, + { 14590, true }, + { 14598, true }, + { 14608, true }, + { 14624, true }, + { 14636, true }, + { 14651, true }, + { 14663, true }, { 14678, true }, - { 14690, true }, - { 14704, true }, - { 14714, true }, - { 14729, true }, - { 14744, true }, - { 14755, true }, - { 14768, true }, - { 14781, true }, + { 14693, true }, + { 14705, true }, + { 14726, true }, + { 14743, true }, + { 14757, true }, + { 14769, true }, + { 14783, true }, { 14793, true }, - { 14801, true }, - { 14814, true }, - { 14832, true }, - { 14853, true }, - { 14867, true }, - { 14883, true }, - { 14895, true }, - { 14907, true }, - { 14919, true }, - { 14931, true }, - { 14941, true }, - { 14951, true }, + { 14808, true }, + { 14823, true }, + { 14834, true }, + { 14847, true }, + { 14860, true }, + { 14872, true }, + { 14880, true }, + { 14893, true }, + { 14911, true }, + { 14932, true }, + { 14946, true }, { 14962, true }, - { 14977, true }, - { 14990, true }, - { 15009, true }, - { 15035, true }, - { 15047, true }, - { 15063, true }, - { 15075, true }, - { 15091, true }, - { 15110, true }, - { 15123, true }, - { 15134, true }, - { 15145, true }, - { 15163, true }, - { 15193, true }, - { 15216, true }, - { 15229, false }, - { 15237, true }, - { 15249, true }, - { 15259, true }, - { 15269, true }, - { 15283, true }, - { 15299, true }, + { 14974, true }, + { 14986, true }, + { 14998, true }, + { 15010, true }, + { 15020, true }, + { 15030, true }, + { 15041, true }, + { 15056, true }, + { 15069, true }, + { 15088, true }, + { 15114, true }, + { 15126, true }, + { 15142, true }, + { 15154, true }, + { 15170, true }, + { 15189, true }, + { 15202, true }, + { 15213, true }, + { 15224, true }, + { 15242, true }, + { 15272, true }, + { 15295, true }, + { 15308, false }, + { 15316, true }, { 15328, true }, - { 15344, true }, - { 15360, true }, + { 15338, true }, + { 15348, true }, + { 15362, true }, { 15378, true }, - { 15399, true }, - { 15410, true }, - { 15422, true }, - { 15434, true }, - { 15452, true }, - { 15470, true }, - { 15491, true }, - { 15516, true }, - { 15534, true }, - { 15548, true }, - { 15573, true }, - { 15586, true }, - { 15601, true }, - { 15616, true }, - { 15629, true }, - { 15642, true }, - { 15655, true }, - { 15668, true }, - { 15681, true }, - { 15694, true }, - { 15705, true }, - { 15721, true }, - { 15731, true }, - { 15743, true }, - { 15760, true }, - { 15772, true }, - { 15785, true }, - { 15793, true }, - { 15804, true }, - { 15815, true }, + { 15407, true }, + { 15423, true }, + { 15439, true }, + { 15457, true }, + { 15478, true }, + { 15489, true }, + { 15501, true }, + { 15513, true }, + { 15531, true }, + { 15549, true }, + { 15570, true }, + { 15595, true }, + { 15613, true }, + { 15627, true }, + { 15652, true }, + { 15663, true }, + { 15676, true }, + { 15691, true }, + { 15706, true }, + { 15719, true }, + { 15732, true }, + { 15745, true }, + { 15758, true }, + { 15771, true }, + { 15784, true }, + { 15795, true }, + { 15811, true }, + { 15821, true }, { 15833, true }, - { 15848, true }, - { 15866, true }, - { 15876, true }, - { 15886, true }, - { 15895, true }, - { 15917, true }, - { 15931, true }, - { 15942, true }, - { 15950, true }, - { 15960, true }, - { 15972, true }, - { 15980, true }, - { 15990, true }, - { 16005, true }, - { 16025, true }, - { 16033, true }, - { 16058, true }, - { 16074, true }, - { 16098, true }, - { 16105, true }, - { 16113, true }, - { 16122, true }, - { 16129, true }, - { 16141, true }, - { 16152, true }, - { 16163, true }, - { 16175, true }, - { 16187, false }, - { 16196, true }, + { 15850, true }, + { 15862, true }, + { 15875, true }, + { 15883, true }, + { 15894, true }, + { 15905, true }, + { 15923, true }, + { 15938, true }, + { 15956, true }, + { 15966, true }, + { 15976, true }, + { 15985, true }, + { 16007, true }, + { 16021, true }, + { 16032, true }, + { 16040, true }, + { 16050, true }, + { 16062, true }, + { 16070, true }, + { 16080, true }, + { 16095, true }, + { 16115, true }, + { 16123, true }, + { 16148, true }, + { 16164, true }, + { 16188, true }, + { 16195, true }, + { 16203, true }, { 16212, true }, - { 16225, true }, - { 16234, true }, - { 16243, true }, - { 16258, true }, - { 16268, true }, - { 16280, true }, - { 16298, false }, - { 16314, true }, - { 16326, true }, - { 16336, true }, - { 16346, true }, - { 16356, true }, - { 16368, true }, - { 16381, true }, - { 16394, true }, + { 16219, true }, + { 16231, true }, + { 16242, true }, + { 16253, true }, + { 16265, true }, + { 16277, false }, + { 16286, true }, + { 16302, true }, + { 16315, true }, + { 16324, true }, + { 16333, true }, + { 16348, true }, + { 16358, true }, + { 16370, true }, + { 16388, false }, { 16404, true }, - { 16414, true }, - { 16422, true }, - { 16434, true }, + { 16416, true }, + { 16426, true }, + { 16436, true }, { 16446, true }, - { 16459, true }, - { 16475, true }, - { 16491, true }, - { 16502, false }, + { 16458, true }, + { 16471, true }, + { 16484, true }, + { 16494, true }, + { 16504, true }, { 16512, true }, - { 16529, true }, - { 16537, true }, - { 16546, true }, - { 16560, true }, - { 16590, true }, - { 16605, false }, - { 16614, true }, - { 16628, true }, - { 16649, true }, - { 16660, true }, - { 16673, true }, - { 16697, true }, - { 16711, true }, - { 16724, true }, - { 16736, true }, - { 16759, true }, - { 16770, true }, - { 16790, true }, - { 16808, true }, + { 16524, true }, + { 16536, true }, + { 16549, true }, + { 16565, true }, + { 16581, true }, + { 16592, false }, + { 16602, true }, + { 16619, true }, + { 16627, true }, + { 16636, true }, + { 16650, true }, + { 16680, true }, + { 16695, false }, + { 16704, true }, + { 16718, true }, + { 16739, true }, + { 16750, true }, + { 16763, true }, + { 16787, true }, + { 16801, true }, + { 16814, true }, { 16826, true }, - { 16841, true }, - { 16856, true }, + { 16849, true }, + { 16860, true }, { 16880, true }, - { 16890, true }, - { 16900, true }, - { 16910, true }, - { 16923, true }, - { 16934, true }, - { 16959, true }, - { 16988, true }, - { 17001, true }, + { 16898, true }, + { 16916, true }, + { 16931, true }, + { 16946, true }, + { 16970, true }, + { 16980, true }, + { 16990, true }, + { 17000, true }, { 17013, true }, - { 17023, true }, - { 17031, true }, - { 17040, true }, - { 17054, false }, - { 17071, true }, - { 17083, true }, - { 17098, true }, - { 17105, true }, - { 17118, true }, + { 17024, true }, + { 17049, true }, + { 17078, true }, + { 17091, true }, + { 17103, true }, + { 17113, true }, + { 17121, true }, { 17130, true }, - { 17144, true }, - { 17152, true }, - { 17167, true }, - { 17176, true }, - { 17189, true }, - { 17201, true }, - { 17212, true }, - { 17222, true }, - { 17237, true }, - { 17254, true }, - { 17267, true }, - { 17277, true }, - { 17290, true }, - { 17304, true }, - { 17318, true }, - { 17330, true }, - { 17345, true }, - { 17361, true }, - { 17376, true }, - { 17390, true }, - { 17403, true }, - { 17419, true }, - { 17431, true }, - { 17445, true }, - { 17457, true }, - { 17469, true }, + { 17144, false }, + { 17161, true }, + { 17173, true }, + { 17188, true }, + { 17195, true }, + { 17208, true }, + { 17220, true }, + { 17234, true }, + { 17242, true }, + { 17257, true }, + { 17266, true }, + { 17279, true }, + { 17291, true }, + { 17302, true }, + { 17312, true }, + { 17327, true }, + { 17344, true }, + { 17357, true }, + { 17367, true }, + { 17380, true }, + { 17394, true }, + { 17408, true }, + { 17420, true }, + { 17435, true }, + { 17451, true }, + { 17466, true }, { 17480, true }, - { 17491, true }, - { 17506, false }, - { 17521, false }, - { 17537, true }, + { 17493, true }, + { 17509, true }, + { 17521, true }, + { 17535, true }, + { 17547, true }, { 17559, true }, - { 17577, true }, - { 17594, true }, - { 17612, true }, - { 17623, true }, - { 17636, true }, - { 17653, true }, - { 17669, true }, - { 17689, true }, - { 17704, true }, - { 17719, true }, - { 17733, true }, - { 17744, true }, - { 17756, true }, - { 17769, true }, - { 17782, true }, - { 17796, true }, + { 17570, true }, + { 17581, true }, + { 17596, false }, + { 17611, false }, + { 17627, true }, + { 17649, true }, + { 17667, true }, + { 17684, true }, + { 17702, true }, + { 17713, true }, + { 17726, true }, + { 17743, true }, + { 17759, true }, + { 17779, true }, + { 17794, true }, { 17809, true }, - { 17827, true }, - { 17845, true }, - { 17863, true }, - { 17880, true }, - { 17890, true }, - { 17903, true }, - { 17912, true }, - { 17927, true }, - { 17938, false }, - { 17948, true }, - { 17959, true }, - { 17973, true }, - { 17986, true }, - { 17996, true }, - { 18009, true }, - { 18023, true }, - { 18034, true }, - { 18044, true }, - { 18062, true }, - { 18071, true }, - { 18088, true }, - { 18107, true }, - { 18122, true }, - { 18142, true }, - { 18160, true }, - { 18171, true }, - { 18184, true }, - { 18199, true }, + { 17823, true }, + { 17834, true }, + { 17846, true }, + { 17859, true }, + { 17872, true }, + { 17886, true }, + { 17899, true }, + { 17917, true }, + { 17935, true }, + { 17953, true }, + { 17970, true }, + { 17980, true }, + { 17993, true }, + { 18002, true }, + { 18017, true }, + { 18028, false }, + { 18038, true }, + { 18049, true }, + { 18063, true }, + { 18076, true }, + { 18086, true }, + { 18099, true }, + { 18113, true }, + { 18124, true }, + { 18134, true }, + { 18152, true }, + { 18161, true }, + { 18178, true }, + { 18197, true }, { 18212, true }, - { 18223, true }, - { 18237, true }, + { 18232, true }, + { 18250, true }, { 18261, true }, - { 18287, true }, - { 18295, true }, - { 18305, true }, - { 18316, true }, - { 18327, true }, - { 18354, true }, - { 18366, true }, - { 18378, true }, - { 18387, true }, - { 18396, true }, - { 18405, true }, - { 18420, false }, + { 18274, true }, + { 18289, true }, + { 18300, true }, + { 18314, true }, + { 18338, true }, + { 18364, true }, + { 18372, true }, + { 18382, true }, + { 18393, true }, + { 18404, true }, { 18431, true }, - { 18440, true }, - { 18452, true }, - { 18461, true }, - { 18471, true }, + { 18443, true }, + { 18455, true }, + { 18464, true }, + { 18473, true }, { 18482, true }, - { 18494, true }, - { 18504, true }, - { 18516, true }, - { 18530, true }, - { 18540, true }, - { 18550, true }, - { 18563, true }, - { 18573, false }, - { 18584, true }, - { 18602, true }, - { 18612, true }, - { 18619, true }, - { 18631, true }, - { 18646, true }, - { 18667, true }, - { 18680, true }, - { 18693, true }, - { 18710, true }, - { 18722, true }, - { 18735, false }, - { 18749, true }, - { 18761, true }, - { 18775, true }, - { 18793, true }, - { 18805, true }, - { 18818, true }, - { 18827, true }, - { 18845, true }, - { 18856, true }, - { 18867, true }, - { 18892, true }, - { 18906, true }, - { 18919, true }, + { 18497, false }, + { 18508, true }, + { 18517, true }, + { 18529, true }, + { 18538, true }, + { 18548, true }, + { 18559, true }, + { 18571, true }, + { 18581, true }, + { 18593, true }, + { 18607, true }, + { 18617, true }, + { 18627, true }, + { 18640, true }, + { 18650, false }, + { 18661, true }, + { 18679, true }, + { 18689, true }, + { 18696, true }, + { 18708, true }, + { 18723, true }, + { 18744, true }, + { 18757, true }, + { 18770, true }, + { 18787, true }, + { 18799, true }, + { 18812, false }, + { 18826, true }, + { 18838, true }, + { 18852, true }, + { 18870, true }, + { 18882, true }, + { 18895, true }, + { 18904, true }, + { 18922, true }, { 18933, true }, - { 18946, true }, - { 18960, true }, - { 18972, true }, - { 18988, false }, - { 18999, true }, - { 19014, true }, - { 19027, true }, - { 19040, true }, - { 19056, true }, - { 19078, true }, - { 19090, true }, - { 19103, true }, - { 19118, true }, - { 19130, true }, - { 19146, true }, - { 19159, true }, - { 19169, true }, - { 19197, true }, - { 19212, true }, - { 19228, true }, - { 19239, true }, - { 19250, true }, - { 19260, true }, - { 19273, true }, - { 19283, false }, - { 19297, true }, - { 19306, true }, - { 19318, false }, + { 18944, true }, + { 18969, true }, + { 18983, true }, + { 18996, true }, + { 19010, true }, + { 19023, true }, + { 19037, true }, + { 19049, true }, + { 19065, false }, + { 19076, true }, + { 19091, true }, + { 19104, true }, + { 19117, true }, + { 19133, true }, + { 19155, true }, + { 19167, true }, + { 19180, true }, + { 19195, true }, + { 19207, true }, + { 19223, true }, + { 19236, true }, + { 19246, true }, + { 19274, true }, + { 19289, true }, + { 19305, true }, + { 19316, true }, + { 19327, true }, { 19337, true }, - { 19364, true }, - { 19385, true }, - { 19401, true }, - { 19412, true }, - { 19430, true }, - { 19445, true }, - { 19456, true }, - { 19471, false }, - { 19486, true }, - { 19496, true }, + { 19350, true }, + { 19360, false }, + { 19374, true }, + { 19383, true }, + { 19395, false }, + { 19414, true }, + { 19441, true }, + { 19462, true }, + { 19478, true }, + { 19489, true }, { 19507, true }, - { 19521, true }, - { 19543, true }, - { 19556, true }, - { 19571, true }, - { 19586, true }, - { 19607, true }, - { 19617, true }, - { 19631, true }, - { 19644, true }, - { 19659, true }, - { 19680, true }, - { 19698, true }, - { 19710, true }, - { 19728, true }, - { 19746, true }, - { 19760, true }, - { 19779, false }, - { 19793, true }, - { 19803, true }, - { 19814, true }, - { 19824, true }, + { 19522, true }, + { 19533, true }, + { 19548, false }, + { 19563, true }, + { 19573, true }, + { 19584, true }, + { 19598, true }, + { 19620, true }, + { 19633, true }, + { 19648, true }, + { 19663, true }, + { 19684, true }, + { 19694, true }, + { 19708, true }, + { 19721, true }, + { 19736, true }, + { 19757, true }, + { 19775, true }, + { 19787, true }, + { 19805, true }, + { 19823, true }, { 19837, true }, - { 19852, true }, - { 19866, true }, - { 19879, true }, - { 19892, true }, - { 19909, true }, - { 19925, true }, - { 19935, true }, - { 19948, true }, - { 19965, true }, - { 19979, true }, - { 19997, true }, - { 20017, true }, - { 20031, true }, - { 20047, true }, + { 19856, false }, + { 19870, true }, + { 19880, true }, + { 19891, true }, + { 19901, true }, + { 19914, true }, + { 19929, true }, + { 19943, true }, + { 19956, true }, + { 19969, true }, + { 19986, true }, + { 20002, true }, + { 20012, true }, + { 20025, true }, + { 20042, true }, { 20056, true }, - { 20064, true }, - { 20073, true }, - { 20082, true }, - { 20099, true }, - { 20112, true }, - { 20122, true }, - { 20132, true }, - { 20142, true }, - { 20160, true }, - { 20179, true }, - { 20203, true }, - { 20218, true }, - { 20236, true }, - { 20252, true }, - { 20270, true }, - { 20282, true }, - { 20305, true }, - { 20327, true }, - { 20353, true }, - { 20371, true }, - { 20393, true }, - { 20407, true }, - { 20420, true }, - { 20432, true }, - { 20444, true }, - { 20458, true }, - { 20476, true }, - { 20491, true }, - { 20503, true }, - { 20525, true }, - { 20542, true }, - { 20557, true }, - { 20578, true }, - { 20592, true }, - { 20611, true }, - { 20632, true }, - { 20649, true }, - { 20663, true }, - { 20684, true }, - { 20697, true }, - { 20713, true }, - { 20726, true }, - { 20745, true }, - { 20762, true }, - { 20780, true }, - { 20798, true }, - { 20807, true }, - { 20823, true }, - { 20839, true }, - { 20858, true }, - { 20876, true }, - { 20892, true }, - { 20906, true }, - { 20918, true }, - { 20929, true }, - { 20943, true }, - { 20953, true }, - { 20964, true }, - { 20973, false }, - { 20982, true }, - { 20996, true }, - { 21010, true }, - { 21022, true }, - { 21037, true }, - { 21049, true }, - { 21064, true }, - { 21077, true }, - { 21088, true }, - { 21111, true }, - { 21123, true }, - { 21138, true }, - { 21154, true }, - { 21163, true }, - { 21178, true }, + { 20074, true }, + { 20094, true }, + { 20108, true }, + { 20124, true }, + { 20133, true }, + { 20141, true }, + { 20150, true }, + { 20159, true }, + { 20176, true }, + { 20189, true }, + { 20199, true }, + { 20209, true }, + { 20219, true }, + { 20237, true }, + { 20256, true }, + { 20280, true }, + { 20295, true }, + { 20313, true }, + { 20329, true }, + { 20347, true }, + { 20359, true }, + { 20382, true }, + { 20404, true }, + { 20430, true }, + { 20448, true }, + { 20470, true }, + { 20484, true }, + { 20497, true }, + { 20509, true }, + { 20521, true }, + { 20535, true }, + { 20553, true }, + { 20568, true }, + { 20580, true }, + { 20602, true }, + { 20619, true }, + { 20634, true }, + { 20648, true }, + { 20667, true }, + { 20688, true }, + { 20705, true }, + { 20719, true }, + { 20740, true }, + { 20753, true }, + { 20769, true }, + { 20782, true }, + { 20801, true }, + { 20818, true }, + { 20836, true }, + { 20854, true }, + { 20863, true }, + { 20879, true }, + { 20895, true }, + { 20914, true }, + { 20932, true }, + { 20948, true }, + { 20962, true }, + { 20974, true }, + { 20985, true }, + { 20999, true }, + { 21009, true }, + { 21020, true }, + { 21029, false }, + { 21038, true }, + { 21052, true }, + { 21066, true }, + { 21078, true }, + { 21093, true }, + { 21105, true }, + { 21120, true }, + { 21133, true }, + { 21144, true }, + { 21167, true }, + { 21179, true }, { 21194, true }, - { 21207, true }, - { 21222, true }, - { 21235, true }, - { 21245, true }, - { 21265, true }, + { 21210, true }, + { 21219, true }, + { 21234, true }, + { 21250, true }, + { 21263, true }, { 21278, true }, - { 21297, true }, - { 21307, true }, - { 21317, true }, - { 21329, true }, - { 21344, true }, - { 21359, true }, - { 21374, true }, - { 21384, true }, - { 21399, true }, + { 21291, true }, + { 21301, true }, + { 21321, true }, + { 21334, true }, + { 21353, true }, + { 21363, true }, + { 21373, true }, + { 21385, true }, + { 21400, true }, { 21415, true }, - { 21434, true }, - { 21443, true }, - { 21472, true }, - { 21485, true }, - { 21505, true }, - { 21520, true }, - { 21533, true }, - { 21548, true }, - { 21563, true }, - { 21578, true }, - { 21588, true }, - { 21598, true }, - { 21613, true }, - { 21635, true }, - { 21650, true }, - { 21663, true }, - { 21690, true }, - { 21704, true }, - { 21716, true }, - { 21731, true }, - { 21745, true }, - { 21755, true }, - { 21776, true }, - { 21793, true }, - { 21815, true }, - { 21833, false }, - { 21852, true }, - { 21866, true }, - { 21878, true }, - { 21893, true }, - { 21910, true }, - { 21925, true }, - { 21936, true }, - { 21946, true }, - { 21962, true }, - { 21980, true }, + { 21430, true }, + { 21440, true }, + { 21455, true }, + { 21471, true }, + { 21490, true }, + { 21499, true }, + { 21528, true }, + { 21541, true }, + { 21561, true }, + { 21576, true }, + { 21589, true }, + { 21604, true }, + { 21619, true }, + { 21634, true }, + { 21644, true }, + { 21654, true }, + { 21669, true }, + { 21691, true }, + { 21706, true }, + { 21719, true }, + { 21746, true }, + { 21760, true }, + { 21772, true }, + { 21787, true }, + { 21801, true }, + { 21811, true }, + { 21832, true }, + { 21849, true }, + { 21871, true }, + { 21889, false }, + { 21908, true }, + { 21922, true }, + { 21934, true }, + { 21949, true }, + { 21966, true }, + { 21981, true }, { 21992, true }, - { 22004, true }, - { 22034, true }, - { 22048, false }, - { 22061, true }, - { 22079, true }, - { 22092, true }, - { 22104, true }, - { 22127, true }, - { 22146, true }, - { 22159, false }, - { 22170, true }, - { 22188, true }, - { 22212, true }, - { 22232, true }, - { 22244, true }, + { 22002, true }, + { 22018, true }, + { 22036, true }, + { 22048, true }, + { 22060, true }, + { 22090, true }, + { 22104, false }, + { 22117, true }, + { 22135, true }, + { 22148, true }, + { 22160, true }, + { 22183, true }, + { 22202, true }, + { 22215, true }, + { 22223, true }, + { 22241, true }, { 22265, true }, - { 22276, true }, - { 22293, true }, - { 22311, true }, - { 22324, true }, - { 22340, true }, - { 22354, true }, - { 22371, true }, - { 22382, true }, - { 22391, true }, - { 22403, true }, - { 22414, true }, + { 22285, true }, + { 22297, true }, + { 22318, true }, + { 22329, true }, + { 22346, true }, + { 22364, true }, + { 22377, true }, + { 22393, true }, + { 22407, true }, { 22424, true }, - { 22438, true }, + { 22435, true }, + { 22444, true }, { 22456, true }, - { 22469, true }, - { 22480, true }, - { 22494, true }, - { 22506, true }, - { 22517, true }, - { 22528, true }, - { 22541, true }, - { 22553, true }, - { 22564, true }, - { 22583, true }, - { 22599, true }, - { 22613, true }, - { 22632, true }, - { 22644, true }, - { 22659, true }, - { 22668, true }, - { 22683, true }, + { 22467, true }, + { 22477, true }, + { 22491, true }, + { 22509, true }, + { 22522, true }, + { 22533, true }, + { 22547, true }, + { 22559, true }, + { 22570, true }, + { 22581, true }, + { 22594, true }, + { 22606, true }, + { 22617, true }, + { 22636, true }, + { 22652, true }, + { 22666, true }, + { 22685, true }, { 22697, true }, - { 22710, true }, - { 22722, true }, - { 22734, true }, - { 22748, true }, - { 22759, true }, - { 22773, true }, - { 22784, true }, - { 22795, true }, - { 22805, true }, - { 22815, true }, - { 22828, true }, - { 22839, true }, - { 22850, true }, - { 22861, true }, - { 22874, true }, - { 22888, true }, - { 22900, true }, + { 22712, true }, + { 22721, true }, + { 22736, true }, + { 22750, true }, + { 22763, true }, + { 22775, true }, + { 22787, true }, + { 22801, true }, + { 22812, true }, + { 22826, true }, + { 22837, true }, + { 22848, true }, + { 22858, true }, + { 22868, true }, + { 22881, true }, + { 22892, true }, + { 22903, true }, { 22914, true }, - { 22926, true }, - { 22939, true }, - { 22964, true }, - { 22981, true }, + { 22927, true }, + { 22941, true }, + { 22953, true }, + { 22967, true }, + { 22979, true }, { 22992, true }, - { 23003, true }, - { 23022, true }, - { 23038, true }, - { 23048, true }, - { 23059, true }, - { 23071, true }, - { 23086, true }, - { 23105, true }, - { 23122, true }, - { 23140, false }, - { 23148, true }, - { 23161, true }, - { 23173, true }, - { 23185, true }, - { 23199, true }, - { 23212, true }, - { 23225, true }, - { 23241, true }, - { 23255, true }, - { 23272, true }, - { 23289, true }, - { 23302, true }, - { 23315, true }, - { 23328, true }, - { 23341, true }, + { 23017, true }, + { 23029, true }, + { 23046, true }, + { 23057, true }, + { 23068, true }, + { 23087, true }, + { 23103, true }, + { 23113, true }, + { 23124, true }, + { 23136, true }, + { 23151, true }, + { 23170, true }, + { 23187, true }, + { 23205, false }, + { 23213, true }, + { 23226, true }, + { 23238, true }, + { 23250, true }, + { 23264, true }, + { 23277, true }, + { 23290, true }, + { 23306, true }, + { 23320, true }, + { 23337, true }, { 23354, true }, { 23367, true }, { 23380, true }, @@ -17747,8311 +17753,8310 @@ static const nsSTSPreload kSTSPreloadList[] = { { 23445, true }, { 23458, true }, { 23471, true }, - { 23488, true }, - { 23503, true }, - { 23520, true }, - { 23533, true }, - { 23545, true }, - { 23567, true }, - { 23579, true }, - { 23602, true }, - { 23626, true }, + { 23484, true }, + { 23497, true }, + { 23510, true }, + { 23523, true }, + { 23536, true }, + { 23553, true }, + { 23568, true }, + { 23585, true }, + { 23598, true }, + { 23610, true }, + { 23632, true }, { 23644, true }, - { 23657, true }, - { 23676, true }, - { 23697, true }, - { 23710, true }, - { 23725, true }, - { 23743, true }, - { 23759, true }, + { 23667, true }, + { 23691, true }, + { 23709, true }, + { 23722, true }, + { 23741, true }, + { 23762, true }, { 23775, true }, - { 23785, true }, - { 23799, true }, - { 23814, true }, - { 23833, true }, + { 23790, true }, + { 23808, true }, + { 23824, true }, + { 23840, true }, { 23850, true }, - { 23861, true }, - { 23877, true }, - { 23889, true }, - { 23899, true }, + { 23864, true }, + { 23879, true }, + { 23898, true }, { 23915, true }, - { 23925, true }, - { 23946, true }, - { 23968, true }, + { 23926, true }, + { 23942, true }, + { 23954, true }, + { 23964, true }, { 23980, true }, - { 23991, true }, - { 24006, true }, - { 24017, true }, - { 24032, true }, - { 24047, true }, - { 24059, true }, - { 24078, true }, - { 24091, true }, - { 24105, true }, - { 24127, true }, - { 24146, true }, - { 24166, true }, - { 24174, true }, - { 24187, true }, - { 24201, true }, - { 24215, true }, - { 24226, true }, + { 23990, true }, + { 24011, true }, + { 24033, true }, + { 24045, true }, + { 24056, true }, + { 24071, true }, + { 24082, true }, + { 24097, true }, + { 24112, true }, + { 24124, true }, + { 24143, true }, + { 24156, true }, + { 24170, true }, + { 24192, true }, + { 24211, true }, + { 24231, true }, { 24239, true }, - { 24254, true }, - { 24270, true }, - { 24285, true }, - { 24299, true }, - { 24311, true }, - { 24328, false }, - { 24344, false }, + { 24252, true }, + { 24266, true }, + { 24280, true }, + { 24291, true }, + { 24304, true }, + { 24319, true }, + { 24335, true }, + { 24350, true }, { 24364, true }, - { 24377, true }, - { 24393, true }, - { 24418, true }, - { 24431, true }, - { 24444, true }, - { 24455, true }, - { 24464, true }, - { 24473, true }, - { 24489, true }, - { 24503, true }, - { 24519, true }, - { 24530, true }, - { 24543, true }, - { 24558, true }, - { 24572, true }, + { 24376, true }, + { 24393, false }, + { 24409, false }, + { 24429, true }, + { 24442, true }, + { 24458, true }, + { 24483, true }, + { 24496, true }, + { 24509, true }, + { 24520, true }, + { 24529, true }, + { 24538, true }, + { 24554, true }, + { 24568, true }, { 24584, true }, + { 24595, true }, { 24608, true }, - { 24621, true }, - { 24634, true }, - { 24655, true }, - { 24675, true }, - { 24689, true }, - { 24704, true }, - { 24713, true }, - { 24724, true }, - { 24734, true }, - { 24744, true }, - { 24762, true }, - { 24787, true }, + { 24623, true }, + { 24637, true }, + { 24649, true }, + { 24673, true }, + { 24686, true }, + { 24699, true }, + { 24720, true }, + { 24740, true }, + { 24754, true }, + { 24769, true }, + { 24778, true }, + { 24789, true }, + { 24799, true }, { 24809, true }, - { 24821, true }, - { 24834, true }, - { 24847, true }, - { 24858, true }, - { 24866, true }, - { 24885, true }, - { 24895, true }, - { 24908, true }, - { 24925, true }, - { 24942, true }, - { 24958, true }, - { 24970, true }, - { 24982, true }, - { 24993, true }, + { 24827, true }, + { 24852, true }, + { 24874, true }, + { 24886, true }, + { 24899, true }, + { 24912, true }, + { 24923, true }, + { 24931, true }, + { 24950, true }, + { 24960, true }, + { 24973, true }, + { 24990, true }, { 25007, true }, - { 25031, true }, - { 25046, true }, - { 25061, true }, - { 25083, true }, - { 25093, true }, - { 25109, true }, - { 25120, true }, - { 25141, true }, - { 25154, true }, + { 25023, true }, + { 25035, true }, + { 25047, true }, + { 25058, true }, + { 25072, true }, + { 25096, true }, + { 25111, true }, + { 25126, true }, + { 25148, true }, + { 25158, true }, { 25174, true }, { 25185, true }, - { 25193, false }, - { 25205, true }, - { 25217, true }, - { 25236, true }, - { 25250, true }, - { 25265, true }, - { 25280, true }, - { 25295, true }, - { 25310, true }, - { 25320, true }, - { 25330, true }, - { 25342, false }, - { 25351, true }, - { 25365, true }, - { 25377, true }, + { 25206, true }, + { 25226, true }, + { 25237, true }, + { 25245, false }, + { 25257, true }, + { 25269, true }, + { 25288, true }, + { 25302, true }, + { 25317, true }, + { 25332, true }, + { 25347, true }, + { 25362, true }, + { 25372, true }, + { 25382, true }, + { 25394, false }, { 25403, true }, - { 25411, true }, - { 25426, true }, - { 25438, true }, - { 25450, true }, - { 25468, true }, - { 25488, true }, - { 25504, true }, - { 25516, true }, - { 25534, true }, - { 25546, true }, - { 25560, true }, - { 25580, true }, - { 25592, true }, - { 25606, true }, - { 25623, true }, + { 25417, true }, + { 25429, true }, + { 25455, true }, + { 25463, true }, + { 25478, true }, + { 25490, true }, + { 25502, true }, + { 25520, true }, + { 25540, true }, + { 25556, true }, + { 25568, true }, + { 25586, true }, + { 25598, true }, + { 25612, true }, { 25632, true }, - { 25642, true }, - { 25654, true }, - { 25676, false }, - { 25690, true }, - { 25706, true }, - { 25723, true }, - { 25735, true }, - { 25753, false }, - { 25775, false }, - { 25800, false }, - { 25824, true }, - { 25836, true }, - { 25846, true }, - { 25859, true }, - { 25869, true }, + { 25644, true }, + { 25658, true }, + { 25675, true }, + { 25685, true }, + { 25697, true }, + { 25719, false }, + { 25733, true }, + { 25749, true }, + { 25766, true }, + { 25778, true }, + { 25796, false }, + { 25818, false }, + { 25843, false }, + { 25867, true }, { 25879, true }, { 25889, true }, - { 25899, true }, - { 25909, true }, - { 25919, true }, - { 25929, true }, - { 25943, true }, - { 25961, true }, - { 25976, true }, - { 25990, true }, - { 26002, true }, - { 26014, true }, - { 26025, true }, - { 26039, true }, - { 26054, true }, + { 25902, true }, + { 25912, true }, + { 25922, true }, + { 25932, true }, + { 25942, true }, + { 25952, true }, + { 25962, true }, + { 25972, true }, + { 25986, true }, + { 26004, true }, + { 26019, true }, + { 26033, true }, + { 26045, true }, + { 26057, true }, { 26068, true }, - { 26075, true }, - { 26089, false }, - { 26109, true }, - { 26130, true }, - { 26149, true }, - { 26164, true }, - { 26176, true }, - { 26201, true }, - { 26212, true }, - { 26223, true }, - { 26235, true }, - { 26248, false }, - { 26261, true }, + { 26082, true }, + { 26097, true }, + { 26111, true }, + { 26118, true }, + { 26132, false }, + { 26152, true }, + { 26173, true }, + { 26192, true }, + { 26207, true }, + { 26219, true }, + { 26244, true }, + { 26255, true }, + { 26266, true }, { 26278, true }, - { 26294, true }, - { 26307, true }, - { 26319, true }, - { 26334, true }, - { 26344, true }, - { 26369, true }, - { 26385, true }, - { 26399, true }, - { 26416, true }, - { 26435, true }, - { 26445, true }, - { 26465, true }, - { 26477, true }, - { 26493, true }, - { 26521, false }, - { 26533, true }, - { 26546, true }, - { 26563, true }, - { 26580, true }, + { 26291, false }, + { 26304, true }, + { 26321, true }, + { 26337, true }, + { 26350, true }, + { 26362, true }, + { 26377, true }, + { 26387, true }, + { 26412, true }, + { 26428, true }, + { 26442, true }, + { 26459, true }, + { 26478, true }, + { 26488, true }, + { 26508, true }, + { 26520, true }, + { 26536, true }, + { 26564, false }, + { 26576, true }, { 26589, true }, - { 26599, true }, - { 26608, true }, - { 26625, true }, - { 26634, true }, - { 26641, true }, - { 26656, true }, - { 26667, false }, - { 26683, true }, - { 26700, true }, - { 26714, true }, - { 26724, true }, - { 26734, true }, - { 26754, true }, - { 26774, true }, - { 26785, true }, - { 26803, true }, - { 26818, true }, - { 26831, true }, + { 26606, true }, + { 26623, true }, + { 26632, true }, + { 26642, true }, + { 26651, true }, + { 26668, true }, + { 26677, true }, + { 26684, true }, + { 26699, true }, + { 26710, false }, + { 26726, true }, + { 26743, true }, + { 26757, true }, + { 26767, true }, + { 26777, true }, + { 26797, true }, + { 26817, true }, + { 26828, true }, { 26846, true }, - { 26862, true }, - { 26888, true }, + { 26861, true }, + { 26874, true }, + { 26889, true }, { 26905, true }, - { 26918, true }, - { 26941, true }, - { 26955, true }, - { 26967, true }, - { 26977, true }, - { 27002, true }, - { 27019, false }, - { 27040, false }, + { 26931, true }, + { 26948, true }, + { 26961, true }, + { 26984, true }, + { 26998, true }, + { 27010, true }, + { 27020, true }, + { 27045, true }, { 27062, false }, - { 27081, false }, - { 27099, true }, - { 27115, true }, - { 27139, true }, - { 27167, true }, - { 27178, true }, - { 27193, true }, - { 27212, true }, - { 27235, true }, - { 27259, true }, - { 27273, true }, - { 27284, true }, - { 27306, true }, - { 27324, true }, - { 27339, true }, - { 27354, true }, - { 27367, true }, - { 27380, true }, - { 27395, true }, - { 27410, true }, - { 27425, true }, + { 27083, false }, + { 27105, false }, + { 27124, false }, + { 27142, true }, + { 27166, true }, + { 27194, true }, + { 27205, true }, + { 27220, true }, + { 27239, true }, + { 27262, true }, + { 27286, true }, + { 27300, true }, + { 27311, true }, + { 27333, true }, + { 27351, true }, + { 27366, true }, + { 27381, true }, + { 27394, true }, + { 27407, true }, + { 27422, true }, + { 27437, true }, { 27452, true }, - { 27464, true }, { 27479, true }, - { 27498, true }, - { 27516, true }, - { 27524, true }, - { 27532, true }, - { 27544, true }, - { 27556, true }, - { 27570, true }, - { 27588, true }, - { 27606, true }, - { 27621, true }, - { 27636, true }, - { 27651, true }, - { 27667, true }, - { 27684, true }, - { 27693, true }, - { 27704, true }, - { 27717, true }, - { 27727, true }, - { 27740, false }, + { 27491, true }, + { 27506, true }, + { 27525, true }, + { 27543, true }, + { 27551, true }, + { 27559, true }, + { 27571, true }, + { 27583, true }, + { 27597, true }, + { 27615, true }, + { 27633, true }, + { 27648, true }, + { 27663, true }, + { 27678, true }, + { 27694, true }, + { 27711, true }, + { 27720, true }, + { 27731, true }, + { 27744, true }, { 27754, true }, - { 27766, true }, - { 27776, true }, - { 27792, false }, - { 27799, true }, - { 27809, true }, - { 27823, true }, - { 27838, true }, - { 27846, true }, - { 27859, true }, - { 27867, true }, - { 27877, true }, - { 27895, true }, - { 27913, true }, - { 27924, true }, - { 27937, true }, - { 27950, true }, + { 27767, false }, + { 27781, true }, + { 27793, true }, + { 27803, true }, + { 27819, false }, + { 27826, true }, + { 27836, true }, + { 27850, true }, + { 27865, true }, + { 27873, true }, + { 27886, true }, + { 27894, true }, + { 27904, true }, + { 27922, true }, + { 27940, true }, + { 27951, true }, { 27964, true }, - { 27973, true }, - { 27988, true }, - { 28017, true }, - { 28034, true }, - { 28052, true }, - { 28062, true }, - { 28076, true }, - { 28087, true }, + { 27977, true }, + { 27991, true }, + { 28000, true }, + { 28015, true }, + { 28044, true }, + { 28061, true }, + { 28079, true }, + { 28089, true }, + { 28103, true }, { 28114, true }, - { 28134, true }, - { 28151, true }, - { 28165, true }, - { 28187, true }, - { 28212, true }, - { 28225, true }, - { 28238, true }, - { 28255, true }, - { 28273, true }, - { 28288, true }, - { 28303, true }, - { 28314, true }, - { 28324, true }, - { 28345, true }, - { 28355, false }, - { 28374, true }, - { 28386, true }, - { 28415, true }, - { 28433, true }, - { 28451, true }, - { 28469, true }, - { 28490, true }, - { 28504, true }, - { 28518, true }, - { 28526, true }, - { 28536, true }, - { 28549, true }, - { 28561, true }, - { 28573, true }, - { 28589, true }, - { 28603, true }, - { 28625, true }, - { 28644, true }, - { 28657, true }, - { 28670, true }, - { 28689, true }, - { 28704, true }, - { 28722, true }, - { 28735, false }, - { 28745, true }, - { 28767, true }, - { 28781, true }, - { 28804, true }, - { 28820, true }, - { 28835, true }, - { 28851, true }, - { 28868, true }, - { 28879, false }, - { 28887, true }, - { 28903, true }, - { 28923, true }, - { 28937, true }, - { 28952, true }, - { 28960, true }, - { 28975, true }, - { 28988, true }, - { 29000, true }, - { 29013, true }, - { 29026, false }, - { 29048, true }, - { 29072, true }, - { 29095, true }, - { 29113, true }, - { 29128, true }, + { 28141, true }, + { 28161, true }, + { 28178, true }, + { 28192, true }, + { 28214, true }, + { 28239, true }, + { 28252, true }, + { 28265, true }, + { 28282, true }, + { 28300, true }, + { 28315, true }, + { 28330, true }, + { 28341, true }, + { 28351, true }, + { 28372, true }, + { 28382, false }, + { 28401, true }, + { 28413, true }, + { 28442, true }, + { 28460, true }, + { 28478, true }, + { 28496, true }, + { 28517, true }, + { 28531, true }, + { 28545, true }, + { 28553, true }, + { 28563, true }, + { 28576, true }, + { 28588, true }, + { 28600, true }, + { 28616, true }, + { 28630, true }, + { 28652, true }, + { 28671, true }, + { 28684, true }, + { 28697, true }, + { 28716, true }, + { 28731, true }, + { 28749, true }, + { 28762, false }, + { 28772, true }, + { 28794, true }, + { 28808, true }, + { 28831, true }, + { 28847, true }, + { 28862, true }, + { 28878, true }, + { 28895, true }, + { 28906, false }, + { 28914, true }, + { 28930, true }, + { 28950, true }, + { 28964, true }, + { 28979, true }, + { 28987, true }, + { 29002, true }, + { 29015, true }, + { 29027, true }, + { 29040, true }, + { 29053, false }, + { 29075, true }, + { 29099, true }, + { 29122, true }, + { 29140, true }, { 29155, true }, - { 29181, true }, + { 29182, true }, { 29208, true }, - { 29224, true }, - { 29242, true }, - { 29271, true }, - { 29287, true }, - { 29303, true }, - { 29315, true }, - { 29328, true }, - { 29339, true }, - { 29357, true }, - { 29370, true }, - { 29379, true }, - { 29388, true }, - { 29405, true }, - { 29418, true }, - { 29427, true }, - { 29444, true }, - { 29452, true }, - { 29461, true }, - { 29470, false }, - { 29481, true }, - { 29505, true }, - { 29515, true }, - { 29525, true }, - { 29534, true }, - { 29547, true }, - { 29560, true }, - { 29572, true }, - { 29586, true }, - { 29600, true }, - { 29618, true }, - { 29633, true }, - { 29647, true }, - { 29659, true }, - { 29675, true }, - { 29688, true }, - { 29703, true }, + { 29235, true }, + { 29251, true }, + { 29269, true }, + { 29298, true }, + { 29314, true }, + { 29330, true }, + { 29342, true }, + { 29355, true }, + { 29366, true }, + { 29384, true }, + { 29397, true }, + { 29406, true }, + { 29415, true }, + { 29432, true }, + { 29445, true }, + { 29454, true }, + { 29471, true }, + { 29479, true }, + { 29488, true }, + { 29497, false }, + { 29508, true }, + { 29532, true }, + { 29542, true }, + { 29552, true }, + { 29561, true }, + { 29574, true }, + { 29587, true }, + { 29599, true }, + { 29613, true }, + { 29627, true }, + { 29645, true }, + { 29660, true }, + { 29674, true }, + { 29686, true }, + { 29702, true }, { 29715, true }, { 29730, true }, - { 29744, true }, - { 29759, true }, - { 29774, true }, - { 29789, true }, - { 29798, true }, - { 29807, true }, - { 29821, true }, - { 29830, true }, - { 29844, true }, - { 29854, true }, - { 29867, true }, - { 29877, true }, - { 29887, true }, - { 29902, true }, - { 29917, true }, - { 29931, true }, - { 29946, true }, - { 29965, true }, - { 29981, true }, - { 29995, true }, - { 30011, true }, + { 29742, true }, + { 29757, true }, + { 29771, true }, + { 29786, true }, + { 29801, true }, + { 29816, true }, + { 29825, true }, + { 29834, true }, + { 29848, true }, + { 29857, true }, + { 29871, true }, + { 29881, true }, + { 29894, true }, + { 29904, true }, + { 29914, true }, + { 29929, true }, + { 29944, true }, + { 29958, true }, + { 29973, true }, + { 29992, true }, + { 30008, true }, { 30022, true }, - { 30036, true }, - { 30046, true }, - { 30057, true }, + { 30038, true }, + { 30049, true }, + { 30063, true }, { 30073, true }, - { 30085, true }, - { 30101, true }, - { 30115, true }, - { 30120, true }, - { 30131, true }, - { 30139, true }, + { 30084, true }, + { 30100, true }, + { 30112, true }, + { 30128, true }, + { 30142, true }, { 30147, true }, - { 30154, true }, - { 30160, true }, - { 30170, true }, - { 30179, true }, - { 30189, true }, - { 30218, true }, - { 30233, false }, - { 30253, true }, - { 30263, true }, - { 30276, true }, - { 30294, true }, - { 30307, true }, - { 30327, true }, - { 30343, true }, - { 30355, true }, - { 30367, true }, - { 30380, true }, - { 30391, true }, - { 30402, true }, - { 30416, true }, - { 30434, true }, - { 30447, true }, - { 30460, true }, - { 30476, true }, - { 30496, true }, - { 30516, true }, - { 30524, true }, - { 30535, false }, - { 30545, true }, - { 30557, true }, - { 30566, true }, - { 30580, true }, - { 30599, true }, + { 30158, true }, + { 30166, true }, + { 30174, true }, + { 30181, true }, + { 30187, true }, + { 30197, true }, + { 30206, true }, + { 30216, true }, + { 30245, true }, + { 30260, false }, + { 30280, true }, + { 30290, true }, + { 30303, true }, + { 30321, true }, + { 30334, true }, + { 30354, true }, + { 30370, true }, + { 30382, true }, + { 30394, true }, + { 30407, true }, + { 30418, true }, + { 30429, true }, + { 30443, true }, + { 30461, true }, + { 30474, true }, + { 30487, true }, + { 30503, true }, + { 30523, true }, + { 30543, true }, + { 30551, true }, + { 30562, false }, + { 30572, true }, + { 30584, true }, + { 30593, true }, { 30607, true }, - { 30631, true }, - { 30650, true }, - { 30664, false }, - { 30680, true }, - { 30691, true }, - { 30703, false }, + { 30626, true }, + { 30634, true }, + { 30658, true }, + { 30677, true }, + { 30691, false }, + { 30707, true }, { 30718, true }, - { 30730, true }, - { 30749, false }, + { 30730, false }, + { 30745, true }, { 30757, true }, - { 30769, true }, - { 30783, true }, - { 30795, true }, - { 30806, true }, - { 30820, true }, + { 30776, false }, + { 30784, true }, + { 30796, true }, + { 30810, true }, + { 30822, true }, { 30833, true }, - { 30845, true }, - { 30858, true }, - { 30878, true }, - { 30888, true }, - { 30907, true }, - { 30919, true }, - { 30930, true }, - { 30942, true }, - { 30959, true }, - { 30982, true }, - { 31005, true }, - { 31016, true }, - { 31028, true }, + { 30847, true }, + { 30860, true }, + { 30872, true }, + { 30885, true }, + { 30905, true }, + { 30915, true }, + { 30934, true }, + { 30946, true }, + { 30957, true }, + { 30969, true }, + { 30986, true }, + { 31009, true }, + { 31032, true }, { 31043, true }, - { 31054, true }, + { 31055, true }, { 31070, true }, - { 31086, true }, - { 31104, false }, - { 31127, true }, - { 31147, true }, - { 31161, true }, - { 31176, true }, - { 31199, true }, - { 31218, true }, - { 31233, true }, - { 31251, true }, - { 31268, true }, - { 31294, true }, - { 31313, true }, - { 31329, true }, - { 31343, true }, - { 31364, true }, - { 31380, true }, - { 31405, true }, - { 31419, true }, - { 31437, true }, + { 31081, true }, + { 31097, true }, + { 31113, true }, + { 31131, false }, + { 31154, true }, + { 31174, true }, + { 31188, true }, + { 31203, true }, + { 31226, true }, + { 31245, true }, + { 31260, true }, + { 31278, true }, + { 31295, true }, + { 31321, true }, + { 31340, true }, + { 31356, true }, + { 31370, true }, + { 31391, true }, + { 31407, true }, + { 31432, true }, { 31446, true }, - { 31458, false }, - { 31469, true }, - { 31482, true }, - { 31494, true }, - { 31517, true }, - { 31529, true }, + { 31464, true }, + { 31473, true }, + { 31485, false }, + { 31496, true }, + { 31509, true }, + { 31521, true }, { 31544, true }, - { 31557, true }, + { 31556, true }, { 31571, true }, - { 31581, true }, - { 31594, true }, - { 31602, true }, - { 31609, true }, - { 31634, true }, - { 31660, true }, - { 31672, true }, - { 31684, true }, + { 31584, true }, + { 31598, true }, + { 31608, true }, + { 31621, true }, + { 31629, true }, + { 31636, true }, + { 31661, true }, + { 31687, true }, { 31699, true }, - { 31725, true }, - { 31747, true }, - { 31761, true }, - { 31773, true }, - { 31783, true }, - { 31796, true }, - { 31804, true }, - { 31818, true }, - { 31842, true }, - { 31856, true }, - { 31880, true }, - { 31891, true }, - { 31908, true }, - { 31917, true }, - { 31932, true }, - { 31954, true }, - { 31977, true }, - { 32001, true }, - { 32024, true }, - { 32037, true }, - { 32055, false }, - { 32086, false }, - { 32101, true }, - { 32113, true }, - { 32126, true }, - { 32146, true }, - { 32161, true }, - { 32177, true }, + { 31711, true }, + { 31726, true }, + { 31752, true }, + { 31774, true }, + { 31788, true }, + { 31800, true }, + { 31810, true }, + { 31823, true }, + { 31831, true }, + { 31845, true }, + { 31869, true }, + { 31883, true }, + { 31907, true }, + { 31918, true }, + { 31935, true }, + { 31944, true }, + { 31959, true }, + { 31981, true }, + { 32004, true }, + { 32028, true }, + { 32051, true }, + { 32064, true }, + { 32082, false }, + { 32113, false }, + { 32128, true }, + { 32140, true }, + { 32153, true }, + { 32173, true }, { 32188, true }, { 32204, true }, { 32215, true }, - { 32229, true }, - { 32239, true }, - { 32248, false }, - { 32261, true }, - { 32278, true }, - { 32297, true }, - { 32311, true }, - { 32325, true }, - { 32337, true }, - { 32356, true }, - { 32369, true }, - { 32386, true }, - { 32395, true }, - { 32415, true }, - { 32437, true }, - { 32450, true }, - { 32471, true }, - { 32482, true }, - { 32496, true }, - { 32512, true }, + { 32231, true }, + { 32242, true }, + { 32256, true }, + { 32266, true }, + { 32275, false }, + { 32288, true }, + { 32305, true }, + { 32324, true }, + { 32338, true }, + { 32352, true }, + { 32364, true }, + { 32383, true }, + { 32396, true }, + { 32413, true }, + { 32422, true }, + { 32442, true }, + { 32464, true }, + { 32477, true }, + { 32498, true }, + { 32509, true }, { 32523, true }, { 32539, true }, - { 32556, true }, - { 32565, true }, - { 32580, true }, - { 32594, true }, - { 32615, true }, - { 32632, true }, - { 32648, true }, - { 32661, true }, - { 32674, true }, - { 32686, true }, - { 32694, true }, - { 32707, true }, - { 32720, true }, - { 32732, true }, - { 32751, true }, - { 32766, true }, - { 32782, true }, - { 32803, true }, - { 32821, true }, - { 32832, true }, - { 32840, false }, - { 32863, true }, - { 32880, true }, - { 32897, true }, - { 32910, true }, - { 32927, true }, - { 32938, true }, - { 32950, false }, - { 32960, true }, - { 32976, false }, + { 32550, true }, + { 32566, true }, + { 32583, true }, + { 32592, true }, + { 32607, true }, + { 32621, true }, + { 32642, true }, + { 32659, true }, + { 32675, true }, + { 32688, true }, + { 32701, true }, + { 32713, true }, + { 32721, true }, + { 32734, true }, + { 32747, true }, + { 32759, true }, + { 32778, true }, + { 32793, true }, + { 32809, true }, + { 32830, true }, + { 32848, true }, + { 32859, true }, + { 32867, false }, + { 32890, true }, + { 32907, true }, + { 32924, true }, + { 32937, true }, + { 32954, true }, + { 32965, true }, + { 32977, false }, { 32987, true }, - { 33002, true }, - { 33011, true }, - { 33024, true }, - { 33058, true }, - { 33076, true }, - { 33094, true }, - { 33105, true }, - { 33115, true }, - { 33126, true }, - { 33138, true }, - { 33164, true }, - { 33181, true }, - { 33190, true }, - { 33206, true }, - { 33216, true }, - { 33224, false }, - { 33232, true }, - { 33242, true }, - { 33255, true }, - { 33265, true }, - { 33280, true }, - { 33294, true }, - { 33308, true }, - { 33318, true }, - { 33326, true }, - { 33340, true }, - { 33361, true }, - { 33375, true }, - { 33391, true }, - { 33398, true }, - { 33408, true }, - { 33423, true }, - { 33434, false }, - { 33447, true }, - { 33463, true }, - { 33481, true }, - { 33497, true }, + { 33003, false }, + { 33014, true }, + { 33029, true }, + { 33038, true }, + { 33051, true }, + { 33085, true }, + { 33103, true }, + { 33121, true }, + { 33132, true }, + { 33142, true }, + { 33153, true }, + { 33165, true }, + { 33191, true }, + { 33208, true }, + { 33217, true }, + { 33233, true }, + { 33243, true }, + { 33251, false }, + { 33259, true }, + { 33269, true }, + { 33282, true }, + { 33292, true }, + { 33307, true }, + { 33321, true }, + { 33335, true }, + { 33345, true }, + { 33353, true }, + { 33367, true }, + { 33388, true }, + { 33402, true }, + { 33418, true }, + { 33425, true }, + { 33435, true }, + { 33450, true }, + { 33461, false }, + { 33474, true }, + { 33490, true }, { 33508, true }, - { 33526, true }, - { 33548, false }, - { 33565, true }, - { 33577, true }, - { 33593, true }, - { 33609, true }, - { 33625, true }, - { 33644, true }, - { 33661, true }, - { 33676, true }, - { 33695, true }, - { 33710, true }, - { 33725, true }, - { 33746, true }, - { 33764, true }, - { 33777, true }, - { 33790, true }, + { 33524, true }, + { 33535, true }, + { 33553, true }, + { 33575, false }, + { 33592, true }, + { 33604, true }, + { 33620, true }, + { 33636, true }, + { 33652, true }, + { 33671, true }, + { 33688, true }, + { 33703, true }, + { 33722, true }, + { 33737, true }, + { 33752, true }, + { 33773, true }, + { 33791, true }, { 33804, true }, - { 33823, true }, - { 33841, true }, - { 33856, true }, - { 33870, true }, + { 33817, true }, + { 33831, true }, + { 33850, true }, + { 33868, true }, { 33883, true }, - { 33894, true }, - { 33904, true }, + { 33897, true }, + { 33910, true }, { 33921, true }, - { 33937, true }, - { 33953, true }, - { 33968, true }, - { 33978, true }, - { 33993, true }, + { 33931, true }, + { 33948, true }, + { 33964, true }, + { 33980, true }, + { 33995, true }, { 34005, true }, - { 34016, true }, - { 34028, false }, - { 34036, true }, - { 34057, true }, - { 34065, true }, - { 34076, true }, - { 34089, true }, - { 34097, true }, - { 34105, true }, - { 34123, true }, - { 34137, true }, - { 34151, true }, - { 34159, true }, - { 34167, true }, - { 34177, true }, - { 34191, true }, - { 34211, true }, - { 34219, true }, - { 34228, false }, - { 34248, true }, - { 34266, true }, - { 34277, true }, - { 34295, true }, - { 34313, true }, - { 34325, true }, - { 34337, true }, - { 34353, true }, - { 34369, true }, - { 34383, true }, - { 34400, true }, - { 34413, true }, - { 34430, true }, - { 34443, true }, + { 34020, true }, + { 34032, true }, + { 34043, true }, + { 34055, false }, + { 34063, true }, + { 34084, true }, + { 34092, true }, + { 34103, true }, + { 34116, true }, + { 34124, true }, + { 34132, true }, + { 34150, true }, + { 34164, true }, + { 34178, true }, + { 34186, true }, + { 34194, true }, + { 34204, true }, + { 34218, true }, + { 34238, true }, + { 34246, true }, + { 34255, false }, + { 34275, true }, + { 34293, true }, + { 34304, true }, + { 34322, true }, + { 34340, true }, + { 34352, true }, + { 34364, true }, + { 34380, true }, + { 34396, true }, + { 34410, true }, + { 34427, true }, + { 34440, true }, { 34457, true }, { 34470, true }, { 34484, true }, - { 34503, true }, - { 34513, true }, - { 34533, true }, - { 34542, true }, - { 34562, true }, - { 34579, true }, - { 34599, true }, - { 34613, true }, - { 34633, true }, - { 34651, true }, - { 34686, true }, - { 34700, true }, - { 34718, true }, - { 34728, true }, - { 34758, true }, - { 34773, true }, - { 34786, true }, - { 34799, true }, + { 34497, true }, + { 34511, true }, + { 34530, true }, + { 34540, true }, + { 34560, true }, + { 34569, true }, + { 34589, true }, + { 34606, true }, + { 34626, true }, + { 34640, true }, + { 34660, true }, + { 34678, true }, + { 34713, true }, + { 34727, true }, + { 34745, true }, + { 34755, true }, + { 34785, true }, + { 34800, true }, { 34813, true }, - { 34828, true }, - { 34848, true }, - { 34865, true }, - { 34876, true }, - { 34886, false }, - { 34897, true }, - { 34905, true }, - { 34926, true }, - { 34947, true }, - { 34968, false }, - { 34984, true }, - { 34997, true }, - { 35012, true }, - { 35024, false }, - { 35045, true }, - { 35065, true }, - { 35087, true }, - { 35101, true }, - { 35119, true }, - { 35139, true }, - { 35155, true }, - { 35169, true }, - { 35185, true }, - { 35203, true }, - { 35214, true }, - { 35225, true }, - { 35238, true }, - { 35251, true }, + { 34826, true }, + { 34840, true }, + { 34855, true }, + { 34875, true }, + { 34892, true }, + { 34903, true }, + { 34913, false }, + { 34924, true }, + { 34932, true }, + { 34953, true }, + { 34974, true }, + { 34995, false }, + { 35011, true }, + { 35024, true }, + { 35039, true }, + { 35051, false }, + { 35072, true }, + { 35092, true }, + { 35114, true }, + { 35128, true }, + { 35146, true }, + { 35166, true }, + { 35182, true }, + { 35196, true }, + { 35212, true }, + { 35230, true }, + { 35241, true }, + { 35252, true }, { 35265, true }, - { 35280, true }, - { 35299, true }, - { 35315, true }, - { 35327, true }, - { 35337, true }, - { 35348, false }, - { 35370, true }, - { 35378, true }, - { 35393, true }, - { 35410, true }, - { 35424, true }, - { 35441, true }, - { 35456, true }, - { 35474, true }, - { 35485, true }, - { 35509, true }, - { 35525, true }, - { 35541, true }, - { 35556, true }, - { 35577, true }, - { 35586, true }, - { 35601, true }, - { 35614, false }, - { 35624, true }, - { 35643, true }, - { 35657, true }, - { 35677, true }, - { 35692, true }, - { 35701, true }, - { 35719, false }, - { 35741, true }, - { 35760, true }, - { 35772, false }, - { 35788, false }, - { 35802, true }, - { 35818, true }, - { 35837, true }, - { 35849, true }, + { 35278, true }, + { 35292, true }, + { 35307, true }, + { 35326, true }, + { 35342, true }, + { 35354, true }, + { 35364, true }, + { 35375, false }, + { 35397, true }, + { 35405, true }, + { 35420, true }, + { 35437, true }, + { 35451, true }, + { 35468, true }, + { 35483, true }, + { 35501, true }, + { 35512, true }, + { 35536, true }, + { 35552, true }, + { 35568, true }, + { 35583, true }, + { 35604, true }, + { 35613, true }, + { 35628, true }, + { 35641, false }, + { 35651, true }, + { 35670, true }, + { 35684, true }, + { 35704, true }, + { 35719, true }, + { 35728, true }, + { 35746, false }, + { 35768, true }, + { 35787, true }, + { 35799, false }, + { 35815, false }, + { 35829, true }, + { 35845, true }, { 35864, true }, - { 35882, true }, - { 35897, true }, + { 35876, true }, + { 35891, true }, { 35909, true }, - { 35927, true }, - { 35947, true }, - { 35969, true }, - { 35987, true }, - { 36004, true }, - { 36019, true }, - { 36034, true }, - { 36051, false }, - { 36067, true }, - { 36081, true }, - { 36095, true }, - { 36114, true }, - { 36131, true }, - { 36150, true }, - { 36165, true }, + { 35924, true }, + { 35936, true }, + { 35954, true }, + { 35974, true }, + { 35996, true }, + { 36014, true }, + { 36031, true }, + { 36046, true }, + { 36061, true }, + { 36078, false }, + { 36094, true }, + { 36108, true }, + { 36122, true }, + { 36141, true }, + { 36158, true }, + { 36177, true }, { 36192, true }, - { 36212, true }, - { 36234, true }, - { 36255, true }, - { 36278, true }, - { 36298, true }, - { 36316, true }, - { 36334, true }, - { 36353, true }, - { 36375, true }, - { 36394, true }, - { 36414, true }, - { 36437, true }, - { 36460, true }, - { 36474, true }, - { 36491, true }, - { 36505, true }, - { 36519, true }, + { 36219, true }, + { 36239, true }, + { 36261, true }, + { 36282, true }, + { 36305, true }, + { 36325, true }, + { 36343, true }, + { 36361, true }, + { 36380, true }, + { 36402, true }, + { 36421, true }, + { 36441, true }, + { 36464, true }, + { 36487, true }, + { 36501, true }, + { 36518, true }, { 36532, true }, - { 36569, false }, - { 36580, true }, - { 36598, true }, - { 36618, true }, - { 36641, true }, - { 36666, true }, - { 36697, true }, - { 36711, true }, - { 36722, true }, - { 36734, true }, - { 36746, true }, - { 36755, true }, - { 36767, true }, - { 36784, true }, + { 36546, true }, + { 36559, true }, + { 36596, false }, + { 36607, true }, + { 36625, true }, + { 36645, true }, + { 36668, true }, + { 36693, true }, + { 36724, true }, + { 36738, true }, + { 36749, true }, + { 36761, true }, + { 36773, true }, + { 36782, true }, { 36794, true }, - { 36812, false }, - { 36820, true }, - { 36831, true }, - { 36845, true }, - { 36864, true }, - { 36875, false }, - { 36893, true }, - { 36906, true }, - { 36919, true }, - { 36936, true }, - { 36950, true }, - { 36961, true }, - { 36975, true }, - { 36987, true }, + { 36811, true }, + { 36821, true }, + { 36839, false }, + { 36847, true }, + { 36858, true }, + { 36872, true }, + { 36891, true }, + { 36902, false }, + { 36920, true }, + { 36933, true }, + { 36946, true }, + { 36963, true }, + { 36977, true }, + { 36988, true }, { 37002, true }, - { 37010, true }, - { 37024, true }, - { 37036, true }, - { 37048, true }, - { 37058, true }, - { 37069, true }, - { 37080, true }, - { 37094, true }, - { 37117, true }, - { 37125, true }, - { 37143, true }, - { 37158, true }, - { 37177, false }, - { 37196, true }, - { 37208, true }, - { 37224, true }, - { 37234, true }, - { 37253, true }, - { 37266, true }, - { 37281, true }, - { 37289, true }, - { 37304, true }, + { 37014, true }, + { 37029, true }, + { 37037, true }, + { 37051, true }, + { 37063, true }, + { 37075, true }, + { 37085, true }, + { 37096, true }, + { 37107, true }, + { 37121, true }, + { 37144, true }, + { 37152, true }, + { 37170, true }, + { 37185, true }, + { 37204, false }, + { 37223, true }, + { 37235, true }, + { 37251, true }, + { 37261, true }, + { 37280, true }, + { 37293, true }, + { 37308, true }, { 37316, true }, - { 37324, true }, - { 37330, true }, + { 37331, true }, { 37343, true }, - { 37352, true }, - { 37366, true }, - { 37380, true }, - { 37393, false }, - { 37413, true }, - { 37429, true }, + { 37351, true }, + { 37357, true }, + { 37370, true }, + { 37379, true }, + { 37393, true }, + { 37407, true }, + { 37420, false }, { 37440, true }, - { 37452, true }, - { 37468, true }, - { 37481, true }, - { 37501, true }, - { 37515, true }, - { 37531, true }, - { 37545, true }, - { 37565, true }, - { 37579, true }, - { 37594, true }, - { 37614, true }, - { 37628, true }, + { 37456, true }, + { 37467, true }, + { 37479, true }, + { 37495, true }, + { 37508, true }, + { 37528, true }, + { 37542, true }, + { 37558, true }, + { 37572, true }, + { 37592, true }, + { 37606, true }, + { 37621, true }, { 37641, true }, - { 37650, true }, - { 37669, true }, - { 37685, true }, - { 37707, true }, - { 37739, true }, - { 37758, true }, - { 37774, true }, - { 37795, true }, - { 37815, true }, - { 37828, true }, - { 37848, true }, - { 37862, true }, - { 37881, true }, - { 37900, true }, - { 37914, true }, - { 37929, true }, - { 37942, true }, - { 37952, true }, - { 37965, true }, - { 37980, true }, + { 37655, true }, + { 37668, true }, + { 37677, true }, + { 37696, true }, + { 37712, true }, + { 37734, true }, + { 37766, true }, + { 37785, true }, + { 37801, true }, + { 37822, true }, + { 37842, true }, + { 37855, true }, + { 37875, true }, + { 37889, true }, + { 37908, true }, + { 37927, true }, + { 37941, true }, + { 37956, true }, + { 37969, true }, + { 37979, true }, { 37992, true }, { 38007, true }, - { 38030, true }, - { 38046, true }, - { 38065, true }, - { 38077, false }, - { 38098, true }, - { 38106, true }, - { 38115, true }, - { 38128, true }, + { 38019, true }, + { 38034, true }, + { 38057, true }, + { 38073, true }, + { 38092, true }, + { 38104, false }, + { 38125, true }, + { 38133, true }, { 38142, true }, - { 38151, true }, - { 38163, true }, - { 38179, true }, - { 38196, false }, + { 38155, true }, + { 38169, true }, + { 38178, true }, + { 38190, true }, { 38206, true }, - { 38217, true }, - { 38229, true }, - { 38242, true }, - { 38261, true }, - { 38279, true }, - { 38296, true }, - { 38313, false }, + { 38223, false }, + { 38233, true }, + { 38244, true }, + { 38256, true }, + { 38269, true }, + { 38288, true }, + { 38306, true }, { 38323, true }, - { 38341, true }, - { 38360, true }, - { 38374, true }, - { 38391, true }, - { 38413, true }, - { 38425, true }, - { 38438, true }, - { 38459, true }, - { 38476, true }, - { 38498, true }, - { 38514, true }, - { 38529, true }, - { 38543, true }, - { 38569, true }, - { 38594, true }, - { 38609, true }, - { 38622, true }, - { 38634, true }, - { 38644, true }, - { 38659, true }, - { 38669, true }, - { 38678, true }, - { 38692, true }, - { 38703, true }, - { 38714, true }, - { 38729, true }, - { 38744, true }, + { 38340, false }, + { 38350, true }, + { 38368, true }, + { 38387, true }, + { 38401, true }, + { 38418, true }, + { 38440, true }, + { 38452, true }, + { 38465, true }, + { 38486, true }, + { 38503, true }, + { 38525, true }, + { 38541, true }, + { 38556, true }, + { 38570, true }, + { 38596, true }, + { 38621, true }, + { 38636, true }, + { 38649, true }, + { 38661, true }, + { 38671, true }, + { 38686, true }, + { 38696, true }, + { 38705, true }, + { 38719, true }, + { 38730, true }, + { 38741, true }, { 38756, true }, - { 38770, true }, + { 38771, true }, { 38783, true }, - { 38794, true }, + { 38797, true }, { 38810, true }, - { 38820, true }, - { 38829, true }, - { 38841, true }, - { 38852, true }, - { 38861, true }, - { 38877, true }, - { 38885, true }, - { 38895, true }, - { 38906, true }, - { 38917, false }, - { 38937, true }, - { 38961, true }, - { 38982, true }, - { 38990, true }, - { 39011, true }, - { 39021, true }, - { 39037, true }, - { 39051, true }, - { 39071, true }, - { 39083, false }, - { 39093, true }, - { 39123, true }, - { 39150, false }, - { 39164, true }, - { 39177, true }, - { 39196, true }, - { 39213, true }, - { 39227, false }, - { 39245, true }, - { 39253, true }, - { 39269, true }, - { 39280, true }, - { 39295, true }, - { 39314, true }, - { 39327, true }, - { 39340, true }, - { 39355, true }, - { 39375, false }, - { 39390, true }, - { 39402, true }, - { 39414, true }, - { 39434, true }, - { 39446, true }, - { 39459, true }, - { 39474, true }, - { 39487, true }, - { 39500, true }, - { 39513, true }, - { 39536, true }, - { 39560, true }, - { 39577, true }, - { 39590, true }, - { 39601, true }, - { 39613, true }, - { 39633, true }, - { 39645, true }, - { 39659, true }, - { 39677, true }, - { 39688, true }, - { 39707, true }, - { 39724, true }, - { 39746, true }, - { 39760, true }, - { 39779, true }, + { 38821, true }, + { 38837, true }, + { 38847, true }, + { 38856, true }, + { 38868, true }, + { 38879, true }, + { 38888, true }, + { 38904, true }, + { 38912, true }, + { 38922, true }, + { 38933, true }, + { 38944, false }, + { 38964, true }, + { 38988, true }, + { 39009, true }, + { 39017, true }, + { 39038, true }, + { 39048, true }, + { 39064, true }, + { 39078, true }, + { 39098, true }, + { 39110, false }, + { 39120, true }, + { 39150, true }, + { 39177, false }, + { 39191, true }, + { 39204, true }, + { 39223, true }, + { 39237, false }, + { 39255, true }, + { 39263, true }, + { 39279, true }, + { 39290, true }, + { 39305, true }, + { 39324, true }, + { 39337, true }, + { 39350, true }, + { 39365, true }, + { 39385, false }, + { 39400, true }, + { 39412, true }, + { 39424, true }, + { 39444, true }, + { 39456, true }, + { 39469, true }, + { 39484, true }, + { 39497, true }, + { 39510, true }, + { 39523, true }, + { 39546, true }, + { 39570, true }, + { 39587, true }, + { 39600, true }, + { 39611, true }, + { 39623, true }, + { 39643, true }, + { 39655, true }, + { 39669, true }, + { 39687, true }, + { 39698, true }, + { 39717, true }, + { 39734, true }, + { 39756, true }, + { 39770, true }, { 39789, true }, - { 39803, true }, - { 39836, true }, - { 39857, true }, - { 39869, true }, - { 39884, true }, - { 39898, true }, - { 39909, true }, - { 39923, true }, - { 39936, true }, - { 39952, true }, - { 39965, true }, - { 39985, true }, - { 39993, true }, - { 40005, false }, - { 40017, true }, - { 40028, true }, - { 40045, true }, - { 40067, true }, - { 40080, true }, - { 40100, true }, - { 40112, true }, - { 40124, true }, - { 40142, true }, - { 40156, true }, - { 40175, true }, - { 40190, true }, - { 40204, true }, - { 40216, true }, - { 40232, true }, - { 40248, true }, - { 40269, true }, - { 40288, true }, - { 40315, true }, - { 40334, true }, - { 40354, true }, - { 40368, true }, - { 40385, true }, - { 40405, true }, - { 40418, true }, - { 40432, true }, - { 40453, true }, - { 40474, true }, - { 40487, true }, - { 40494, true }, - { 40506, true }, - { 40528, true }, - { 40544, true }, - { 40555, true }, - { 40571, true }, - { 40586, true }, - { 40599, true }, - { 40619, true }, - { 40633, true }, - { 40648, true }, + { 39799, true }, + { 39813, true }, + { 39846, true }, + { 39867, true }, + { 39879, true }, + { 39894, true }, + { 39908, true }, + { 39919, true }, + { 39933, true }, + { 39946, true }, + { 39962, true }, + { 39975, true }, + { 39995, true }, + { 40003, true }, + { 40015, false }, + { 40027, true }, + { 40038, true }, + { 40055, true }, + { 40077, true }, + { 40090, true }, + { 40110, true }, + { 40122, true }, + { 40134, true }, + { 40152, true }, + { 40166, true }, + { 40185, true }, + { 40200, true }, + { 40214, true }, + { 40226, true }, + { 40242, true }, + { 40258, true }, + { 40279, true }, + { 40298, true }, + { 40325, true }, + { 40344, true }, + { 40364, true }, + { 40378, true }, + { 40395, true }, + { 40415, true }, + { 40428, true }, + { 40442, true }, + { 40463, true }, + { 40484, true }, + { 40497, true }, + { 40504, true }, + { 40516, true }, + { 40538, true }, + { 40554, true }, + { 40565, true }, + { 40581, true }, + { 40596, true }, + { 40609, true }, + { 40629, true }, + { 40643, true }, { 40658, true }, - { 40670, true }, - { 40682, true }, - { 40700, true }, - { 40719, true }, - { 40734, true }, - { 40755, false }, - { 40776, true }, - { 40796, true }, - { 40816, true }, - { 40848, true }, + { 40668, true }, + { 40680, true }, + { 40692, true }, + { 40710, true }, + { 40729, true }, + { 40744, true }, + { 40765, false }, + { 40786, true }, + { 40806, true }, + { 40826, true }, { 40858, true }, - { 40871, true }, - { 40890, true }, - { 40907, false }, - { 40931, false }, - { 40953, true }, - { 40977, true }, - { 41007, true }, - { 41031, true }, - { 41047, true }, - { 41064, true }, - { 41076, true }, - { 41094, true }, - { 41109, true }, - { 41126, true }, - { 41140, true }, - { 41162, true }, - { 41187, true }, - { 41200, true }, - { 41215, true }, - { 41230, true }, - { 41252, true }, - { 41268, false }, - { 41293, true }, - { 41317, true }, - { 41341, true }, - { 41362, true }, - { 41377, true }, - { 41393, true }, - { 41412, true }, - { 41429, true }, - { 41447, true }, - { 41471, false }, - { 41493, true }, - { 41506, true }, - { 41517, true }, - { 41529, true }, - { 41543, true }, - { 41561, true }, - { 41580, true }, - { 41595, true }, - { 41623, true }, - { 41638, true }, - { 41661, true }, - { 41674, true }, - { 41685, true }, - { 41698, true }, - { 41717, true }, - { 41735, true }, - { 41757, true }, - { 41782, true }, - { 41805, true }, - { 41819, true }, - { 41832, true }, - { 41848, true }, - { 41861, true }, - { 41879, true }, + { 40868, true }, + { 40881, true }, + { 40900, true }, + { 40917, false }, + { 40941, false }, + { 40963, true }, + { 40987, true }, + { 41017, true }, + { 41041, true }, + { 41057, true }, + { 41074, true }, + { 41086, true }, + { 41104, true }, + { 41119, true }, + { 41136, true }, + { 41150, true }, + { 41172, true }, + { 41197, true }, + { 41210, true }, + { 41225, true }, + { 41240, true }, + { 41262, true }, + { 41278, false }, + { 41303, true }, + { 41327, true }, + { 41351, true }, + { 41372, true }, + { 41387, true }, + { 41403, true }, + { 41422, true }, + { 41439, true }, + { 41457, true }, + { 41481, false }, + { 41503, true }, + { 41516, true }, + { 41527, true }, + { 41539, true }, + { 41553, true }, + { 41571, true }, + { 41590, true }, + { 41605, true }, + { 41633, true }, + { 41648, true }, + { 41671, true }, + { 41684, true }, + { 41695, true }, + { 41708, true }, + { 41727, true }, + { 41745, true }, + { 41767, true }, + { 41792, true }, + { 41815, true }, + { 41829, true }, + { 41842, true }, + { 41858, true }, + { 41871, true }, { 41889, true }, - { 41902, true }, - { 41929, true }, - { 41947, true }, - { 41968, true }, - { 41983, true }, - { 42007, true }, - { 42025, true }, - { 42050, true }, - { 42065, false }, - { 42088, true }, - { 42097, true }, - { 42118, true }, - { 42135, true }, - { 42146, true }, - { 42159, false }, - { 42198, true }, - { 42209, true }, - { 42222, true }, - { 42234, true }, - { 42250, true }, - { 42264, false }, - { 42279, true }, - { 42299, false }, - { 42315, true }, - { 42334, true }, - { 42345, true }, - { 42358, true }, - { 42370, true }, - { 42393, true }, - { 42402, true }, - { 42412, true }, - { 42426, true }, - { 42441, true }, - { 42455, true }, - { 42471, true }, - { 42487, true }, - { 42504, true }, - { 42516, true }, - { 42530, true }, - { 42542, true }, - { 42565, true }, - { 42590, true }, - { 42610, true }, - { 42627, true }, - { 42636, true }, - { 42653, true }, - { 42665, true }, - { 42680, true }, - { 42697, true }, - { 42716, true }, - { 42729, true }, - { 42747, true }, - { 42759, true }, - { 42778, true }, - { 42790, true }, - { 42820, true }, - { 42834, true }, - { 42858, true }, - { 42881, true }, - { 42895, true }, - { 42908, true }, - { 42920, true }, + { 41899, true }, + { 41912, true }, + { 41939, true }, + { 41957, true }, + { 41978, true }, + { 41993, true }, + { 42017, true }, + { 42035, true }, + { 42060, true }, + { 42075, false }, + { 42098, false }, + { 42107, true }, + { 42128, true }, + { 42145, true }, + { 42156, true }, + { 42169, false }, + { 42208, true }, + { 42219, true }, + { 42232, true }, + { 42244, true }, + { 42260, true }, + { 42274, false }, + { 42289, true }, + { 42309, false }, + { 42325, true }, + { 42344, true }, + { 42355, true }, + { 42368, true }, + { 42380, true }, + { 42403, true }, + { 42415, true }, + { 42424, true }, + { 42434, true }, + { 42448, true }, + { 42463, true }, + { 42477, true }, + { 42493, true }, + { 42509, true }, + { 42526, true }, + { 42538, true }, + { 42552, true }, + { 42564, true }, + { 42587, true }, + { 42612, true }, + { 42632, true }, + { 42649, true }, + { 42658, true }, + { 42675, true }, + { 42687, true }, + { 42702, true }, + { 42719, true }, + { 42738, true }, + { 42751, true }, + { 42769, true }, + { 42781, true }, + { 42800, true }, + { 42812, true }, + { 42842, true }, + { 42856, true }, + { 42880, true }, + { 42903, true }, + { 42917, true }, + { 42930, true }, { 42942, true }, - { 42962, true }, - { 42987, true }, - { 42999, true }, - { 43022, true }, - { 43041, true }, - { 43052, true }, - { 43066, true }, - { 43078, true }, - { 43096, true }, - { 43112, true }, - { 43130, true }, - { 43148, true }, - { 43166, true }, - { 43182, true }, - { 43199, true }, - { 43228, true }, - { 43241, true }, - { 43252, true }, - { 43270, true }, - { 43288, true }, - { 43311, true }, - { 43328, false }, - { 43343, true }, - { 43355, true }, - { 43367, true }, - { 43380, true }, - { 43389, true }, - { 43404, true }, - { 43423, true }, - { 43437, true }, - { 43449, true }, - { 43461, true }, - { 43475, false }, - { 43492, true }, + { 42964, true }, + { 42984, true }, + { 43009, true }, + { 43021, true }, + { 43044, true }, + { 43063, true }, + { 43074, true }, + { 43088, true }, + { 43100, true }, + { 43118, true }, + { 43134, true }, + { 43152, true }, + { 43170, true }, + { 43188, true }, + { 43204, true }, + { 43221, true }, + { 43250, true }, + { 43263, true }, + { 43281, true }, + { 43299, true }, + { 43322, true }, + { 43339, false }, + { 43354, true }, + { 43366, true }, + { 43378, true }, + { 43391, true }, + { 43400, true }, + { 43415, true }, + { 43434, true }, + { 43448, true }, + { 43460, true }, + { 43472, true }, + { 43486, false }, { 43503, true }, - { 43516, true }, - { 43533, true }, - { 43552, false }, - { 43565, true }, - { 43583, true }, - { 43609, true }, - { 43626, true }, - { 43645, true }, - { 43660, true }, - { 43675, true }, - { 43689, true }, - { 43706, true }, - { 43722, true }, - { 43741, true }, - { 43760, true }, - { 43780, true }, - { 43796, true }, - { 43812, true }, - { 43826, true }, - { 43836, true }, - { 43844, true }, - { 43870, true }, - { 43887, true }, - { 43908, true }, - { 43926, true }, - { 43945, true }, - { 43959, true }, - { 43978, true }, - { 43990, true }, - { 44006, false }, - { 44025, true }, - { 44039, true }, - { 44048, true }, - { 44065, true }, - { 44079, true }, - { 44094, true }, - { 44109, true }, - { 44126, true }, + { 43514, true }, + { 43527, true }, + { 43544, true }, + { 43563, false }, + { 43576, true }, + { 43594, true }, + { 43620, true }, + { 43637, true }, + { 43656, true }, + { 43671, true }, + { 43686, true }, + { 43700, true }, + { 43717, true }, + { 43733, true }, + { 43752, true }, + { 43771, true }, + { 43791, true }, + { 43807, true }, + { 43823, true }, + { 43837, true }, + { 43847, true }, + { 43855, true }, + { 43881, true }, + { 43898, true }, + { 43919, true }, + { 43937, true }, + { 43956, true }, + { 43970, true }, + { 43989, true }, + { 44001, true }, + { 44017, false }, + { 44036, true }, + { 44050, true }, + { 44059, true }, + { 44076, true }, + { 44090, true }, + { 44105, true }, + { 44120, true }, { 44137, true }, - { 44155, true }, - { 44176, true }, + { 44148, true }, + { 44166, true }, { 44187, true }, - { 44196, true }, - { 44215, true }, - { 44228, true }, - { 44243, true }, - { 44265, true }, - { 44279, false }, - { 44293, true }, - { 44309, true }, - { 44321, true }, - { 44338, true }, - { 44350, true }, - { 44365, true }, - { 44377, true }, - { 44400, true }, - { 44412, true }, - { 44435, true }, - { 44454, true }, - { 44462, true }, - { 44478, true }, - { 44493, true }, - { 44503, true }, - { 44513, true }, - { 44520, true }, + { 44198, true }, + { 44207, true }, + { 44226, true }, + { 44239, true }, + { 44254, true }, + { 44276, true }, + { 44290, false }, + { 44304, true }, + { 44320, true }, + { 44332, true }, + { 44349, true }, + { 44361, true }, + { 44376, true }, + { 44388, true }, + { 44411, true }, + { 44423, true }, + { 44446, true }, + { 44465, true }, + { 44473, true }, + { 44489, true }, + { 44504, true }, + { 44514, true }, + { 44524, true }, { 44531, true }, - { 44548, true }, - { 44562, true }, - { 44583, true }, - { 44592, true }, - { 44600, true }, - { 44614, false }, - { 44625, true }, - { 44641, false }, - { 44651, false }, - { 44667, true }, - { 44680, true }, - { 44694, true }, - { 44709, true }, - { 44725, true }, - { 44747, true }, - { 44761, true }, - { 44775, true }, - { 44790, true }, - { 44805, true }, - { 44830, true }, - { 44850, true }, - { 44866, true }, - { 44879, true }, - { 44893, true }, - { 44906, true }, - { 44936, true }, - { 44948, true }, - { 44963, true }, - { 44973, true }, - { 44989, true }, - { 44997, false }, - { 45009, true }, + { 44542, true }, + { 44559, true }, + { 44573, true }, + { 44594, true }, + { 44603, true }, + { 44611, true }, + { 44625, false }, + { 44636, true }, + { 44652, false }, + { 44662, false }, + { 44678, true }, + { 44691, true }, + { 44705, true }, + { 44720, true }, + { 44736, true }, + { 44758, true }, + { 44772, true }, + { 44786, true }, + { 44801, true }, + { 44816, true }, + { 44841, true }, + { 44861, true }, + { 44877, true }, + { 44890, true }, + { 44904, true }, + { 44917, true }, + { 44947, true }, + { 44959, true }, + { 44974, true }, + { 44984, true }, + { 45000, true }, + { 45008, false }, { 45020, true }, - { 45029, true }, - { 45039, true }, - { 45054, true }, - { 45071, true }, - { 45087, true }, - { 45100, true }, - { 45116, true }, - { 45129, true }, - { 45146, true }, - { 45155, true }, - { 45163, true }, - { 45171, true }, + { 45031, true }, + { 45040, true }, + { 45050, true }, + { 45065, true }, + { 45082, true }, + { 45098, true }, + { 45111, true }, + { 45127, true }, + { 45140, true }, + { 45157, true }, + { 45166, true }, + { 45174, true }, { 45182, true }, - { 45191, true }, - { 45205, true }, - { 45218, true }, - { 45226, true }, - { 45244, true }, - { 45253, true }, - { 45262, true }, - { 45270, true }, - { 45285, true }, - { 45293, true }, - { 45313, true }, - { 45336, true }, - { 45349, true }, - { 45363, true }, - { 45382, true }, - { 45401, true }, - { 45415, true }, - { 45424, true }, - { 45444, true }, - { 45467, true }, - { 45477, true }, - { 45487, true }, - { 45505, true }, - { 45525, true }, - { 45538, true }, - { 45552, true }, - { 45568, true }, - { 45578, true }, + { 45193, true }, + { 45202, true }, + { 45216, true }, + { 45229, true }, + { 45237, true }, + { 45255, true }, + { 45264, true }, + { 45273, true }, + { 45281, true }, + { 45296, true }, + { 45304, true }, + { 45324, true }, + { 45347, true }, + { 45360, true }, + { 45374, true }, + { 45393, true }, + { 45412, true }, + { 45426, true }, + { 45435, true }, + { 45455, true }, + { 45478, true }, + { 45488, true }, + { 45498, true }, + { 45516, true }, + { 45536, true }, + { 45549, true }, + { 45563, true }, + { 45579, true }, { 45589, true }, - { 45599, true }, - { 45616, true }, - { 45632, true }, - { 45639, true }, - { 45658, true }, - { 45671, true }, - { 45684, true }, - { 45695, true }, - { 45702, true }, - { 45713, true }, - { 45724, true }, - { 45732, true }, - { 45746, true }, - { 45766, true }, - { 45787, true }, - { 45806, true }, - { 45821, true }, - { 45843, true }, - { 45855, false }, - { 45877, true }, - { 45896, true }, - { 45912, true }, - { 45930, true }, - { 45945, true }, - { 45962, true }, - { 45977, true }, - { 45996, true }, - { 46008, true }, - { 46028, true }, - { 46045, true }, - { 46059, true }, - { 46068, true }, - { 46080, true }, - { 46090, true }, - { 46099, true }, - { 46108, true }, - { 46117, true }, - { 46126, true }, - { 46136, true }, - { 46146, true }, - { 46155, true }, - { 46164, true }, - { 46182, true }, - { 46198, true }, - { 46206, true }, - { 46213, true }, - { 46226, true }, - { 46243, true }, - { 46257, true }, - { 46264, true }, - { 46274, true }, - { 46285, true }, - { 46302, true }, - { 46319, true }, - { 46339, true }, - { 46358, false }, - { 46372, true }, - { 46390, true }, - { 46403, true }, - { 46420, true }, - { 46434, true }, - { 46448, true }, - { 46465, true }, - { 46491, true }, - { 46505, true }, - { 46522, true }, - { 46537, true }, - { 46551, true }, - { 46566, true }, - { 46577, true }, - { 46590, true }, - { 46604, true }, - { 46614, true }, - { 46625, true }, - { 46644, true }, - { 46659, true }, - { 46674, true }, - { 46701, true }, - { 46711, true }, - { 46723, true }, - { 46734, true }, - { 46746, true }, - { 46754, true }, - { 46765, true }, - { 46773, true }, - { 46784, true }, - { 46811, true }, - { 46821, true }, - { 46832, true }, - { 46843, true }, - { 46853, true }, - { 46867, true }, - { 46881, true }, - { 46892, true }, - { 46899, true }, - { 46907, true }, - { 46923, true }, - { 46937, true }, - { 46953, true }, - { 46967, true }, - { 46976, true }, - { 46988, true }, - { 46995, true }, - { 47002, true }, - { 47018, true }, - { 47030, true }, - { 47044, true }, - { 47066, true }, - { 47077, true }, - { 47088, true }, - { 47099, true }, - { 47110, true }, - { 47126, true }, - { 47143, true }, - { 47156, true }, - { 47182, false }, - { 47205, true }, - { 47221, true }, - { 47231, true }, - { 47244, true }, - { 47263, true }, - { 47276, true }, - { 47287, true }, - { 47302, true }, - { 47320, true }, - { 47332, false }, - { 47344, true }, - { 47358, true }, - { 47370, true }, - { 47384, true }, - { 47397, true }, - { 47415, true }, - { 47428, true }, - { 47447, true }, - { 47457, true }, - { 47468, true }, - { 47481, true }, - { 47498, true }, - { 47516, true }, - { 47532, true }, - { 47545, true }, - { 47563, true }, - { 47577, true }, - { 47596, true }, - { 47614, true }, - { 47629, true }, - { 47650, true }, - { 47671, true }, - { 47687, true }, - { 47703, true }, - { 47722, false }, - { 47743, false }, - { 47763, true }, - { 47783, true }, - { 47803, true }, - { 47819, true }, - { 47836, true }, - { 47855, true }, - { 47873, true }, - { 47893, true }, - { 47909, true }, - { 47920, false }, - { 47930, true }, - { 47939, true }, - { 47957, true }, - { 47971, true }, - { 47989, false }, - { 48001, true }, - { 48014, true }, - { 48029, true }, - { 48044, true }, - { 48059, true }, - { 48067, true }, - { 48085, true }, - { 48119, true }, - { 48130, true }, - { 48143, false }, - { 48157, true }, - { 48175, true }, - { 48193, true }, - { 48204, true }, - { 48219, true }, - { 48230, true }, - { 48244, true }, - { 48259, true }, - { 48276, true }, - { 48288, true }, - { 48317, true }, - { 48350, true }, - { 48362, true }, - { 48374, true }, - { 48391, true }, - { 48406, true }, - { 48418, true }, - { 48430, true }, - { 48445, false }, - { 48457, true }, - { 48466, true }, - { 48478, true }, - { 48495, true }, - { 48510, false }, - { 48524, true }, - { 48544, true }, - { 48562, false }, - { 48576, true }, - { 48587, true }, - { 48600, true }, - { 48610, false }, - { 48626, true }, - { 48640, true }, - { 48654, true }, - { 48665, true }, - { 48685, true }, - { 48698, true }, - { 48714, true }, - { 48727, true }, - { 48738, true }, - { 48755, true }, - { 48781, true }, - { 48801, true }, - { 48815, true }, - { 48832, false }, - { 48846, true }, - { 48860, false }, - { 48877, true }, - { 48893, true }, - { 48906, true }, - { 48933, true }, - { 48952, true }, - { 48963, true }, - { 48978, true }, - { 48990, true }, - { 49005, true }, - { 49020, true }, - { 49035, true }, - { 49057, true }, - { 49075, true }, - { 49091, true }, - { 49108, true }, - { 49128, true }, - { 49142, true }, - { 49158, true }, - { 49176, true }, - { 49195, true }, - { 49208, true }, - { 49225, true }, - { 49238, true }, - { 49253, true }, - { 49269, true }, - { 49288, true }, - { 49309, true }, - { 49326, true }, - { 49342, true }, - { 49354, true }, - { 49367, true }, - { 49393, true }, - { 49413, false }, - { 49424, true }, - { 49442, true }, - { 49456, true }, - { 49468, true }, - { 49476, true }, - { 49485, true }, - { 49502, true }, - { 49513, true }, - { 49525, true }, - { 49533, true }, - { 49543, true }, - { 49554, true }, - { 49575, true }, - { 49587, true }, - { 49598, true }, - { 49606, true }, - { 49613, true }, - { 49621, true }, - { 49632, true }, - { 49648, true }, - { 49658, true }, - { 49669, true }, - { 49685, true }, - { 49698, true }, - { 49713, true }, - { 49730, true }, - { 49752, true }, - { 49773, true }, - { 49781, true }, - { 49794, true }, - { 49804, true }, - { 49818, true }, - { 49829, false }, - { 49849, true }, - { 49864, true }, - { 49877, true }, - { 49889, true }, - { 49910, true }, - { 49924, true }, - { 49938, true }, - { 49955, true }, - { 49970, true }, - { 49984, true }, - { 49998, true }, - { 50012, true }, - { 50026, true }, - { 50040, true }, - { 50055, true }, - { 50067, true }, - { 50081, true }, - { 50099, true }, - { 50114, true }, - { 50124, true }, - { 50137, true }, - { 50150, true }, - { 50171, true }, - { 50183, true }, - { 50198, true }, - { 50215, true }, - { 50228, true }, - { 50243, true }, - { 50255, true }, - { 50270, true }, - { 50287, true }, - { 50304, true }, - { 50312, true }, - { 50324, true }, - { 50333, true }, - { 50353, true }, - { 50364, true }, - { 50379, true }, - { 50395, true }, - { 50402, true }, - { 50425, true }, - { 50439, true }, - { 50454, true }, - { 50469, true }, - { 50484, true }, - { 50495, true }, - { 50505, true }, - { 50514, true }, - { 50526, true }, - { 50537, true }, - { 50548, true }, - { 50561, true }, - { 50571, true }, - { 50587, true }, - { 50602, true }, - { 50618, true }, - { 50635, true }, - { 50652, true }, - { 50666, true }, - { 50681, true }, - { 50697, true }, - { 50712, true }, - { 50722, true }, - { 50735, true }, - { 50747, true }, - { 50775, true }, - { 50787, true }, - { 50801, true }, - { 50815, true }, - { 50826, true }, - { 50842, true }, - { 50853, true }, - { 50866, true }, - { 50877, true }, - { 50899, true }, - { 50919, true }, - { 50940, true }, - { 50955, true }, - { 50969, true }, - { 50984, true }, - { 50998, true }, - { 51010, true }, - { 51029, true }, - { 51046, true }, - { 51059, true }, - { 51073, true }, - { 51085, true }, - { 51098, true }, - { 51110, true }, - { 51123, true }, - { 51136, true }, - { 51147, true }, - { 51165, true }, - { 51183, true }, - { 51196, true }, - { 51208, true }, - { 51222, true }, - { 51236, true }, - { 51244, true }, - { 51273, true }, - { 51292, true }, - { 51305, true }, - { 51330, true }, - { 51347, true }, - { 51368, true }, - { 51380, true }, - { 51397, true }, - { 51421, true }, - { 51454, true }, - { 51466, true }, - { 51488, true }, - { 51505, true }, - { 51520, true }, - { 51534, true }, - { 51560, true }, - { 51579, true }, - { 51592, true }, - { 51602, true }, - { 51612, true }, - { 51633, true }, - { 51642, true }, - { 51660, true }, - { 51678, true }, - { 51705, true }, - { 51721, true }, - { 51746, true }, - { 51761, true }, - { 51781, true }, - { 51796, true }, - { 51811, true }, - { 51832, true }, - { 51856, true }, - { 51869, true }, - { 51898, true }, - { 51909, false }, - { 51923, true }, - { 51934, true }, - { 51948, true }, - { 51967, true }, - { 51981, true }, - { 51996, false }, - { 52011, true }, - { 52028, true }, - { 52037, true }, - { 52047, true }, - { 52085, true }, - { 52100, true }, - { 52111, true }, - { 52123, true }, - { 52141, true }, - { 52153, true }, - { 52164, true }, - { 52181, true }, - { 52189, true }, - { 52198, true }, - { 52208, true }, - { 52221, true }, - { 52231, true }, - { 52245, false }, - { 52270, true }, - { 52288, false }, - { 52312, true }, - { 52326, true }, - { 52345, true }, - { 52372, true }, - { 52384, true }, - { 52396, true }, - { 52404, true }, - { 52413, true }, - { 52427, true }, - { 52444, false }, - { 52456, true }, - { 52468, true }, - { 52485, true }, - { 52497, true }, - { 52509, true }, - { 52519, true }, - { 52530, true }, - { 52542, true }, + { 45600, true }, + { 45610, true }, + { 45627, true }, + { 45643, true }, + { 45650, true }, + { 45669, true }, + { 45682, true }, + { 45693, true }, + { 45700, true }, + { 45711, true }, + { 45722, true }, + { 45730, true }, + { 45744, true }, + { 45764, true }, + { 45785, true }, + { 45804, true }, + { 45819, true }, + { 45841, true }, + { 45853, false }, + { 45875, true }, + { 45894, true }, + { 45910, true }, + { 45928, true }, + { 45943, true }, + { 45960, true }, + { 45975, true }, + { 45994, true }, + { 46006, true }, + { 46026, true }, + { 46043, true }, + { 46057, true }, + { 46066, true }, + { 46078, true }, + { 46088, true }, + { 46097, true }, + { 46106, true }, + { 46115, true }, + { 46124, true }, + { 46134, true }, + { 46144, true }, + { 46153, true }, + { 46162, true }, + { 46180, true }, + { 46196, true }, + { 46204, true }, + { 46211, true }, + { 46224, true }, + { 46241, true }, + { 46255, true }, + { 46262, true }, + { 46272, true }, + { 46283, true }, + { 46300, true }, + { 46317, true }, + { 46337, true }, + { 46356, false }, + { 46370, true }, + { 46388, true }, + { 46401, true }, + { 46418, true }, + { 46432, true }, + { 46446, true }, + { 46463, true }, + { 46489, true }, + { 46503, true }, + { 46520, true }, + { 46535, true }, + { 46549, true }, + { 46564, true }, + { 46575, true }, + { 46588, true }, + { 46602, true }, + { 46612, true }, + { 46623, true }, + { 46642, true }, + { 46657, true }, + { 46672, true }, + { 46699, true }, + { 46709, true }, + { 46721, true }, + { 46732, true }, + { 46744, true }, + { 46752, true }, + { 46763, true }, + { 46771, true }, + { 46782, true }, + { 46809, true }, + { 46819, true }, + { 46830, true }, + { 46841, true }, + { 46851, true }, + { 46865, true }, + { 46879, true }, + { 46890, true }, + { 46897, true }, + { 46905, true }, + { 46921, true }, + { 46935, true }, + { 46951, true }, + { 46965, true }, + { 46974, true }, + { 46986, true }, + { 46993, true }, + { 47000, true }, + { 47016, true }, + { 47028, true }, + { 47042, true }, + { 47064, true }, + { 47075, true }, + { 47086, true }, + { 47097, true }, + { 47108, true }, + { 47124, true }, + { 47141, true }, + { 47154, true }, + { 47180, false }, + { 47203, true }, + { 47219, true }, + { 47229, true }, + { 47242, true }, + { 47261, true }, + { 47274, true }, + { 47285, true }, + { 47300, true }, + { 47318, true }, + { 47330, false }, + { 47342, true }, + { 47356, true }, + { 47368, true }, + { 47382, true }, + { 47395, true }, + { 47413, true }, + { 47426, true }, + { 47445, true }, + { 47455, true }, + { 47466, true }, + { 47479, true }, + { 47496, true }, + { 47514, true }, + { 47530, true }, + { 47543, true }, + { 47561, true }, + { 47575, true }, + { 47594, true }, + { 47612, true }, + { 47627, true }, + { 47648, true }, + { 47669, true }, + { 47685, true }, + { 47701, true }, + { 47720, false }, + { 47741, false }, + { 47761, true }, + { 47781, true }, + { 47801, true }, + { 47817, true }, + { 47834, true }, + { 47853, true }, + { 47871, true }, + { 47891, true }, + { 47907, true }, + { 47918, false }, + { 47928, true }, + { 47937, true }, + { 47955, true }, + { 47969, true }, + { 47987, false }, + { 47999, true }, + { 48012, true }, + { 48027, true }, + { 48042, true }, + { 48057, true }, + { 48065, true }, + { 48083, true }, + { 48117, true }, + { 48128, true }, + { 48141, false }, + { 48155, true }, + { 48173, true }, + { 48191, true }, + { 48202, true }, + { 48217, true }, + { 48228, true }, + { 48242, true }, + { 48257, true }, + { 48274, true }, + { 48286, true }, + { 48315, true }, + { 48348, true }, + { 48360, true }, + { 48372, true }, + { 48389, true }, + { 48404, true }, + { 48416, true }, + { 48428, true }, + { 48443, false }, + { 48455, true }, + { 48464, true }, + { 48476, true }, + { 48493, true }, + { 48508, false }, + { 48522, true }, + { 48542, true }, + { 48560, false }, + { 48574, true }, + { 48585, true }, + { 48598, true }, + { 48608, false }, + { 48624, true }, + { 48638, true }, + { 48652, true }, + { 48663, true }, + { 48683, true }, + { 48696, true }, + { 48712, true }, + { 48725, true }, + { 48736, true }, + { 48753, true }, + { 48779, true }, + { 48799, true }, + { 48813, true }, + { 48830, false }, + { 48844, true }, + { 48858, false }, + { 48875, true }, + { 48891, true }, + { 48904, true }, + { 48931, true }, + { 48950, true }, + { 48961, true }, + { 48976, true }, + { 48988, true }, + { 49003, true }, + { 49018, true }, + { 49033, true }, + { 49055, true }, + { 49073, true }, + { 49089, true }, + { 49106, true }, + { 49126, true }, + { 49140, true }, + { 49156, true }, + { 49174, true }, + { 49193, true }, + { 49206, true }, + { 49223, true }, + { 49236, true }, + { 49251, true }, + { 49267, true }, + { 49286, true }, + { 49307, true }, + { 49324, true }, + { 49340, true }, + { 49352, true }, + { 49365, true }, + { 49391, true }, + { 49411, false }, + { 49422, true }, + { 49440, true }, + { 49454, true }, + { 49466, true }, + { 49474, true }, + { 49483, true }, + { 49500, true }, + { 49511, true }, + { 49523, true }, + { 49531, true }, + { 49541, true }, + { 49552, true }, + { 49573, true }, + { 49585, true }, + { 49596, true }, + { 49604, true }, + { 49611, true }, + { 49619, true }, + { 49630, true }, + { 49646, true }, + { 49656, true }, + { 49667, true }, + { 49683, true }, + { 49696, true }, + { 49711, true }, + { 49728, true }, + { 49750, true }, + { 49771, true }, + { 49779, true }, + { 49792, true }, + { 49802, true }, + { 49816, true }, + { 49827, false }, + { 49847, true }, + { 49862, true }, + { 49875, true }, + { 49887, true }, + { 49908, true }, + { 49922, true }, + { 49936, true }, + { 49953, true }, + { 49968, true }, + { 49982, true }, + { 49996, true }, + { 50010, true }, + { 50024, true }, + { 50038, true }, + { 50053, true }, + { 50065, true }, + { 50079, true }, + { 50097, true }, + { 50112, true }, + { 50122, true }, + { 50135, true }, + { 50148, true }, + { 50169, true }, + { 50181, true }, + { 50196, true }, + { 50213, true }, + { 50226, true }, + { 50241, true }, + { 50253, true }, + { 50268, true }, + { 50285, true }, + { 50302, true }, + { 50310, true }, + { 50322, true }, + { 50331, true }, + { 50351, true }, + { 50362, true }, + { 50377, true }, + { 50393, true }, + { 50400, true }, + { 50423, true }, + { 50437, true }, + { 50452, true }, + { 50467, true }, + { 50482, true }, + { 50493, true }, + { 50503, true }, + { 50512, true }, + { 50524, true }, + { 50535, true }, + { 50546, true }, + { 50559, true }, + { 50569, true }, + { 50585, true }, + { 50600, true }, + { 50616, true }, + { 50633, true }, + { 50650, true }, + { 50664, true }, + { 50679, true }, + { 50695, true }, + { 50710, true }, + { 50720, true }, + { 50733, true }, + { 50745, true }, + { 50773, true }, + { 50785, true }, + { 50799, true }, + { 50813, true }, + { 50824, true }, + { 50840, true }, + { 50851, true }, + { 50864, true }, + { 50875, true }, + { 50897, true }, + { 50917, true }, + { 50938, true }, + { 50953, true }, + { 50967, true }, + { 50982, true }, + { 50996, true }, + { 51008, true }, + { 51027, true }, + { 51044, true }, + { 51057, true }, + { 51071, true }, + { 51083, true }, + { 51096, true }, + { 51108, true }, + { 51121, true }, + { 51134, true }, + { 51145, true }, + { 51163, true }, + { 51181, true }, + { 51194, true }, + { 51206, true }, + { 51220, true }, + { 51234, true }, + { 51242, true }, + { 51271, true }, + { 51290, true }, + { 51303, true }, + { 51328, true }, + { 51345, true }, + { 51366, true }, + { 51378, true }, + { 51395, true }, + { 51419, true }, + { 51452, true }, + { 51464, true }, + { 51486, true }, + { 51503, true }, + { 51518, true }, + { 51532, true }, + { 51558, true }, + { 51577, true }, + { 51590, true }, + { 51600, true }, + { 51610, true }, + { 51631, true }, + { 51640, true }, + { 51658, true }, + { 51676, true }, + { 51703, true }, + { 51719, true }, + { 51744, true }, + { 51759, true }, + { 51779, true }, + { 51794, true }, + { 51809, true }, + { 51830, true }, + { 51854, true }, + { 51867, true }, + { 51896, true }, + { 51907, false }, + { 51921, true }, + { 51932, true }, + { 51946, true }, + { 51965, true }, + { 51979, true }, + { 51994, false }, + { 52009, true }, + { 52026, true }, + { 52035, true }, + { 52045, true }, + { 52083, true }, + { 52098, true }, + { 52109, true }, + { 52121, true }, + { 52139, true }, + { 52151, true }, + { 52162, true }, + { 52179, true }, + { 52187, true }, + { 52196, true }, + { 52206, true }, + { 52219, true }, + { 52229, true }, + { 52243, false }, + { 52268, true }, + { 52286, false }, + { 52310, true }, + { 52324, true }, + { 52343, true }, + { 52370, true }, + { 52382, true }, + { 52394, true }, + { 52402, true }, + { 52411, true }, + { 52425, true }, + { 52442, true }, + { 52457, false }, + { 52469, true }, + { 52481, true }, + { 52498, true }, + { 52510, true }, + { 52522, true }, + { 52532, true }, + { 52543, true }, { 52555, true }, - { 52569, true }, - { 52586, true }, - { 52597, true }, - { 52615, false }, - { 52635, true }, - { 52647, true }, - { 52658, true }, - { 52670, true }, - { 52679, true }, - { 52689, true }, - { 52702, true }, - { 52724, true }, - { 52738, true }, - { 52747, true }, - { 52759, true }, - { 52766, true }, - { 52778, true }, - { 52787, true }, - { 52796, true }, - { 52806, true }, - { 52820, true }, - { 52837, true }, - { 52848, true }, + { 52568, true }, + { 52582, true }, + { 52599, true }, + { 52610, true }, + { 52628, false }, + { 52648, true }, + { 52660, true }, + { 52672, true }, + { 52683, true }, + { 52695, true }, + { 52704, true }, + { 52714, true }, + { 52727, true }, + { 52749, true }, + { 52763, true }, + { 52772, true }, + { 52784, true }, + { 52791, true }, + { 52803, true }, + { 52812, true }, + { 52821, true }, + { 52831, true }, + { 52845, true }, { 52862, true }, - { 52871, true }, - { 52880, true }, - { 52890, true }, - { 52904, true }, - { 52913, true }, - { 52928, true }, - { 52940, true }, - { 52956, true }, - { 52972, true }, - { 52989, true }, - { 53006, true }, - { 53016, true }, - { 53038, true }, - { 53047, true }, - { 53059, true }, - { 53073, true }, - { 53087, true }, - { 53102, true }, - { 53135, true }, - { 53163, true }, + { 52873, true }, + { 52887, true }, + { 52896, true }, + { 52905, true }, + { 52915, true }, + { 52929, true }, + { 52938, true }, + { 52953, true }, + { 52965, true }, + { 52981, true }, + { 52997, true }, + { 53014, true }, + { 53031, true }, + { 53041, true }, + { 53063, true }, + { 53072, true }, + { 53084, true }, + { 53098, true }, + { 53112, true }, + { 53127, true }, + { 53160, true }, { 53188, true }, - { 53197, true }, { 53213, true }, - { 53225, true }, - { 53236, true }, + { 53222, true }, + { 53238, true }, + { 53250, true }, { 53261, true }, - { 53276, true }, - { 53298, true }, + { 53286, true }, + { 53301, true }, { 53323, true }, - { 53354, true }, - { 53365, true }, - { 53381, true }, - { 53395, true }, - { 53404, true }, - { 53422, true }, - { 53436, true }, - { 53451, false }, - { 53468, true }, - { 53486, true }, - { 53499, true }, - { 53509, true }, - { 53532, true }, - { 53544, true }, - { 53559, true }, - { 53574, true }, - { 53585, true }, + { 53348, true }, + { 53379, true }, + { 53390, true }, + { 53406, true }, + { 53420, true }, + { 53429, true }, + { 53447, true }, + { 53461, true }, + { 53476, false }, + { 53493, true }, + { 53511, true }, + { 53524, true }, + { 53534, true }, + { 53557, true }, + { 53569, true }, + { 53584, true }, { 53599, true }, - { 53613, true }, - { 53626, true }, + { 53610, true }, + { 53624, true }, { 53638, true }, - { 53650, true }, - { 53662, true }, + { 53651, true }, + { 53663, true }, { 53675, true }, - { 53686, true }, - { 53702, true }, - { 53715, true }, - { 53727, false }, - { 53744, true }, - { 53764, true }, - { 53781, true }, - { 53799, true }, - { 53815, true }, - { 53830, true }, - { 53845, true }, - { 53868, true }, - { 53894, true }, - { 53914, true }, - { 53929, true }, - { 53949, false }, - { 53967, true }, - { 53986, true }, - { 54003, true }, - { 54022, true }, - { 54035, true }, - { 54052, true }, - { 54062, false }, - { 54079, true }, - { 54098, true }, - { 54115, true }, - { 54129, true }, - { 54146, true }, + { 53687, true }, + { 53700, true }, + { 53711, true }, + { 53727, true }, + { 53740, true }, + { 53752, false }, + { 53769, true }, + { 53789, true }, + { 53806, true }, + { 53824, true }, + { 53840, true }, + { 53855, true }, + { 53870, true }, + { 53893, true }, + { 53919, true }, + { 53939, true }, + { 53954, true }, + { 53974, false }, + { 53992, true }, + { 54011, true }, + { 54028, true }, + { 54047, true }, + { 54060, true }, + { 54077, true }, + { 54087, false }, + { 54104, true }, + { 54123, true }, + { 54140, true }, { 54154, true }, - { 54166, true }, - { 54176, true }, - { 54187, true }, - { 54197, true }, - { 54207, true }, - { 54220, true }, - { 54234, true }, - { 54245, true }, - { 54258, true }, - { 54277, false }, - { 54285, true }, - { 54296, true }, - { 54309, true }, - { 54322, true }, - { 54341, true }, - { 54357, true }, - { 54381, true }, + { 54171, true }, + { 54179, true }, + { 54190, true }, + { 54202, true }, + { 54212, true }, + { 54223, true }, + { 54233, true }, + { 54243, true }, + { 54256, true }, + { 54270, true }, + { 54281, true }, + { 54294, true }, + { 54313, false }, + { 54321, true }, + { 54332, true }, + { 54345, true }, + { 54358, true }, + { 54377, true }, { 54393, true }, - { 54407, true }, - { 54421, true }, - { 54432, true }, - { 54446, true }, - { 54458, true }, - { 54473, true }, - { 54489, true }, - { 54501, true }, - { 54516, true }, - { 54534, true }, - { 54549, true }, - { 54563, true }, + { 54417, true }, + { 54429, true }, + { 54443, true }, + { 54457, true }, + { 54468, true }, + { 54482, true }, + { 54494, true }, + { 54509, true }, + { 54525, true }, + { 54537, true }, + { 54552, true }, + { 54570, true }, { 54585, true }, - { 54600, true }, - { 54616, true }, - { 54630, true }, - { 54651, true }, - { 54667, true }, - { 54686, true }, - { 54705, true }, - { 54722, false }, - { 54742, true }, - { 54772, true }, - { 54798, true }, - { 54815, true }, - { 54837, true }, - { 54853, true }, + { 54599, true }, + { 54621, true }, + { 54636, true }, + { 54652, true }, + { 54666, true }, + { 54687, true }, + { 54703, true }, + { 54722, true }, + { 54741, true }, + { 54758, false }, + { 54778, true }, + { 54808, true }, + { 54834, true }, + { 54851, true }, { 54873, true }, - { 54887, true }, - { 54910, true }, - { 54929, true }, - { 54947, true }, - { 54962, true }, - { 54973, true }, - { 54984, true }, - { 54994, true }, - { 55012, true }, - { 55031, true }, - { 55041, true }, - { 55059, true }, - { 55068, false }, - { 55079, false }, - { 55099, true }, - { 55107, true }, - { 55122, true }, - { 55136, true }, - { 55149, true }, - { 55159, true }, - { 55168, true }, - { 55188, true }, - { 55197, false }, - { 55212, true }, - { 55221, false }, - { 55230, true }, - { 55246, true }, - { 55263, true }, - { 55272, true }, - { 55279, true }, - { 55287, true }, + { 54889, true }, + { 54909, true }, + { 54923, true }, + { 54946, true }, + { 54965, true }, + { 54983, true }, + { 54998, true }, + { 55009, true }, + { 55020, true }, + { 55030, true }, + { 55048, true }, + { 55067, true }, + { 55077, true }, + { 55095, true }, + { 55104, false }, + { 55115, false }, + { 55135, true }, + { 55143, true }, + { 55158, true }, + { 55172, true }, + { 55185, true }, + { 55195, true }, + { 55204, true }, + { 55224, true }, + { 55233, false }, + { 55248, true }, + { 55257, false }, + { 55266, true }, + { 55282, true }, { 55299, true }, { 55308, true }, - { 55318, true }, + { 55315, true }, + { 55323, true }, { 55335, true }, - { 55345, true }, - { 55353, true }, - { 55361, true }, - { 55368, true }, - { 55379, true }, - { 55392, true }, - { 55399, true }, - { 55409, true }, - { 55424, true }, - { 55439, true }, - { 55452, true }, - { 55464, true }, - { 55479, true }, - { 55490, true }, + { 55344, true }, + { 55354, true }, + { 55371, true }, + { 55381, true }, + { 55389, true }, + { 55397, true }, + { 55404, true }, + { 55415, true }, + { 55428, true }, + { 55435, true }, + { 55445, true }, + { 55460, true }, + { 55475, true }, + { 55488, true }, { 55500, true }, - { 55508, true }, - { 55517, true }, - { 55525, true }, - { 55539, true }, - { 55551, true }, - { 55566, true }, - { 55573, true }, - { 55583, true }, - { 55600, true }, - { 55610, true }, - { 55626, true }, - { 55642, true }, - { 55661, true }, - { 55675, true }, - { 55691, true }, - { 55704, true }, - { 55719, true }, - { 55730, true }, - { 55742, true }, - { 55767, false }, - { 55776, true }, - { 55789, true }, - { 55798, true }, - { 55814, true }, - { 55824, true }, - { 55837, true }, - { 55858, true }, - { 55867, true }, - { 55882, true }, - { 55896, true }, - { 55910, true }, - { 55922, true }, - { 55944, true }, - { 55955, true }, - { 55967, true }, - { 55978, true }, - { 55992, true }, - { 56012, true }, - { 56026, true }, - { 56049, true }, - { 56065, true }, - { 56073, true }, - { 56087, true }, - { 56102, true }, - { 56119, true }, - { 56133, true }, - { 56152, true }, - { 56168, true }, - { 56179, true }, - { 56190, true }, - { 56202, true }, - { 56223, false }, - { 56239, true }, - { 56256, true }, - { 56274, true }, - { 56295, true }, + { 55515, true }, + { 55526, true }, + { 55536, true }, + { 55544, true }, + { 55553, true }, + { 55561, true }, + { 55575, true }, + { 55587, true }, + { 55602, true }, + { 55609, true }, + { 55619, true }, + { 55636, true }, + { 55646, true }, + { 55662, true }, + { 55678, true }, + { 55697, true }, + { 55711, true }, + { 55727, true }, + { 55740, true }, + { 55755, true }, + { 55766, true }, + { 55778, true }, + { 55803, false }, + { 55812, true }, + { 55825, true }, + { 55834, true }, + { 55850, true }, + { 55860, true }, + { 55873, true }, + { 55894, true }, + { 55903, true }, + { 55918, true }, + { 55932, true }, + { 55946, true }, + { 55958, true }, + { 55980, true }, + { 55991, true }, + { 56003, true }, + { 56014, true }, + { 56028, true }, + { 56048, true }, + { 56062, true }, + { 56085, true }, + { 56101, true }, + { 56109, true }, + { 56123, true }, + { 56138, true }, + { 56155, true }, + { 56169, true }, + { 56188, true }, + { 56204, true }, + { 56215, true }, + { 56226, true }, + { 56238, true }, + { 56259, false }, + { 56275, true }, + { 56292, true }, { 56310, true }, - { 56328, true }, - { 56343, true }, - { 56371, true }, - { 56381, true }, - { 56391, true }, - { 56410, false }, - { 56422, true }, - { 56436, true }, - { 56449, true }, - { 56468, true }, - { 56484, true }, - { 56498, true }, - { 56513, true }, - { 56536, true }, + { 56331, true }, + { 56346, true }, + { 56364, true }, + { 56379, true }, + { 56407, true }, + { 56417, true }, + { 56427, true }, + { 56446, false }, + { 56458, true }, + { 56472, true }, + { 56485, true }, + { 56504, true }, + { 56520, true }, + { 56534, true }, { 56549, true }, - { 56566, true }, - { 56575, true }, - { 56590, true }, + { 56572, true }, + { 56585, true }, + { 56602, true }, { 56611, true }, { 56626, true }, - { 56642, true }, - { 56655, true }, - { 56668, true }, - { 56680, true }, - { 56705, true }, - { 56719, true }, - { 56730, true }, - { 56747, true }, - { 56764, true }, - { 56775, true }, - { 56789, true }, - { 56796, true }, - { 56805, true }, - { 56824, true }, - { 56839, true }, - { 56850, true }, - { 56861, true }, - { 56871, true }, - { 56884, true }, - { 56896, true }, - { 56907, true }, - { 56918, true }, - { 56930, true }, - { 56951, true }, - { 56965, true }, - { 56980, true }, - { 56997, true }, - { 57012, true }, - { 57024, true }, - { 57041, true }, + { 56647, true }, + { 56662, true }, + { 56678, true }, + { 56691, true }, + { 56704, true }, + { 56716, true }, + { 56741, true }, + { 56755, true }, + { 56766, true }, + { 56783, true }, + { 56800, true }, + { 56811, true }, + { 56825, true }, + { 56832, true }, + { 56841, true }, + { 56860, true }, + { 56875, true }, + { 56886, true }, + { 56910, true }, + { 56921, true }, + { 56931, true }, + { 56944, true }, + { 56956, true }, + { 56967, true }, + { 56978, true }, + { 56990, true }, + { 57011, true }, + { 57025, true }, + { 57040, true }, { 57057, true }, - { 57078, true }, - { 57095, true }, - { 57124, true }, + { 57072, true }, + { 57084, true }, + { 57101, true }, + { 57117, true }, { 57138, true }, - { 57149, false }, - { 57172, false }, - { 57186, true }, - { 57195, true }, - { 57209, true }, - { 57227, true }, - { 57242, true }, - { 57258, true }, - { 57275, true }, - { 57292, true }, - { 57309, true }, - { 57320, true }, - { 57338, true }, - { 57357, true }, + { 57155, true }, + { 57184, true }, + { 57198, true }, + { 57209, false }, + { 57232, false }, + { 57246, true }, + { 57255, true }, + { 57269, true }, + { 57287, true }, + { 57302, true }, + { 57318, true }, + { 57335, true }, + { 57352, true }, + { 57369, true }, { 57380, true }, - { 57394, true }, - { 57413, true }, - { 57432, true }, - { 57446, true }, - { 57457, true }, - { 57467, true }, - { 57480, true }, - { 57496, true }, - { 57516, true }, - { 57536, true }, - { 57556, false }, - { 57574, true }, - { 57603, true }, - { 57619, true }, - { 57635, true }, - { 57645, true }, - { 57661, true }, - { 57676, true }, - { 57685, true }, - { 57700, true }, - { 57712, true }, - { 57720, true }, - { 57734, true }, - { 57749, true }, - { 57762, true }, - { 57774, true }, - { 57789, true }, - { 57805, false }, - { 57815, true }, - { 57832, true }, - { 57845, true }, - { 57863, true }, - { 57885, true }, - { 57907, true }, - { 57925, true }, - { 57936, true }, - { 57945, true }, - { 57966, true }, - { 57978, true }, - { 57999, true }, - { 58011, true }, + { 57398, true }, + { 57417, true }, + { 57440, true }, + { 57454, true }, + { 57473, true }, + { 57492, true }, + { 57506, true }, + { 57517, true }, + { 57527, true }, + { 57540, true }, + { 57556, true }, + { 57576, true }, + { 57596, true }, + { 57616, true }, + { 57635, false }, + { 57653, true }, + { 57682, true }, + { 57698, true }, + { 57714, true }, + { 57724, true }, + { 57740, true }, + { 57755, true }, + { 57764, true }, + { 57779, true }, + { 57791, true }, + { 57799, true }, + { 57813, true }, + { 57828, true }, + { 57841, true }, + { 57853, true }, + { 57868, true }, + { 57884, false }, + { 57894, true }, + { 57911, true }, + { 57924, true }, + { 57942, true }, + { 57964, true }, + { 57986, true }, + { 58004, true }, + { 58015, true }, { 58024, true }, - { 58039, true }, - { 58051, true }, - { 58068, true }, - { 58077, true }, - { 58092, true }, - { 58122, true }, - { 58160, true }, - { 58191, true }, - { 58223, true }, - { 58251, true }, - { 58285, true }, - { 58315, true }, - { 58345, true }, - { 58380, true }, - { 58409, true }, - { 58445, true }, - { 58457, true }, - { 58471, true }, - { 58487, true }, - { 58497, true }, - { 58507, true }, - { 58522, true }, - { 58544, true }, - { 58558, true }, - { 58568, true }, - { 58588, true }, - { 58599, true }, - { 58615, true }, - { 58633, true }, - { 58641, true }, - { 58655, true }, - { 58670, true }, + { 58045, true }, + { 58057, true }, + { 58078, true }, + { 58090, true }, + { 58103, true }, + { 58118, true }, + { 58130, true }, + { 58147, true }, + { 58156, true }, + { 58171, true }, + { 58201, true }, + { 58239, true }, + { 58270, true }, + { 58302, true }, + { 58330, true }, + { 58364, true }, + { 58394, true }, + { 58424, true }, + { 58459, true }, + { 58488, true }, + { 58524, true }, + { 58536, true }, + { 58550, true }, + { 58566, true }, + { 58576, true }, + { 58586, true }, + { 58601, true }, + { 58623, true }, + { 58637, true }, + { 58647, true }, + { 58667, true }, { 58678, true }, - { 58687, true }, - { 58710, true }, - { 58721, true }, - { 58736, true }, - { 58754, true }, + { 58694, true }, + { 58712, true }, + { 58720, true }, + { 58734, true }, + { 58749, true }, + { 58757, true }, { 58766, true }, - { 58782, true }, - { 58797, false }, - { 58810, true }, - { 58821, true }, - { 58836, true }, - { 58853, true }, - { 58864, true }, - { 58873, true }, - { 58882, true }, - { 58898, true }, - { 58908, false }, - { 58927, true }, - { 58941, true }, - { 58959, true }, - { 58967, true }, - { 58976, true }, - { 58986, true }, - { 58996, true }, - { 59011, true }, - { 59021, true }, - { 59042, true }, - { 59051, true }, - { 59067, true }, - { 59077, true }, - { 59096, true }, - { 59109, true }, - { 59127, true }, - { 59147, true }, - { 59167, true }, + { 58789, true }, + { 58800, true }, + { 58815, true }, + { 58833, true }, + { 58845, true }, + { 58861, true }, + { 58876, false }, + { 58889, true }, + { 58900, true }, + { 58915, true }, + { 58932, true }, + { 58943, true }, + { 58952, true }, + { 58961, true }, + { 58977, true }, + { 58987, false }, + { 59006, true }, + { 59020, true }, + { 59038, true }, + { 59046, true }, + { 59055, true }, + { 59065, true }, + { 59075, true }, + { 59090, true }, + { 59100, true }, + { 59121, true }, + { 59130, true }, + { 59146, true }, + { 59156, true }, { 59175, true }, { 59188, true }, - { 59199, true }, - { 59217, true }, - { 59227, true }, - { 59236, true }, - { 59245, true }, - { 59253, true }, - { 59263, true }, - { 59275, true }, - { 59285, true }, - { 59300, true }, - { 59307, true }, - { 59320, true }, - { 59344, false }, - { 59359, true }, + { 59206, true }, + { 59226, true }, + { 59246, true }, + { 59254, true }, + { 59267, true }, + { 59278, true }, + { 59296, true }, + { 59306, true }, + { 59315, true }, + { 59324, true }, + { 59332, true }, + { 59342, true }, + { 59354, true }, + { 59364, true }, { 59379, true }, + { 59386, true }, { 59399, true }, - { 59418, true }, - { 59435, true }, - { 59446, true }, - { 59461, true }, - { 59471, true }, - { 59481, true }, + { 59423, false }, + { 59438, true }, + { 59458, true }, + { 59478, true }, { 59497, true }, - { 59507, true }, - { 59524, true }, - { 59534, true }, - { 59548, true }, - { 59565, true }, - { 59586, true }, - { 59595, true }, + { 59514, true }, + { 59525, true }, + { 59540, true }, + { 59550, true }, + { 59560, true }, + { 59570, true }, + { 59587, true }, + { 59597, true }, { 59611, true }, - { 59631, true }, - { 59644, true }, - { 59654, true }, - { 59666, true }, - { 59675, true }, - { 59685, true }, - { 59696, true }, - { 59704, true }, - { 59711, true }, - { 59725, true }, - { 59750, true }, - { 59768, true }, - { 59786, true }, - { 59800, true }, - { 59809, true }, - { 59822, true }, - { 59839, true }, - { 59848, true }, - { 59861, true }, - { 59878, true }, - { 59894, true }, + { 59628, true }, + { 59649, true }, + { 59658, true }, + { 59674, true }, + { 59694, true }, + { 59707, true }, + { 59717, true }, + { 59729, true }, + { 59738, true }, + { 59748, true }, + { 59759, true }, + { 59767, true }, + { 59774, true }, + { 59788, true }, + { 59813, true }, + { 59831, true }, + { 59849, true }, + { 59863, true }, + { 59872, true }, + { 59885, true }, + { 59902, true }, { 59911, true }, - { 59926, true }, - { 59955, true }, - { 59973, false }, - { 59986, true }, - { 60002, true }, + { 59924, true }, + { 59941, true }, + { 59957, true }, + { 59974, true }, + { 59989, true }, { 60018, true }, - { 60031, true }, - { 60044, true }, - { 60055, true }, - { 60068, true }, - { 60078, false }, - { 60096, true }, - { 60109, true }, - { 60122, true }, - { 60138, true }, - { 60157, true }, + { 60036, false }, + { 60049, true }, + { 60065, true }, + { 60081, true }, + { 60094, true }, + { 60107, true }, + { 60118, true }, + { 60131, true }, + { 60141, false }, + { 60159, true }, { 60172, true }, - { 60179, true }, - { 60208, true }, - { 60230, true }, - { 60251, true }, - { 60278, true }, - { 60298, true }, - { 60306, true }, - { 60317, true }, - { 60337, true }, - { 60356, true }, - { 60371, true }, - { 60390, true }, - { 60401, true }, - { 60412, true }, - { 60430, true }, - { 60446, false }, - { 60461, true }, - { 60476, true }, + { 60185, true }, + { 60201, true }, + { 60220, true }, + { 60235, true }, + { 60242, true }, + { 60271, true }, + { 60293, true }, + { 60314, true }, + { 60341, true }, + { 60361, true }, + { 60369, true }, + { 60380, true }, + { 60400, true }, + { 60419, true }, + { 60434, true }, + { 60453, true }, + { 60464, true }, + { 60475, true }, { 60493, true }, - { 60508, true }, - { 60527, true }, - { 60541, true }, - { 60559, true }, - { 60568, true }, - { 60578, true }, - { 60589, true }, - { 60605, true }, - { 60619, true }, - { 60633, true }, - { 60646, true }, - { 60659, true }, - { 60673, true }, - { 60687, true }, + { 60509, false }, + { 60524, true }, + { 60539, true }, + { 60556, true }, + { 60571, true }, + { 60590, true }, + { 60604, true }, + { 60622, true }, + { 60631, true }, + { 60641, true }, + { 60652, true }, + { 60668, true }, + { 60682, true }, { 60696, true }, - { 60707, true }, - { 60731, true }, - { 60752, true }, - { 60764, true }, - { 60775, false }, - { 60788, true }, + { 60709, true }, + { 60722, true }, + { 60736, true }, + { 60750, true }, + { 60759, true }, + { 60770, true }, { 60794, true }, - { 60804, true }, - { 60813, true }, + { 60815, true }, { 60827, true }, - { 60837, true }, - { 60853, true }, - { 60863, true }, + { 60838, false }, + { 60851, true }, + { 60857, true }, + { 60867, true }, { 60876, true }, - { 60889, true }, - { 60901, true }, - { 60917, true }, - { 60928, true }, - { 60940, true }, - { 60955, true }, - { 60972, true }, - { 60983, true }, - { 60995, true }, - { 61011, false }, - { 61026, true }, - { 61036, true }, - { 61055, true }, - { 61071, true }, - { 61083, true }, - { 61094, true }, - { 61111, true }, - { 61130, true }, - { 61153, true }, - { 61170, true }, - { 61183, true }, - { 61192, false }, - { 61201, true }, - { 61212, true }, - { 61229, true }, - { 61245, true }, - { 61259, true }, - { 61273, true }, - { 61291, true }, - { 61300, true }, - { 61313, true }, - { 61330, true }, - { 61340, true }, - { 61352, true }, - { 61362, true }, - { 61410, true }, - { 61454, true }, - { 61492, true }, - { 61531, true }, - { 61571, true }, - { 61615, true }, - { 61651, true }, - { 61692, true }, - { 61729, true }, - { 61773, true }, - { 61800, true }, - { 61812, true }, - { 61821, true }, - { 61829, false }, - { 61839, true }, - { 61845, true }, - { 61853, true }, - { 61871, true }, - { 61880, true }, + { 60890, true }, + { 60900, true }, + { 60916, true }, + { 60926, true }, + { 60939, true }, + { 60952, true }, + { 60964, true }, + { 60980, true }, + { 60991, true }, + { 61003, true }, + { 61018, true }, + { 61035, true }, + { 61046, true }, + { 61058, true }, + { 61074, false }, + { 61089, true }, + { 61099, true }, + { 61118, true }, + { 61134, true }, + { 61146, true }, + { 61157, true }, + { 61174, true }, + { 61193, true }, + { 61216, true }, + { 61233, true }, + { 61246, true }, + { 61255, false }, + { 61264, true }, + { 61275, true }, + { 61292, true }, + { 61308, true }, + { 61322, true }, + { 61336, true }, + { 61354, true }, + { 61363, true }, + { 61376, true }, + { 61393, true }, + { 61403, true }, + { 61415, true }, + { 61425, true }, + { 61473, true }, + { 61517, true }, + { 61555, true }, + { 61594, true }, + { 61634, true }, + { 61678, true }, + { 61714, true }, + { 61755, true }, + { 61792, true }, + { 61836, true }, + { 61863, true }, + { 61875, true }, + { 61884, true }, + { 61892, false }, { 61902, true }, - { 61909, true }, - { 61920, true }, - { 61932, true }, - { 61941, true }, - { 61956, true }, - { 61966, true }, - { 61975, true }, - { 61986, true }, - { 61998, true }, - { 62011, true }, - { 62027, true }, - { 62048, true }, - { 62059, true }, - { 62073, true }, - { 62083, true }, - { 62100, true }, - { 62117, true }, - { 62129, true }, - { 62152, true }, - { 62166, true }, - { 62181, true }, + { 61908, true }, + { 61916, true }, + { 61934, true }, + { 61943, true }, + { 61965, true }, + { 61972, true }, + { 61983, true }, + { 61995, true }, + { 62004, true }, + { 62019, true }, + { 62029, true }, + { 62038, true }, + { 62049, true }, + { 62061, true }, + { 62074, true }, + { 62090, true }, + { 62111, true }, + { 62122, true }, + { 62136, true }, + { 62146, true }, + { 62163, true }, + { 62180, true }, { 62192, true }, - { 62208, true }, - { 62219, true }, - { 62248, true }, - { 62264, true }, - { 62292, true }, - { 62308, true }, - { 62320, false }, - { 62338, false }, - { 62346, false }, - { 62357, true }, - { 62367, true }, - { 62388, true }, - { 62398, true }, - { 62408, true }, - { 62423, true }, - { 62437, true }, - { 62450, true }, - { 62460, true }, - { 62475, true }, - { 62486, true }, - { 62498, true }, - { 62510, true }, - { 62519, true }, - { 62528, false }, - { 62540, true }, - { 62556, true }, - { 62567, true }, - { 62583, true }, - { 62602, true }, - { 62618, true }, - { 62633, true }, - { 62654, true }, - { 62685, true }, - { 62709, true }, - { 62728, true }, - { 62748, true }, - { 62765, true }, - { 62782, true }, - { 62798, true }, - { 62813, true }, - { 62832, true }, - { 62854, true }, - { 62876, true }, - { 62898, true }, - { 62915, true }, - { 62930, true }, - { 62949, true }, - { 62962, true }, - { 62977, true }, - { 62992, true }, - { 63005, true }, - { 63021, true }, - { 63033, true }, - { 63046, false }, - { 63056, false }, - { 63065, true }, - { 63087, true }, - { 63107, true }, - { 63128, true }, - { 63143, true }, - { 63154, true }, - { 63175, true }, - { 63191, true }, - { 63215, false }, - { 63232, true }, - { 63245, true }, - { 63261, true }, - { 63274, true }, - { 63287, true }, - { 63300, true }, - { 63319, true }, - { 63330, true }, - { 63339, true }, - { 63348, true }, - { 63358, true }, - { 63371, true }, - { 63381, true }, - { 63390, true }, - { 63406, true }, - { 63422, true }, - { 63449, true }, - { 63460, true }, - { 63477, true }, - { 63490, true }, - { 63504, true }, - { 63521, true }, - { 63536, true }, - { 63559, true }, - { 63569, true }, - { 63584, true }, - { 63594, true }, - { 63614, true }, - { 63639, true }, - { 63663, true }, - { 63672, true }, - { 63689, true }, - { 63710, true }, - { 63730, true }, - { 63742, true }, - { 63755, true }, - { 63769, true }, - { 63786, false }, - { 63799, true }, - { 63816, true }, - { 63825, true }, - { 63836, true }, - { 63850, true }, - { 63861, true }, - { 63875, true }, - { 63892, true }, - { 63901, true }, - { 63915, false }, - { 63943, true }, - { 63952, true }, - { 63961, true }, - { 63971, true }, - { 63987, true }, + { 62215, true }, + { 62229, true }, + { 62244, true }, + { 62255, true }, + { 62271, true }, + { 62282, true }, + { 62311, true }, + { 62327, true }, + { 62355, true }, + { 62371, true }, + { 62383, false }, + { 62401, false }, + { 62409, false }, + { 62420, true }, + { 62430, true }, + { 62451, true }, + { 62461, true }, + { 62476, true }, + { 62490, true }, + { 62503, true }, + { 62513, true }, + { 62528, true }, + { 62539, true }, + { 62551, true }, + { 62563, true }, + { 62572, true }, + { 62581, false }, + { 62593, true }, + { 62609, true }, + { 62620, true }, + { 62636, true }, + { 62655, true }, + { 62671, true }, + { 62686, true }, + { 62707, true }, + { 62738, true }, + { 62762, true }, + { 62781, true }, + { 62801, true }, + { 62818, true }, + { 62835, true }, + { 62851, true }, + { 62866, true }, + { 62885, true }, + { 62907, true }, + { 62929, true }, + { 62951, true }, + { 62968, true }, + { 62983, true }, + { 63002, true }, + { 63015, true }, + { 63030, true }, + { 63045, true }, + { 63058, true }, + { 63074, true }, + { 63086, true }, + { 63099, false }, + { 63109, false }, + { 63118, true }, + { 63140, true }, + { 63160, true }, + { 63181, true }, + { 63196, true }, + { 63207, true }, + { 63228, true }, + { 63244, true }, + { 63268, false }, + { 63285, true }, + { 63298, true }, + { 63311, true }, + { 63324, true }, + { 63337, true }, + { 63356, true }, + { 63367, true }, + { 63376, true }, + { 63385, true }, + { 63395, true }, + { 63408, true }, + { 63418, true }, + { 63427, true }, + { 63443, true }, + { 63459, true }, + { 63486, true }, + { 63497, true }, + { 63514, true }, + { 63527, true }, + { 63541, true }, + { 63558, true }, + { 63573, true }, + { 63596, true }, + { 63606, true }, + { 63621, true }, + { 63631, true }, + { 63651, true }, + { 63676, true }, + { 63700, true }, + { 63709, true }, + { 63726, true }, + { 63747, true }, + { 63767, true }, + { 63779, true }, + { 63792, true }, + { 63806, true }, + { 63823, true }, + { 63840, false }, + { 63853, true }, + { 63870, true }, + { 63879, true }, + { 63890, true }, + { 63904, true }, + { 63915, true }, + { 63929, true }, + { 63946, true }, + { 63955, true }, + { 63969, false }, { 63997, true }, - { 64009, true }, - { 64023, false }, - { 64037, false }, - { 64052, true }, - { 64076, true }, - { 64097, true }, - { 64119, true }, - { 64133, true }, - { 64143, true }, - { 64155, true }, - { 64174, true }, - { 64191, true }, - { 64204, true }, - { 64216, true }, - { 64229, true }, - { 64241, true }, - { 64253, false }, - { 64277, true }, - { 64290, true }, - { 64300, true }, - { 64319, true }, - { 64343, true }, - { 64359, true }, - { 64369, true }, - { 64385, true }, - { 64401, true }, - { 64420, true }, - { 64438, true }, + { 64006, true }, + { 64015, true }, + { 64025, true }, + { 64041, true }, + { 64051, true }, + { 64063, true }, + { 64077, false }, + { 64091, false }, + { 64106, true }, + { 64130, true }, + { 64151, true }, + { 64173, true }, + { 64187, true }, + { 64197, true }, + { 64209, true }, + { 64228, true }, + { 64245, true }, + { 64258, true }, + { 64270, true }, + { 64283, true }, + { 64295, true }, + { 64307, false }, + { 64331, true }, + { 64344, true }, + { 64354, true }, + { 64373, true }, + { 64397, true }, + { 64413, true }, + { 64423, true }, + { 64439, true }, { 64455, true }, - { 64472, true }, - { 64480, false }, - { 64506, true }, - { 64523, true }, - { 64537, true }, - { 64548, true }, - { 64560, true }, - { 64580, true }, - { 64596, true }, - { 64614, true }, + { 64474, true }, + { 64492, true }, + { 64509, true }, + { 64526, true }, + { 64534, true }, + { 64551, true }, + { 64565, true }, + { 64576, true }, + { 64588, true }, + { 64608, true }, { 64624, true }, - { 64636, true }, - { 64651, true }, - { 64669, true }, - { 64687, true }, - { 64706, true }, - { 64716, true }, - { 64730, true }, - { 64740, true }, - { 64751, true }, - { 64770, true }, - { 64786, true }, - { 64805, true }, - { 64817, true }, - { 64828, true }, - { 64838, true }, - { 64854, true }, - { 64867, true }, - { 64891, true }, - { 64915, true }, - { 64930, true }, - { 64950, true }, - { 64963, false }, - { 64975, true }, - { 64985, true }, - { 65000, true }, - { 65020, true }, - { 65030, true }, - { 65040, false }, - { 65057, true }, - { 65065, true }, - { 65081, true }, - { 65096, true }, - { 65112, true }, - { 65128, true }, - { 65142, true }, + { 64642, true }, + { 64652, true }, + { 64664, true }, + { 64679, true }, + { 64697, true }, + { 64715, true }, + { 64734, true }, + { 64744, true }, + { 64758, true }, + { 64768, true }, + { 64779, true }, + { 64798, true }, + { 64814, true }, + { 64833, true }, + { 64845, true }, + { 64856, true }, + { 64866, true }, + { 64882, true }, + { 64895, true }, + { 64919, true }, + { 64943, true }, + { 64958, true }, + { 64978, true }, + { 64991, false }, + { 65003, true }, + { 65013, true }, + { 65028, true }, + { 65048, true }, + { 65058, true }, + { 65068, false }, + { 65085, true }, + { 65093, true }, + { 65109, true }, + { 65124, true }, + { 65140, true }, { 65156, true }, { 65170, true }, - { 65182, true }, - { 65202, true }, - { 65218, true }, - { 65235, true }, - { 65245, true }, - { 65258, true }, - { 65269, true }, - { 65283, true }, - { 65296, true }, - { 65304, true }, - { 65314, true }, - { 65328, true }, - { 65340, true }, + { 65184, true }, + { 65198, true }, + { 65210, true }, + { 65230, true }, + { 65246, true }, + { 65263, true }, + { 65273, true }, + { 65286, true }, + { 65297, true }, + { 65311, true }, + { 65324, true }, + { 65332, true }, + { 65342, true }, { 65356, true }, - { 65367, true }, - { 65391, true }, - { 65416, true }, - { 65429, true }, - { 65442, true }, - { 65454, true }, - { 65473, true }, - { 65488, true }, + { 65368, true }, + { 65384, true }, + { 65395, true }, + { 65419, true }, + { 65444, true }, + { 65457, true }, + { 65470, true }, + { 65482, true }, { 65501, true }, - { 65514, true }, - { 65527, true }, - { 65547, true }, - { 65562, true }, - { 65573, true }, - { 65591, true }, - { 65600, true }, - { 65611, true }, - { 65622, true }, - { 65633, true }, - { 65644, true }, - { 65654, true }, - { 65668, true }, - { 65680, true }, - { 65690, true }, - { 65704, true }, - { 65714, true }, - { 65726, true }, - { 65735, true }, - { 65746, false }, - { 65759, true }, - { 65781, true }, - { 65788, true }, - { 65800, true }, + { 65516, true }, + { 65529, true }, + { 65542, true }, + { 65555, true }, + { 65575, true }, + { 65590, true }, + { 65601, true }, + { 65619, true }, + { 65628, true }, + { 65639, true }, + { 65650, true }, + { 65661, true }, + { 65672, true }, + { 65682, true }, + { 65696, true }, + { 65708, true }, + { 65718, true }, + { 65732, true }, + { 65742, true }, + { 65754, true }, + { 65763, true }, + { 65774, false }, + { 65787, true }, + { 65809, true }, { 65816, true }, - { 65833, true }, - { 65855, true }, - { 65868, false }, - { 65888, true }, - { 65901, true }, - { 65913, true }, - { 65926, true }, + { 65828, true }, + { 65844, true }, + { 65861, true }, + { 65883, true }, + { 65896, false }, + { 65916, true }, + { 65929, true }, { 65941, true }, - { 65960, true }, - { 65971, true }, - { 65995, false }, - { 66016, true }, - { 66026, true }, - { 66035, true }, - { 66050, true }, + { 65954, true }, + { 65969, true }, + { 65988, true }, + { 65999, true }, + { 66023, false }, + { 66044, true }, + { 66054, true }, { 66063, true }, - { 66074, true }, - { 66087, true }, - { 66100, true }, - { 66109, true }, - { 66121, true }, - { 66130, true }, - { 66139, true }, - { 66153, true }, - { 66171, true }, - { 66193, true }, - { 66213, false }, - { 66238, true }, - { 66251, true }, - { 66260, true }, - { 66281, true }, - { 66302, true }, - { 66312, true }, - { 66324, true }, - { 66349, true }, - { 66365, true }, - { 66376, true }, - { 66389, true }, + { 66078, true }, + { 66091, true }, + { 66102, true }, + { 66115, true }, + { 66128, true }, + { 66137, true }, + { 66149, true }, + { 66158, true }, + { 66167, true }, + { 66181, true }, + { 66199, true }, + { 66221, true }, + { 66241, false }, + { 66266, true }, + { 66279, true }, + { 66288, true }, + { 66309, true }, + { 66330, true }, + { 66340, true }, + { 66352, true }, + { 66377, true }, + { 66393, true }, { 66404, true }, - { 66418, true }, - { 66427, true }, - { 66445, true }, - { 66479, true }, - { 66489, true }, + { 66417, true }, + { 66432, true }, + { 66446, true }, + { 66455, true }, + { 66473, true }, { 66507, true }, - { 66518, true }, - { 66544, false }, - { 66559, true }, - { 66569, true }, - { 66578, true }, - { 66590, true }, - { 66600, true }, - { 66609, true }, - { 66623, false }, - { 66634, true }, - { 66642, true }, + { 66517, true }, + { 66535, true }, + { 66561, false }, + { 66576, true }, + { 66586, true }, + { 66595, true }, + { 66607, true }, + { 66617, true }, + { 66626, true }, + { 66640, false }, { 66651, true }, { 66659, true }, - { 66670, true }, - { 66679, true }, - { 66691, true }, - { 66705, true }, - { 66719, true }, - { 66739, true }, - { 66751, true }, - { 66769, true }, - { 66785, true }, - { 66799, true }, + { 66668, true }, + { 66676, true }, + { 66687, true }, + { 66696, true }, + { 66708, true }, + { 66722, true }, + { 66736, true }, + { 66756, true }, + { 66768, true }, + { 66786, true }, + { 66802, true }, { 66816, true }, - { 66829, true }, - { 66839, true }, - { 66853, true }, - { 66865, true }, - { 66879, true }, - { 66892, true }, - { 66905, true }, - { 66918, true }, - { 66929, true }, - { 66939, true }, + { 66833, true }, + { 66846, true }, + { 66856, true }, + { 66870, true }, + { 66882, true }, + { 66896, true }, + { 66909, true }, + { 66922, true }, + { 66935, true }, { 66946, true }, - { 66955, true }, - { 66979, true }, - { 66998, true }, - { 67012, true }, - { 67026, true }, - { 67039, true }, - { 67055, true }, - { 67078, true }, - { 67087, true }, - { 67101, true }, - { 67116, true }, - { 67130, true }, - { 67144, true }, - { 67158, true }, - { 67172, true }, - { 67186, true }, - { 67200, true }, - { 67214, true }, + { 66956, true }, + { 66963, true }, + { 66972, true }, + { 66996, true }, + { 67015, true }, + { 67029, true }, + { 67043, true }, + { 67056, true }, + { 67072, true }, + { 67095, true }, + { 67104, true }, + { 67118, true }, + { 67133, true }, + { 67147, true }, + { 67161, true }, + { 67175, true }, + { 67189, true }, + { 67203, true }, + { 67217, true }, { 67231, true }, - { 67251, true }, - { 67263, true }, - { 67278, true }, - { 67297, true }, - { 67311, true }, - { 67329, true }, - { 67347, true }, - { 67354, true }, - { 67368, true }, - { 67380, true }, + { 67248, true }, + { 67268, true }, + { 67280, true }, + { 67295, true }, + { 67314, true }, + { 67328, true }, + { 67346, true }, + { 67364, true }, + { 67371, true }, + { 67385, true }, { 67397, true }, - { 67415, true }, - { 67434, true }, - { 67444, true }, - { 67464, true }, - { 67477, true }, - { 67487, true }, - { 67501, false }, - { 67518, true }, - { 67531, true }, - { 67544, true }, - { 67557, true }, - { 67567, true }, - { 67579, true }, - { 67591, true }, - { 67604, false }, - { 67619, true }, - { 67632, true }, - { 67645, true }, - { 67659, true }, + { 67414, true }, + { 67432, true }, + { 67451, true }, + { 67461, true }, + { 67481, true }, + { 67494, true }, + { 67504, true }, + { 67518, false }, + { 67535, true }, + { 67548, true }, + { 67561, true }, + { 67574, true }, + { 67584, true }, + { 67596, true }, + { 67608, true }, + { 67621, false }, + { 67636, true }, + { 67649, true }, + { 67662, true }, { 67676, true }, - { 67688, true }, - { 67707, true }, - { 67714, true }, - { 67726, true }, - { 67738, true }, - { 67747, true }, - { 67758, true }, - { 67772, true }, - { 67785, true }, - { 67810, true }, - { 67833, false }, - { 67843, true }, - { 67854, true }, - { 67867, true }, - { 67878, true }, - { 67887, true }, - { 67897, true }, - { 67908, true }, - { 67928, true }, - { 67948, true }, - { 67966, true }, - { 67985, true }, - { 68008, true }, - { 68026, true }, + { 67693, true }, + { 67705, true }, + { 67724, true }, + { 67731, true }, + { 67743, true }, + { 67755, true }, + { 67764, true }, + { 67775, true }, + { 67789, true }, + { 67802, true }, + { 67827, true }, + { 67850, false }, + { 67860, true }, + { 67871, true }, + { 67884, true }, + { 67895, true }, + { 67904, true }, + { 67914, true }, + { 67925, true }, + { 67945, true }, + { 67965, true }, + { 67983, true }, + { 68002, true }, + { 68025, true }, { 68043, true }, - { 68055, true }, - { 68069, true }, - { 68092, true }, - { 68102, true }, - { 68117, true }, - { 68131, true }, - { 68147, true }, - { 68160, true }, - { 68168, true }, - { 68180, true }, - { 68194, true }, - { 68216, true }, - { 68223, true }, - { 68236, true }, - { 68249, true }, - { 68269, true }, - { 68287, true }, - { 68309, true }, - { 68322, true }, - { 68337, true }, - { 68348, true }, - { 68362, true }, - { 68375, true }, - { 68388, true }, - { 68407, true }, - { 68423, true }, - { 68442, true }, - { 68461, true }, - { 68476, true }, - { 68488, true }, - { 68495, true }, - { 68511, true }, - { 68538, true }, - { 68566, true }, - { 68590, true }, - { 68609, true }, + { 68060, true }, + { 68072, true }, + { 68086, true }, + { 68109, true }, + { 68119, true }, + { 68134, true }, + { 68148, true }, + { 68164, true }, + { 68177, true }, + { 68185, true }, + { 68197, true }, + { 68211, true }, + { 68233, true }, + { 68240, true }, + { 68253, true }, + { 68266, true }, + { 68286, true }, + { 68304, true }, + { 68326, true }, + { 68339, true }, + { 68354, true }, + { 68365, true }, + { 68379, true }, + { 68392, true }, + { 68405, true }, + { 68424, true }, + { 68440, true }, + { 68459, true }, + { 68478, true }, + { 68493, true }, + { 68505, true }, + { 68512, true }, + { 68528, true }, + { 68555, true }, + { 68583, true }, + { 68607, true }, { 68626, true }, - { 68647, true }, - { 68666, true }, - { 68684, true }, - { 68702, true }, - { 68714, true }, - { 68723, true }, - { 68746, true }, - { 68760, true }, - { 68773, true }, - { 68785, true }, - { 68795, true }, - { 68806, false }, - { 68816, true }, - { 68836, true }, - { 68849, true }, - { 68864, true }, - { 68873, true }, - { 68885, true }, - { 68901, true }, - { 68911, true }, + { 68643, true }, + { 68664, true }, + { 68683, true }, + { 68701, true }, + { 68719, true }, + { 68731, true }, + { 68740, true }, + { 68763, true }, + { 68777, true }, + { 68790, true }, + { 68802, true }, + { 68812, true }, + { 68823, false }, + { 68833, true }, + { 68853, true }, + { 68866, true }, + { 68881, true }, + { 68890, true }, + { 68902, true }, { 68918, true }, + { 68928, true }, { 68935, true }, - { 68948, true }, - { 68957, true }, - { 68970, true }, - { 68983, true }, - { 69001, true }, - { 69017, true }, - { 69033, true }, - { 69044, true }, - { 69058, true }, + { 68952, true }, + { 68965, true }, + { 68974, true }, + { 68987, true }, + { 69000, true }, + { 69018, true }, + { 69034, true }, + { 69050, true }, + { 69061, true }, { 69075, true }, - { 69085, true }, - { 69112, true }, - { 69147, true }, - { 69159, false }, - { 69172, true }, - { 69185, true }, - { 69204, true }, - { 69229, true }, - { 69251, true }, - { 69266, true }, - { 69286, false }, - { 69296, true }, - { 69315, true }, + { 69092, true }, + { 69102, true }, + { 69129, true }, + { 69164, true }, + { 69176, false }, + { 69189, true }, + { 69202, true }, + { 69221, true }, + { 69246, true }, + { 69268, true }, + { 69283, true }, + { 69303, false }, + { 69313, true }, { 69332, true }, { 69349, true }, - { 69359, true }, - { 69369, true }, - { 69382, true }, - { 69397, true }, - { 69410, true }, - { 69425, true }, - { 69441, true }, - { 69454, true }, - { 69467, true }, - { 69481, true }, - { 69496, true }, - { 69508, true }, - { 69521, true }, - { 69540, true }, - { 69564, true }, - { 69586, true }, - { 69607, true }, - { 69632, true }, - { 69655, true }, - { 69675, true }, - { 69686, true }, - { 69698, true }, - { 69710, true }, - { 69730, true }, + { 69366, true }, + { 69376, true }, + { 69386, true }, + { 69399, true }, + { 69414, true }, + { 69427, true }, + { 69442, true }, + { 69458, true }, + { 69471, true }, + { 69484, true }, + { 69498, true }, + { 69513, true }, + { 69525, true }, + { 69538, true }, + { 69557, true }, + { 69581, true }, + { 69603, true }, + { 69624, true }, + { 69649, true }, + { 69672, true }, + { 69692, true }, + { 69703, true }, + { 69715, true }, + { 69727, true }, { 69747, true }, - { 69768, true }, - { 69791, true }, - { 69807, true }, - { 69827, true }, - { 69840, true }, - { 69855, true }, - { 69865, true }, + { 69764, true }, + { 69785, true }, + { 69808, true }, + { 69824, true }, + { 69844, true }, + { 69857, true }, + { 69872, true }, { 69882, true }, - { 69893, true }, - { 69912, true }, - { 69922, true }, - { 69932, true }, - { 69940, true }, - { 69954, true }, - { 69967, true }, - { 69980, true }, - { 69989, true }, - { 69996, true }, - { 70003, false }, - { 70019, true }, - { 70028, true }, + { 69899, true }, + { 69910, true }, + { 69929, true }, + { 69939, true }, + { 69949, true }, + { 69957, true }, + { 69971, true }, + { 69984, true }, + { 69997, true }, + { 70006, true }, + { 70013, true }, + { 70020, false }, + { 70036, true }, { 70045, true }, - { 70060, true }, - { 70074, true }, - { 70086, true }, - { 70109, true }, - { 70123, true }, - { 70138, true }, - { 70154, true }, - { 70166, true }, - { 70182, true }, + { 70062, true }, + { 70077, true }, + { 70091, true }, + { 70103, true }, + { 70126, true }, + { 70140, true }, + { 70155, true }, + { 70171, true }, + { 70183, true }, { 70199, true }, - { 70217, true }, - { 70238, true }, + { 70216, true }, + { 70234, true }, { 70255, true }, { 70272, true }, { 70289, true }, { 70306, true }, { 70323, true }, { 70340, true }, - { 70356, true }, - { 70370, true }, - { 70395, true }, - { 70406, true }, - { 70422, true }, - { 70438, true }, - { 70454, true }, - { 70473, false }, - { 70486, true }, - { 70496, false }, - { 70512, true }, - { 70526, true }, - { 70539, true }, - { 70549, true }, - { 70560, true }, - { 70574, true }, - { 70586, true }, - { 70600, true }, - { 70610, false }, - { 70620, true }, - { 70629, true }, - { 70639, true }, - { 70658, true }, - { 70667, true }, - { 70683, false }, - { 70703, true }, - { 70726, true }, - { 70738, true }, + { 70357, true }, + { 70373, true }, + { 70387, true }, + { 70412, true }, + { 70423, true }, + { 70439, true }, + { 70455, true }, + { 70471, true }, + { 70490, false }, + { 70503, true }, + { 70513, false }, + { 70529, true }, + { 70543, true }, + { 70556, true }, + { 70566, true }, + { 70577, true }, + { 70591, true }, + { 70603, true }, + { 70617, true }, + { 70627, false }, + { 70637, true }, + { 70646, true }, + { 70656, true }, + { 70675, true }, + { 70684, true }, + { 70700, false }, + { 70720, true }, + { 70743, true }, { 70755, true }, - { 70774, true }, - { 70791, false }, - { 70803, true }, - { 70814, false }, - { 70826, true }, - { 70837, true }, - { 70851, true }, - { 70866, true }, - { 70884, true }, - { 70894, true }, - { 70902, true }, - { 70916, true }, - { 70929, false }, - { 70942, true }, - { 70957, true }, - { 70971, true }, - { 70986, false }, - { 71000, true }, - { 71012, true }, - { 71026, true }, - { 71040, true }, - { 71050, true }, - { 71066, true }, - { 71082, true }, - { 71101, true }, - { 71120, false }, - { 71149, true }, - { 71163, true }, - { 71177, true }, - { 71198, true }, - { 71216, true }, - { 71231, true }, - { 71244, true }, - { 71262, true }, - { 71282, true }, - { 71294, true }, - { 71309, true }, - { 71332, true }, - { 71356, true }, - { 71380, true }, - { 71404, true }, - { 71414, true }, - { 71428, true }, - { 71450, true }, - { 71482, true }, - { 71493, true }, - { 71501, true }, - { 71511, true }, - { 71523, true }, - { 71538, true }, - { 71552, false }, - { 71572, true }, - { 71583, true }, - { 71601, true }, - { 71610, true }, - { 71617, true }, - { 71628, true }, - { 71637, true }, - { 71650, true }, - { 71668, true }, - { 71691, true }, - { 71706, false }, - { 71717, false }, - { 71729, false }, - { 71740, true }, - { 71756, true }, - { 71782, false }, - { 71798, true }, - { 71808, true }, - { 71816, true }, + { 70772, true }, + { 70791, true }, + { 70808, false }, + { 70820, true }, + { 70831, false }, + { 70843, true }, + { 70854, true }, + { 70868, true }, + { 70883, true }, + { 70901, true }, + { 70911, true }, + { 70919, true }, + { 70933, true }, + { 70946, false }, + { 70959, true }, + { 70974, true }, + { 70988, true }, + { 71003, false }, + { 71017, true }, + { 71029, true }, + { 71043, true }, + { 71057, true }, + { 71067, true }, + { 71083, true }, + { 71099, true }, + { 71118, true }, + { 71137, false }, + { 71166, true }, + { 71180, true }, + { 71194, true }, + { 71215, true }, + { 71233, true }, + { 71248, true }, + { 71261, true }, + { 71279, true }, + { 71299, true }, + { 71311, true }, + { 71326, true }, + { 71349, true }, + { 71373, true }, + { 71397, true }, + { 71421, true }, + { 71431, true }, + { 71445, true }, + { 71467, true }, + { 71499, true }, + { 71510, true }, + { 71518, true }, + { 71528, true }, + { 71540, true }, + { 71555, true }, + { 71569, false }, + { 71589, true }, + { 71600, true }, + { 71618, true }, + { 71627, true }, + { 71634, true }, + { 71645, true }, + { 71654, true }, + { 71667, true }, + { 71685, true }, + { 71708, true }, + { 71723, false }, + { 71734, false }, + { 71746, false }, + { 71757, true }, + { 71773, true }, + { 71799, false }, + { 71815, true }, { 71825, true }, - { 71837, true }, - { 71849, false }, - { 71861, true }, - { 71874, true }, - { 71888, true }, - { 71900, true }, + { 71833, true }, + { 71842, true }, + { 71854, true }, + { 71866, false }, + { 71878, true }, + { 71891, true }, + { 71905, true }, { 71917, true }, - { 71937, true }, - { 71948, true }, - { 71964, true }, - { 71976, true }, + { 71934, true }, + { 71954, true }, + { 71965, true }, + { 71981, true }, { 71993, true }, - { 72002, true }, - { 72015, true }, - { 72028, true }, - { 72046, true }, - { 72059, true }, - { 72083, true }, - { 72097, true }, + { 72010, true }, + { 72019, true }, + { 72032, true }, + { 72045, true }, + { 72063, true }, + { 72076, true }, + { 72100, true }, { 72114, true }, - { 72129, true }, - { 72141, true }, - { 72153, true }, - { 72168, true }, + { 72131, true }, + { 72146, true }, + { 72158, true }, + { 72170, true }, { 72185, true }, - { 72193, true }, - { 72212, true }, + { 72202, true }, + { 72210, true }, { 72229, true }, { 72246, true }, - { 72261, true }, - { 72273, true }, - { 72298, true }, - { 72313, false }, - { 72326, false }, - { 72338, true }, - { 72358, true }, - { 72371, true }, - { 72389, true }, - { 72401, true }, - { 72425, true }, - { 72438, true }, - { 72457, true }, - { 72469, true }, - { 72481, true }, - { 72505, true }, - { 72526, true }, - { 72540, true }, - { 72554, true }, - { 72567, false }, - { 72583, true }, - { 72595, true }, - { 72608, true }, - { 72626, true }, - { 72635, true }, - { 72645, true }, - { 72656, true }, - { 72668, true }, - { 72678, true }, - { 72689, true }, - { 72701, true }, - { 72710, true }, - { 72731, true }, - { 72752, true }, - { 72762, true }, - { 72776, true }, - { 72788, true }, - { 72804, true }, - { 72826, true }, - { 72845, true }, - { 72864, true }, - { 72874, false }, - { 72888, true }, - { 72901, true }, - { 72922, true }, - { 72935, true }, - { 72948, true }, - { 72956, false }, - { 72973, true }, - { 72989, true }, - { 73008, true }, - { 73027, true }, - { 73037, true }, - { 73051, true }, - { 73059, true }, - { 73073, true }, - { 73092, false }, - { 73110, true }, - { 73119, true }, - { 73132, true }, - { 73147, true }, - { 73167, false }, - { 73180, true }, + { 72263, true }, + { 72278, true }, + { 72290, true }, + { 72315, true }, + { 72330, false }, + { 72343, false }, + { 72355, true }, + { 72375, true }, + { 72388, true }, + { 72406, true }, + { 72418, true }, + { 72442, true }, + { 72455, true }, + { 72474, true }, + { 72486, true }, + { 72498, true }, + { 72522, true }, + { 72543, true }, + { 72557, true }, + { 72571, true }, + { 72584, false }, + { 72600, true }, + { 72612, true }, + { 72625, true }, + { 72643, true }, + { 72652, true }, + { 72662, true }, + { 72673, true }, + { 72685, true }, + { 72695, true }, + { 72706, true }, + { 72718, true }, + { 72727, true }, + { 72748, true }, + { 72769, true }, + { 72779, true }, + { 72793, true }, + { 72805, true }, + { 72821, true }, + { 72843, true }, + { 72862, true }, + { 72881, true }, + { 72891, false }, + { 72905, true }, + { 72918, true }, + { 72939, true }, + { 72952, true }, + { 72965, true }, + { 72973, false }, + { 72990, true }, + { 73006, true }, + { 73025, true }, + { 73044, true }, + { 73054, true }, + { 73068, true }, + { 73076, true }, + { 73090, true }, + { 73109, false }, + { 73127, true }, + { 73136, true }, + { 73149, true }, + { 73164, true }, + { 73184, false }, { 73197, true }, - { 73210, true }, - { 73223, true }, - { 73247, true }, - { 73274, true }, - { 73287, false }, - { 73301, true }, - { 73313, true }, - { 73326, true }, - { 73338, true }, - { 73353, true }, - { 73371, true }, - { 73384, true }, - { 73407, true }, - { 73430, false }, - { 73441, true }, - { 73457, true }, - { 73475, true }, - { 73495, true }, - { 73517, true }, - { 73533, true }, + { 73214, true }, + { 73227, true }, + { 73240, true }, + { 73264, true }, + { 73291, true }, + { 73304, false }, + { 73318, true }, + { 73330, true }, + { 73343, true }, + { 73355, true }, + { 73370, true }, + { 73388, true }, + { 73401, true }, + { 73424, true }, + { 73447, false }, + { 73458, true }, + { 73474, true }, + { 73492, true }, + { 73512, true }, + { 73534, true }, { 73550, true }, { 73567, true }, { 73584, true }, - { 73602, true }, - { 73615, true }, + { 73601, true }, + { 73619, true }, { 73632, true }, - { 73647, true }, - { 73661, true }, - { 73672, true }, - { 73688, true }, - { 73697, true }, - { 73716, true }, - { 73724, true }, + { 73649, true }, + { 73664, true }, + { 73678, true }, + { 73689, true }, + { 73705, true }, + { 73714, true }, { 73733, true }, - { 73744, true }, - { 73759, true }, - { 73774, true }, - { 73792, true }, - { 73809, false }, - { 73820, true }, - { 73836, true }, - { 73850, true }, - { 73862, true }, - { 73870, true }, - { 73890, true }, - { 73900, true }, - { 73909, true }, - { 73925, true }, - { 73935, true }, - { 73941, true }, - { 73953, true }, - { 73975, true }, - { 73989, true }, - { 74004, true }, - { 74015, true }, - { 74028, true }, - { 74044, true }, - { 74062, false }, - { 74075, true }, - { 74089, true }, - { 74098, true }, - { 74109, true }, - { 74120, true }, - { 74131, true }, - { 74143, true }, - { 74162, true }, - { 74170, true }, - { 74187, true }, - { 74196, true }, - { 74205, true }, - { 74224, true }, - { 74235, true }, - { 74251, true }, + { 73741, true }, + { 73750, true }, + { 73761, true }, + { 73776, true }, + { 73791, true }, + { 73809, true }, + { 73826, false }, + { 73837, true }, + { 73853, true }, + { 73867, true }, + { 73879, true }, + { 73887, true }, + { 73907, true }, + { 73917, true }, + { 73926, true }, + { 73942, true }, + { 73948, true }, + { 73960, true }, + { 73982, true }, + { 73996, true }, + { 74011, true }, + { 74022, true }, + { 74035, true }, + { 74051, true }, + { 74069, false }, + { 74082, true }, + { 74096, true }, + { 74105, true }, + { 74116, true }, + { 74127, true }, + { 74138, true }, + { 74150, true }, + { 74169, true }, + { 74177, true }, + { 74194, true }, + { 74203, true }, + { 74212, true }, + { 74231, true }, + { 74242, true }, { 74258, true }, - { 74270, true }, - { 74287, true }, - { 74300, true }, - { 74311, true }, - { 74336, true }, - { 74351, true }, - { 74370, false }, - { 74384, true }, - { 74395, true }, - { 74410, true }, - { 74422, true }, - { 74433, true }, - { 74448, true }, - { 74464, true }, - { 74478, true }, - { 74492, true }, - { 74509, true }, - { 74529, true }, - { 74538, true }, - { 74552, true }, - { 74563, true }, - { 74583, false }, - { 74607, true }, - { 74618, false }, - { 74626, true }, - { 74644, true }, - { 74662, true }, - { 74684, true }, - { 74706, true }, - { 74731, true }, - { 74747, true }, - { 74759, true }, - { 74771, true }, - { 74792, true }, - { 74806, true }, - { 74819, false }, - { 74836, true }, - { 74845, true }, - { 74867, true }, - { 74887, true }, - { 74914, true }, - { 74933, true }, - { 74945, true }, - { 74965, true }, - { 74973, true }, - { 74982, true }, - { 74999, true }, - { 75014, true }, - { 75029, true }, - { 75058, true }, - { 75080, true }, - { 75098, true }, - { 75112, true }, - { 75127, true }, - { 75140, true }, - { 75150, true }, - { 75166, true }, - { 75184, true }, - { 75202, false }, - { 75210, true }, - { 75217, false }, - { 75237, true }, - { 75246, true }, - { 75261, true }, - { 75279, true }, - { 75291, true }, - { 75300, false }, - { 75310, true }, - { 75318, true }, - { 75332, true }, - { 75349, true }, - { 75360, true }, - { 75370, true }, - { 75387, true }, - { 75409, true }, - { 75424, true }, - { 75441, true }, - { 75451, true }, - { 75464, true }, - { 75479, true }, - { 75495, true }, - { 75506, true }, - { 75518, true }, - { 75540, true }, - { 75553, true }, - { 75564, true }, - { 75580, true }, - { 75596, true }, - { 75606, true }, - { 75618, true }, - { 75626, true }, - { 75645, true }, - { 75664, true }, - { 75677, true }, - { 75694, true }, - { 75706, true }, - { 75720, true }, - { 75734, true }, - { 75746, true }, - { 75759, true }, - { 75773, true }, - { 75798, true }, - { 75812, true }, - { 75834, true }, - { 75850, true }, - { 75869, true }, - { 75882, true }, - { 75899, true }, - { 75917, true }, - { 75932, true }, - { 75947, true }, - { 75966, true }, - { 75979, true }, - { 76004, true }, - { 76017, true }, - { 76029, true }, - { 76040, true }, - { 76054, true }, - { 76067, true }, - { 76085, true }, - { 76104, true }, - { 76118, true }, - { 76134, true }, - { 76146, true }, - { 76158, true }, - { 76174, true }, - { 76187, true }, - { 76203, true }, - { 76218, true }, - { 76233, true }, - { 76247, true }, - { 76265, true }, - { 76290, true }, - { 76309, true }, - { 76322, true }, - { 76332, true }, - { 76344, true }, - { 76354, true }, - { 76370, true }, - { 76378, true }, - { 76386, true }, - { 76399, true }, - { 76410, true }, - { 76421, true }, - { 76437, true }, - { 76448, true }, - { 76460, true }, - { 76470, true }, - { 76487, true }, - { 76505, false }, - { 76518, true }, - { 76531, true }, - { 76540, true }, - { 76555, true }, - { 76572, true }, - { 76586, true }, - { 76604, true }, - { 76620, true }, - { 76629, true }, - { 76638, true }, - { 76653, true }, - { 76663, true }, - { 76673, true }, - { 76687, true }, - { 76699, true }, - { 76716, true }, - { 76730, true }, - { 76738, true }, - { 76746, true }, - { 76755, true }, - { 76767, false }, - { 76775, true }, - { 76801, true }, - { 76814, true }, - { 76828, true }, - { 76843, true }, - { 76852, true }, - { 76863, true }, - { 76874, true }, - { 76885, true }, - { 76900, true }, - { 76913, true }, - { 76925, true }, - { 76938, true }, - { 76946, true }, - { 76960, true }, - { 76975, false }, - { 76989, true }, - { 77010, true }, - { 77021, true }, - { 77035, true }, - { 77053, true }, - { 77064, true }, - { 77078, true }, - { 77094, true }, - { 77107, true }, - { 77122, true }, - { 77135, true }, - { 77149, false }, - { 77165, true }, - { 77176, true }, - { 77195, true }, - { 77209, true }, - { 77232, true }, - { 77241, true }, - { 77255, true }, - { 77266, true }, - { 77277, true }, - { 77286, true }, - { 77304, true }, - { 77322, true }, - { 77341, true }, - { 77351, true }, - { 77364, true }, - { 77375, true }, - { 77384, true }, - { 77401, true }, - { 77421, true }, - { 77435, true }, - { 77443, true }, - { 77451, true }, - { 77461, true }, + { 74265, true }, + { 74277, true }, + { 74294, true }, + { 74307, true }, + { 74318, true }, + { 74343, true }, + { 74358, true }, + { 74377, false }, + { 74391, true }, + { 74402, true }, + { 74417, true }, + { 74429, true }, + { 74440, true }, + { 74455, true }, + { 74471, true }, + { 74485, true }, + { 74499, true }, + { 74516, true }, + { 74536, true }, + { 74545, true }, + { 74559, true }, + { 74570, true }, + { 74590, false }, + { 74614, true }, + { 74625, false }, + { 74633, true }, + { 74651, true }, + { 74669, true }, + { 74691, true }, + { 74713, true }, + { 74738, true }, + { 74754, true }, + { 74766, true }, + { 74778, true }, + { 74799, true }, + { 74813, true }, + { 74826, false }, + { 74843, true }, + { 74852, true }, + { 74874, true }, + { 74894, true }, + { 74921, true }, + { 74940, true }, + { 74952, true }, + { 74972, true }, + { 74980, true }, + { 74989, true }, + { 75006, true }, + { 75021, true }, + { 75036, true }, + { 75065, true }, + { 75087, true }, + { 75105, true }, + { 75119, true }, + { 75134, true }, + { 75147, true }, + { 75157, true }, + { 75173, true }, + { 75191, true }, + { 75209, false }, + { 75217, true }, + { 75224, false }, + { 75244, true }, + { 75253, true }, + { 75268, true }, + { 75286, true }, + { 75298, true }, + { 75307, false }, + { 75317, true }, + { 75325, true }, + { 75339, true }, + { 75356, true }, + { 75367, true }, + { 75377, true }, + { 75394, true }, + { 75416, true }, + { 75431, true }, + { 75448, true }, + { 75458, true }, + { 75471, true }, + { 75486, true }, + { 75502, true }, + { 75513, true }, + { 75525, true }, + { 75547, true }, + { 75560, true }, + { 75571, true }, + { 75587, true }, + { 75603, true }, + { 75613, true }, + { 75625, true }, + { 75633, true }, + { 75652, true }, + { 75671, true }, + { 75684, true }, + { 75701, true }, + { 75713, true }, + { 75727, true }, + { 75741, true }, + { 75753, true }, + { 75766, true }, + { 75780, true }, + { 75805, true }, + { 75819, true }, + { 75841, true }, + { 75857, true }, + { 75876, true }, + { 75889, true }, + { 75906, true }, + { 75924, true }, + { 75939, true }, + { 75954, true }, + { 75973, true }, + { 75986, true }, + { 76011, true }, + { 76024, true }, + { 76036, true }, + { 76047, true }, + { 76061, true }, + { 76074, true }, + { 76092, true }, + { 76111, true }, + { 76125, true }, + { 76141, true }, + { 76153, true }, + { 76165, true }, + { 76181, true }, + { 76194, true }, + { 76210, true }, + { 76225, true }, + { 76240, true }, + { 76254, true }, + { 76272, true }, + { 76297, true }, + { 76316, true }, + { 76329, true }, + { 76339, true }, + { 76351, true }, + { 76361, true }, + { 76377, true }, + { 76385, true }, + { 76393, true }, + { 76406, true }, + { 76417, true }, + { 76428, true }, + { 76444, true }, + { 76455, true }, + { 76467, true }, + { 76477, true }, + { 76494, true }, + { 76512, false }, + { 76525, true }, + { 76538, true }, + { 76547, true }, + { 76562, true }, + { 76579, true }, + { 76593, true }, + { 76611, true }, + { 76627, true }, + { 76636, true }, + { 76645, true }, + { 76660, true }, + { 76670, true }, + { 76680, true }, + { 76694, true }, + { 76706, true }, + { 76723, true }, + { 76737, true }, + { 76745, true }, + { 76753, true }, + { 76762, true }, + { 76774, false }, + { 76782, true }, + { 76808, true }, + { 76821, true }, + { 76835, true }, + { 76850, true }, + { 76859, true }, + { 76870, true }, + { 76881, true }, + { 76892, true }, + { 76907, true }, + { 76920, true }, + { 76932, true }, + { 76945, true }, + { 76953, true }, + { 76967, true }, + { 76982, false }, + { 76996, true }, + { 77017, true }, + { 77028, true }, + { 77042, true }, + { 77060, true }, + { 77071, true }, + { 77085, true }, + { 77101, true }, + { 77114, true }, + { 77129, true }, + { 77142, true }, + { 77156, false }, + { 77172, true }, + { 77183, true }, + { 77202, true }, + { 77216, true }, + { 77239, true }, + { 77248, true }, + { 77262, true }, + { 77273, true }, + { 77284, true }, + { 77293, true }, + { 77311, true }, + { 77329, true }, + { 77348, true }, + { 77358, true }, + { 77371, true }, + { 77382, true }, + { 77391, true }, + { 77408, true }, + { 77428, true }, + { 77442, true }, + { 77450, true }, + { 77458, true }, { 77468, true }, - { 77481, true }, - { 77492, true }, - { 77506, true }, - { 77520, true }, - { 77534, true }, - { 77544, true }, - { 77554, true }, - { 77567, true }, - { 77577, true }, - { 77589, true }, + { 77475, true }, + { 77488, true }, + { 77499, true }, + { 77513, true }, + { 77527, true }, + { 77541, true }, + { 77551, true }, + { 77561, true }, + { 77574, true }, + { 77584, true }, { 77596, true }, - { 77606, true }, - { 77615, true }, - { 77630, true }, + { 77603, true }, + { 77613, true }, + { 77622, true }, { 77637, true }, - { 77653, true }, - { 77663, true }, - { 77675, true }, - { 77685, true }, - { 77696, true }, - { 77706, true }, + { 77644, true }, + { 77660, true }, + { 77670, true }, + { 77682, true }, + { 77692, true }, + { 77703, true }, { 77713, true }, - { 77725, true }, - { 77734, true }, - { 77743, true }, - { 77757, true }, - { 77775, true }, - { 77797, true }, - { 77810, true }, - { 77819, true }, - { 77833, true }, - { 77843, false }, - { 77856, true }, - { 77865, true }, - { 77887, true }, - { 77910, true }, - { 77924, true }, - { 77939, true }, - { 77954, true }, - { 77970, true }, - { 77988, true }, - { 77998, true }, - { 78016, true }, + { 77720, true }, + { 77732, true }, + { 77741, true }, + { 77750, true }, + { 77764, true }, + { 77782, true }, + { 77804, true }, + { 77817, true }, + { 77826, true }, + { 77840, true }, + { 77852, true }, + { 77862, false }, + { 77875, true }, + { 77884, true }, + { 77906, true }, + { 77929, true }, + { 77943, true }, + { 77958, true }, + { 77973, true }, + { 77989, true }, + { 78007, true }, + { 78017, true }, { 78036, true }, - { 78046, true }, - { 78057, true }, - { 78075, true }, - { 78087, true }, - { 78098, true }, + { 78055, true }, + { 78073, true }, + { 78093, true }, + { 78103, true }, { 78114, true }, - { 78131, true }, - { 78146, true }, - { 78162, true }, - { 78177, true }, - { 78193, true }, - { 78202, true }, + { 78132, true }, + { 78144, true }, + { 78155, true }, + { 78171, true }, + { 78188, true }, + { 78203, true }, { 78219, true }, - { 78231, true }, - { 78248, true }, - { 78266, true }, - { 78278, true }, - { 78295, true }, - { 78309, true }, - { 78318, true }, - { 78332, true }, - { 78347, true }, - { 78362, true }, - { 78373, true }, - { 78387, true }, - { 78402, true }, - { 78417, true }, - { 78432, true }, - { 78450, true }, - { 78463, true }, - { 78475, true }, - { 78492, true }, - { 78513, true }, - { 78537, true }, - { 78559, true }, - { 78571, true }, - { 78584, true }, - { 78599, true }, - { 78615, true }, - { 78629, true }, - { 78642, true }, - { 78660, true }, - { 78681, true }, - { 78694, false }, - { 78715, true }, - { 78728, true }, - { 78743, true }, - { 78757, true }, - { 78768, true }, - { 78793, true }, - { 78809, true }, - { 78826, true }, - { 78843, true }, - { 78855, false }, - { 78872, true }, - { 78885, false }, - { 78896, true }, - { 78911, true }, - { 78923, false }, - { 78934, true }, - { 78948, true }, - { 78958, true }, - { 78977, true }, - { 78986, true }, - { 78993, true }, - { 79004, true }, - { 79021, true }, - { 79033, true }, - { 79042, true }, - { 79053, true }, - { 79065, true }, - { 79072, false }, - { 79079, false }, - { 79088, true }, - { 79100, true }, - { 79112, true }, - { 79123, true }, - { 79144, true }, - { 79170, true }, + { 78234, true }, + { 78250, true }, + { 78259, true }, + { 78276, true }, + { 78288, true }, + { 78305, true }, + { 78323, true }, + { 78335, true }, + { 78352, true }, + { 78366, true }, + { 78375, true }, + { 78389, true }, + { 78404, true }, + { 78419, true }, + { 78430, true }, + { 78444, true }, + { 78459, true }, + { 78474, true }, + { 78489, true }, + { 78507, true }, + { 78520, true }, + { 78532, true }, + { 78549, true }, + { 78570, true }, + { 78594, true }, + { 78616, true }, + { 78628, true }, + { 78641, true }, + { 78656, true }, + { 78672, true }, + { 78686, true }, + { 78699, true }, + { 78717, true }, + { 78738, true }, + { 78751, false }, + { 78772, true }, + { 78785, true }, + { 78800, true }, + { 78814, true }, + { 78825, true }, + { 78850, true }, + { 78866, true }, + { 78883, true }, + { 78900, true }, + { 78912, false }, + { 78929, true }, + { 78942, false }, + { 78953, true }, + { 78968, true }, + { 78980, false }, + { 78991, true }, + { 79005, true }, + { 79015, true }, + { 79034, true }, + { 79043, true }, + { 79050, true }, + { 79061, true }, + { 79078, true }, + { 79090, true }, + { 79099, true }, + { 79110, true }, + { 79122, true }, + { 79129, false }, + { 79136, false }, + { 79145, true }, + { 79157, true }, + { 79169, true }, { 79180, true }, - { 79189, true }, - { 79198, true }, - { 79205, true }, - { 79217, false }, - { 79229, false }, + { 79201, true }, + { 79227, true }, { 79237, true }, - { 79249, true }, + { 79246, true }, + { 79255, true }, { 79262, true }, - { 79276, false }, - { 79291, true }, - { 79305, true }, - { 79318, true }, - { 79330, true }, - { 79344, true }, - { 79364, true }, + { 79274, false }, + { 79286, false }, + { 79294, true }, + { 79306, true }, + { 79319, true }, + { 79333, false }, + { 79348, true }, + { 79362, true }, { 79375, true }, - { 79385, true }, - { 79393, true }, - { 79406, true }, - { 79418, true }, - { 79429, true }, - { 79441, true }, - { 79451, false }, - { 79469, true }, - { 79487, true }, - { 79509, true }, - { 79531, true }, - { 79542, true }, - { 79557, true }, - { 79573, true }, - { 79584, true }, - { 79600, true }, - { 79624, true }, - { 79647, true }, - { 79665, true }, - { 79676, true }, - { 79694, true }, - { 79721, true }, - { 79741, true }, - { 79753, true }, - { 79771, true }, - { 79785, true }, - { 79801, true }, - { 79817, true }, - { 79830, true }, - { 79844, true }, + { 79387, true }, + { 79401, true }, + { 79421, true }, + { 79432, true }, + { 79442, true }, + { 79450, true }, + { 79463, true }, + { 79475, true }, + { 79486, true }, + { 79498, true }, + { 79508, false }, + { 79526, true }, + { 79544, true }, + { 79566, true }, + { 79588, true }, + { 79599, true }, + { 79614, true }, + { 79630, true }, + { 79641, true }, + { 79657, true }, + { 79681, true }, + { 79704, true }, + { 79722, true }, + { 79733, true }, + { 79751, true }, + { 79778, true }, + { 79798, true }, + { 79810, true }, + { 79828, true }, + { 79842, true }, { 79858, true }, - { 79872, true }, - { 79896, true }, - { 79924, false }, - { 79935, true }, - { 79946, true }, - { 79964, true }, - { 79982, true }, + { 79874, true }, + { 79887, true }, + { 79901, true }, + { 79915, true }, + { 79929, true }, + { 79953, true }, + { 79981, false }, + { 79992, true }, { 80003, true }, - { 80024, true }, - { 80045, true }, - { 80059, true }, - { 80072, true }, - { 80091, true }, - { 80109, true }, - { 80119, true }, - { 80137, true }, - { 80155, true }, + { 80021, true }, + { 80039, true }, + { 80060, true }, + { 80081, true }, + { 80102, true }, + { 80116, true }, + { 80129, true }, + { 80148, true }, + { 80166, true }, { 80176, true }, - { 80196, true }, - { 80206, true }, - { 80228, true }, - { 80244, true }, - { 80265, true }, - { 80281, true }, - { 80292, true }, - { 80303, true }, - { 80313, true }, - { 80323, true }, - { 80340, true }, - { 80354, false }, - { 80367, true }, - { 80379, true }, - { 80390, true }, - { 80407, true }, - { 80417, true }, - { 80431, true }, - { 80446, true }, - { 80465, true }, - { 80483, true }, + { 80194, true }, + { 80212, true }, + { 80233, true }, + { 80253, true }, + { 80263, true }, + { 80285, true }, + { 80301, true }, + { 80322, true }, + { 80338, true }, + { 80349, true }, + { 80360, true }, + { 80370, true }, + { 80380, true }, + { 80397, true }, + { 80411, false }, + { 80424, true }, + { 80436, true }, + { 80447, true }, + { 80464, true }, + { 80474, true }, + { 80488, true }, { 80503, true }, - { 80514, true }, - { 80527, true }, + { 80522, true }, { 80540, true }, - { 80555, true }, - { 80569, true }, - { 80581, true }, - { 80595, true }, - { 80610, true }, - { 80623, true }, - { 80640, true }, - { 80657, true }, - { 80671, true }, - { 80684, true }, - { 80698, true }, - { 80707, true }, - { 80726, false }, - { 80737, true }, - { 80748, true }, - { 80765, true }, - { 80774, true }, - { 80788, true }, - { 80796, true }, - { 80804, true }, - { 80811, true }, - { 80818, true }, - { 80827, true }, - { 80846, true }, + { 80560, true }, + { 80571, true }, + { 80584, true }, + { 80597, true }, + { 80612, true }, + { 80626, true }, + { 80638, true }, + { 80652, true }, + { 80667, true }, + { 80680, true }, + { 80697, true }, + { 80714, true }, + { 80728, true }, + { 80741, true }, + { 80755, true }, + { 80764, true }, + { 80783, false }, + { 80794, true }, + { 80805, true }, + { 80822, true }, + { 80831, true }, + { 80845, true }, + { 80853, true }, { 80861, true }, - { 80874, true }, - { 80895, true }, - { 80915, true }, - { 80932, true }, - { 80948, true }, - { 80968, true }, - { 80987, true }, - { 81008, true }, - { 81025, true }, - { 81038, true }, - { 81051, true }, - { 81065, true }, + { 80868, true }, + { 80875, true }, + { 80884, true }, + { 80903, true }, + { 80916, true }, + { 80937, true }, + { 80957, true }, + { 80974, true }, + { 80990, true }, + { 81010, true }, + { 81029, true }, + { 81050, true }, + { 81067, true }, { 81080, true }, - { 81092, true }, - { 81108, false }, - { 81122, false }, - { 81135, false }, - { 81142, true }, - { 81150, true }, - { 81162, true }, - { 81172, true }, - { 81187, true }, - { 81200, true }, - { 81215, true }, - { 81237, true }, - { 81256, true }, - { 81268, true }, - { 81280, true }, - { 81291, true }, - { 81306, true }, + { 81093, true }, + { 81107, true }, + { 81122, true }, + { 81134, true }, + { 81150, false }, + { 81164, false }, + { 81177, false }, + { 81184, true }, + { 81192, true }, + { 81204, true }, + { 81214, true }, + { 81229, true }, + { 81242, true }, + { 81257, true }, + { 81279, true }, + { 81298, true }, + { 81310, true }, { 81322, true }, - { 81340, true }, - { 81358, true }, - { 81366, true }, - { 81380, true }, - { 81390, true }, - { 81403, true }, - { 81410, true }, - { 81421, true }, - { 81433, false }, - { 81453, false }, - { 81469, true }, - { 81480, true }, - { 81495, true }, - { 81508, true }, - { 81521, true }, - { 81533, true }, - { 81546, true }, - { 81563, false }, - { 81574, false }, - { 81584, true }, - { 81599, true }, - { 81614, true }, - { 81630, true }, - { 81659, true }, - { 81678, true }, - { 81692, true }, - { 81709, true }, - { 81735, true }, - { 81750, true }, - { 81765, true }, - { 81780, true }, - { 81794, true }, - { 81813, true }, - { 81830, true }, - { 81846, true }, - { 81867, true }, - { 81884, true }, - { 81918, true }, - { 81942, true }, - { 81971, true }, - { 81987, true }, - { 82012, true }, - { 82024, true }, - { 82038, true }, - { 82047, true }, - { 82067, false }, - { 82077, true }, - { 82092, true }, - { 82100, true }, - { 82109, true }, - { 82117, true }, - { 82125, true }, - { 82141, true }, - { 82163, true }, - { 82175, true }, - { 82187, true }, - { 82198, true }, - { 82208, true }, - { 82218, false }, - { 82230, true }, - { 82246, true }, - { 82262, true }, - { 82276, true }, - { 82292, true }, - { 82307, true }, - { 82321, true }, - { 82332, true }, - { 82347, true }, - { 82358, false }, - { 82370, true }, - { 82384, true }, - { 82395, true }, - { 82405, true }, - { 82422, true }, - { 82440, true }, - { 82450, true }, - { 82473, true }, - { 82487, true }, - { 82503, true }, - { 82516, true }, - { 82535, true }, - { 82548, true }, - { 82565, true }, - { 82583, false }, - { 82596, true }, - { 82617, true }, - { 82631, true }, - { 82641, true }, - { 82652, true }, - { 82659, false }, - { 82668, true }, - { 82684, true }, - { 82700, true }, - { 82707, true }, - { 82728, true }, - { 82738, false }, - { 82753, true }, - { 82768, true }, - { 82785, true }, + { 81333, true }, + { 81348, true }, + { 81364, true }, + { 81382, true }, + { 81400, true }, + { 81408, true }, + { 81422, true }, + { 81432, true }, + { 81445, true }, + { 81452, true }, + { 81463, true }, + { 81475, false }, + { 81495, false }, + { 81511, true }, + { 81522, true }, + { 81537, true }, + { 81550, true }, + { 81563, true }, + { 81575, true }, + { 81588, true }, + { 81605, false }, + { 81616, false }, + { 81626, true }, + { 81641, true }, + { 81656, true }, + { 81672, true }, + { 81701, true }, + { 81720, true }, + { 81734, true }, + { 81751, true }, + { 81777, true }, + { 81792, true }, + { 81807, true }, + { 81822, true }, + { 81836, true }, + { 81855, true }, + { 81872, true }, + { 81888, true }, + { 81909, true }, + { 81926, true }, + { 81960, true }, + { 81984, true }, + { 82013, true }, + { 82029, true }, + { 82054, true }, + { 82066, true }, + { 82080, true }, + { 82089, true }, + { 82109, false }, + { 82119, true }, + { 82134, true }, + { 82142, true }, + { 82151, true }, + { 82159, true }, + { 82167, true }, + { 82183, true }, + { 82205, true }, + { 82217, true }, + { 82229, true }, + { 82240, true }, + { 82250, true }, + { 82260, false }, + { 82272, true }, + { 82288, true }, + { 82304, true }, + { 82318, true }, + { 82334, true }, + { 82349, true }, + { 82363, true }, + { 82374, true }, + { 82389, true }, + { 82400, false }, + { 82412, true }, + { 82426, true }, + { 82437, true }, + { 82447, true }, + { 82464, true }, + { 82482, true }, + { 82492, true }, + { 82515, true }, + { 82529, true }, + { 82545, true }, + { 82558, true }, + { 82577, true }, + { 82590, true }, + { 82607, true }, + { 82625, false }, + { 82638, true }, + { 82659, true }, + { 82673, true }, + { 82683, true }, + { 82694, true }, + { 82701, false }, + { 82710, true }, + { 82726, true }, + { 82742, true }, + { 82749, true }, + { 82770, true }, + { 82780, false }, { 82795, true }, - { 82804, true }, - { 82813, true }, - { 82825, true }, - { 82843, true }, - { 82853, true }, - { 82863, true }, - { 82876, true }, - { 82887, true }, - { 82902, true }, - { 82913, true }, + { 82810, true }, + { 82827, true }, + { 82837, true }, + { 82846, true }, + { 82855, true }, + { 82867, true }, + { 82885, true }, + { 82895, true }, + { 82905, true }, + { 82918, true }, { 82929, true }, - { 82942, true }, - { 82952, true }, + { 82944, true }, + { 82955, true }, { 82971, true }, - { 82987, true }, - { 83009, true }, - { 83021, true }, - { 83034, false }, - { 83048, true }, - { 83061, true }, - { 83076, true }, + { 82984, true }, + { 82994, true }, + { 83013, true }, + { 83029, true }, + { 83051, true }, + { 83063, true }, + { 83076, false }, { 83090, true }, - { 83105, true }, - { 83121, false }, - { 83134, true }, - { 83146, true }, - { 83163, true }, + { 83103, true }, + { 83118, true }, + { 83132, true }, + { 83147, true }, + { 83163, false }, { 83176, true }, - { 83195, true }, - { 83211, true }, - { 83223, false }, - { 83233, true }, - { 83249, true }, - { 83260, true }, - { 83280, false }, - { 83288, true }, - { 83300, true }, - { 83311, true }, - { 83330, false }, - { 83350, true }, - { 83359, true }, - { 83370, true }, + { 83188, true }, + { 83205, true }, + { 83218, true }, + { 83237, true }, + { 83253, true }, + { 83265, false }, + { 83275, true }, + { 83291, true }, + { 83302, true }, + { 83322, false }, + { 83330, true }, + { 83342, true }, + { 83353, true }, + { 83372, false }, + { 83392, true }, { 83401, true }, - { 83410, true }, - { 83424, true }, - { 83438, true }, - { 83458, true }, - { 83477, true }, - { 83491, true }, - { 83507, true }, - { 83522, true }, - { 83536, true }, - { 83550, true }, - { 83558, true }, - { 83571, true }, - { 83582, true }, - { 83594, true }, - { 83606, true }, - { 83622, true }, - { 83633, true }, + { 83412, true }, + { 83443, true }, + { 83452, true }, + { 83466, true }, + { 83480, true }, + { 83500, true }, + { 83519, true }, + { 83533, true }, + { 83549, true }, + { 83564, true }, + { 83578, true }, + { 83592, true }, + { 83600, true }, + { 83613, true }, + { 83624, true }, + { 83636, true }, { 83648, true }, { 83664, true }, - { 83680, true }, - { 83702, true }, - { 83718, true }, - { 83737, true }, - { 83761, true }, - { 83777, true }, - { 83793, true }, + { 83675, true }, + { 83690, true }, + { 83706, true }, + { 83722, true }, + { 83744, true }, + { 83760, true }, + { 83779, true }, { 83803, true }, - { 83815, true }, - { 83833, true }, + { 83819, true }, + { 83835, true }, { 83845, true }, - { 83867, true }, - { 83882, true }, - { 83902, true }, - { 83922, true }, - { 83942, true }, - { 83963, false }, - { 83979, true }, - { 83997, true }, - { 84012, true }, - { 84024, false }, - { 84032, true }, - { 84046, true }, - { 84060, true }, - { 84072, true }, - { 84086, true }, - { 84099, true }, - { 84117, true }, - { 84131, true }, - { 84147, true }, - { 84167, true }, - { 84198, true }, - { 84229, true }, - { 84251, true }, - { 84269, true }, - { 84283, true }, - { 84305, true }, - { 84320, true }, - { 84339, true }, - { 84349, true }, - { 84364, true }, - { 84379, true }, - { 84394, true }, - { 84411, true }, - { 84424, true }, - { 84437, true }, - { 84450, true }, - { 84460, true }, - { 84483, true }, - { 84494, true }, - { 84506, true }, - { 84523, true }, - { 84540, true }, - { 84555, true }, - { 84562, true }, - { 84575, true }, - { 84592, true }, - { 84602, true }, - { 84612, true }, - { 84621, true }, - { 84640, true }, - { 84658, true }, - { 84679, true }, - { 84699, true }, - { 84712, true }, - { 84729, true }, - { 84742, true }, - { 84764, true }, - { 84776, true }, - { 84792, true }, - { 84802, true }, - { 84815, true }, - { 84837, true }, - { 84851, true }, - { 84873, true }, - { 84890, true }, - { 84904, true }, - { 84912, true }, - { 84924, true }, - { 84939, true }, - { 84949, true }, - { 84960, true }, - { 84972, true }, - { 84983, true }, - { 84992, true }, + { 83857, true }, + { 83875, true }, + { 83887, true }, + { 83909, true }, + { 83924, true }, + { 83944, true }, + { 83964, true }, + { 83984, true }, + { 84005, false }, + { 84021, true }, + { 84039, true }, + { 84054, true }, + { 84066, false }, + { 84074, true }, + { 84088, true }, + { 84102, true }, + { 84114, true }, + { 84128, true }, + { 84141, true }, + { 84159, true }, + { 84173, true }, + { 84189, true }, + { 84209, true }, + { 84240, true }, + { 84271, true }, + { 84293, true }, + { 84311, true }, + { 84325, true }, + { 84347, true }, + { 84362, true }, + { 84381, true }, + { 84391, true }, + { 84406, true }, + { 84421, true }, + { 84436, true }, + { 84453, true }, + { 84466, true }, + { 84479, true }, + { 84492, true }, + { 84502, true }, + { 84525, true }, + { 84536, true }, + { 84548, true }, + { 84565, true }, + { 84582, true }, + { 84597, true }, + { 84604, true }, + { 84617, true }, + { 84634, true }, + { 84644, true }, + { 84654, true }, + { 84663, true }, + { 84682, true }, + { 84700, true }, + { 84721, true }, + { 84741, true }, + { 84754, true }, + { 84771, true }, + { 84784, true }, + { 84806, true }, + { 84818, true }, + { 84834, true }, + { 84844, true }, + { 84857, true }, + { 84879, true }, + { 84893, true }, + { 84915, true }, + { 84932, true }, + { 84946, true }, + { 84954, true }, + { 84966, true }, + { 84981, true }, + { 84991, true }, { 85002, true }, - { 85019, true }, - { 85038, true }, - { 85060, true }, - { 85072, true }, - { 85090, true }, - { 85103, true }, + { 85014, true }, + { 85025, true }, + { 85034, true }, + { 85044, true }, + { 85061, true }, + { 85080, true }, + { 85102, true }, { 85114, true }, - { 85129, true }, - { 85142, true }, - { 85165, true }, - { 85179, true }, - { 85189, true }, - { 85203, true }, - { 85219, true }, - { 85234, true }, - { 85246, true }, - { 85256, true }, - { 85272, true }, - { 85290, true }, - { 85304, true }, - { 85312, true }, - { 85323, true }, - { 85337, true }, - { 85350, true }, - { 85360, true }, - { 85371, true }, - { 85382, false }, - { 85398, true }, - { 85411, true }, - { 85426, true }, - { 85437, true }, + { 85132, true }, + { 85145, true }, + { 85156, true }, + { 85171, true }, + { 85184, true }, + { 85207, true }, + { 85221, true }, + { 85231, true }, + { 85245, true }, + { 85261, true }, + { 85276, true }, + { 85288, true }, + { 85298, true }, + { 85314, true }, + { 85332, true }, + { 85346, true }, + { 85354, true }, + { 85365, true }, + { 85379, true }, + { 85392, true }, + { 85402, true }, + { 85413, true }, + { 85424, false }, + { 85440, true }, { 85453, true }, - { 85471, true }, - { 85488, true }, - { 85509, true }, - { 85521, true }, + { 85468, true }, + { 85479, true }, + { 85495, true }, + { 85513, true }, { 85530, true }, - { 85543, false }, - { 85561, true }, - { 85570, true }, - { 85581, true }, - { 85593, true }, - { 85603, false }, - { 85621, true }, - { 85639, true }, - { 85658, true }, - { 85677, true }, - { 85691, true }, - { 85711, false }, - { 85731, true }, - { 85743, true }, - { 85756, true }, - { 85775, true }, - { 85787, true }, - { 85800, true }, - { 85815, true }, + { 85551, true }, + { 85563, true }, + { 85572, true }, + { 85585, false }, + { 85603, true }, + { 85612, true }, + { 85623, true }, + { 85635, true }, + { 85645, false }, + { 85663, true }, + { 85681, true }, + { 85700, true }, + { 85719, true }, + { 85733, true }, + { 85753, false }, + { 85773, true }, + { 85785, true }, + { 85798, true }, + { 85817, true }, { 85829, true }, - { 85839, true }, - { 85849, true }, - { 85859, true }, + { 85842, true }, + { 85857, true }, { 85871, true }, - { 85886, true }, + { 85881, true }, + { 85891, true }, { 85901, true }, - { 85910, true }, - { 85918, true }, - { 85931, true }, - { 85958, true }, - { 85966, true }, - { 85987, true }, - { 86001, true }, - { 86011, true }, - { 86019, true }, - { 86028, true }, - { 86037, true }, - { 86054, true }, - { 86066, true }, - { 86074, true }, - { 86095, true }, - { 86107, true }, - { 86125, true }, - { 86137, true }, - { 86148, true }, - { 86155, true }, - { 86167, true }, - { 86176, true }, - { 86185, true }, - { 86201, true }, - { 86208, true }, - { 86216, true }, - { 86230, false }, - { 86241, true }, - { 86252, true }, - { 86267, true }, - { 86277, true }, - { 86290, true }, - { 86302, true }, - { 86313, true }, - { 86323, false }, - { 86333, true }, - { 86347, true }, - { 86367, true }, - { 86382, true }, - { 86395, true }, - { 86407, true }, - { 86422, true }, - { 86435, true }, - { 86462, true }, - { 86476, true }, - { 86490, true }, - { 86507, true }, - { 86527, true }, + { 85913, true }, + { 85928, true }, + { 85943, true }, + { 85952, true }, + { 85960, true }, + { 85973, true }, + { 85983, true }, + { 86010, true }, + { 86018, true }, + { 86039, true }, + { 86053, true }, + { 86063, true }, + { 86071, true }, + { 86080, true }, + { 86089, true }, + { 86106, true }, + { 86118, true }, + { 86126, true }, + { 86147, true }, + { 86159, true }, + { 86177, true }, + { 86189, true }, + { 86200, true }, + { 86207, true }, + { 86219, true }, + { 86228, true }, + { 86237, true }, + { 86253, true }, + { 86260, true }, + { 86268, true }, + { 86282, false }, + { 86293, true }, + { 86304, true }, + { 86319, true }, + { 86329, true }, + { 86342, true }, + { 86354, true }, + { 86365, true }, + { 86375, false }, + { 86385, true }, + { 86399, true }, + { 86419, true }, + { 86434, true }, + { 86447, true }, + { 86459, true }, + { 86474, true }, + { 86487, true }, + { 86514, true }, + { 86528, true }, { 86542, true }, - { 86552, true }, - { 86565, true }, - { 86582, true }, - { 86595, true }, - { 86605, true }, - { 86632, true }, - { 86642, true }, - { 86651, true }, - { 86658, true }, - { 86674, true }, - { 86685, true }, - { 86696, true }, + { 86559, true }, + { 86579, true }, + { 86594, true }, + { 86604, true }, + { 86617, true }, + { 86634, true }, + { 86647, true }, + { 86657, true }, + { 86684, true }, + { 86694, true }, + { 86703, true }, { 86710, true }, - { 86721, true }, - { 86731, true }, - { 86752, true }, - { 86760, true }, - { 86771, true }, - { 86791, true }, - { 86803, true }, - { 86826, true }, - { 86840, true }, - { 86859, true }, - { 86876, true }, + { 86726, true }, + { 86737, true }, + { 86748, true }, + { 86762, true }, + { 86773, true }, + { 86783, true }, + { 86804, true }, + { 86815, true }, + { 86835, true }, + { 86847, true }, + { 86870, true }, { 86884, true }, - { 86912, true }, - { 86930, true }, - { 86940, true }, - { 86949, true }, - { 86965, true }, - { 86983, true }, - { 87015, true }, - { 87031, true }, - { 87052, true }, - { 87069, true }, - { 87083, true }, - { 87103, true }, - { 87116, true }, - { 87128, true }, - { 87149, true }, - { 87163, true }, - { 87182, true }, - { 87200, true }, - { 87211, true }, - { 87219, true }, - { 87231, true }, - { 87245, true }, - { 87257, true }, - { 87270, true }, - { 87279, true }, + { 86903, true }, + { 86920, true }, + { 86928, true }, + { 86956, true }, + { 86974, true }, + { 86984, true }, + { 86993, true }, + { 87009, true }, + { 87027, true }, + { 87059, true }, + { 87075, true }, + { 87096, true }, + { 87113, true }, + { 87127, true }, + { 87147, true }, + { 87160, true }, + { 87172, true }, + { 87193, true }, + { 87207, true }, + { 87226, true }, + { 87244, true }, + { 87255, true }, + { 87263, true }, + { 87275, true }, { 87289, true }, - { 87300, true }, - { 87312, true }, - { 87322, true }, - { 87345, false }, - { 87360, true }, - { 87375, true }, - { 87394, true }, - { 87412, true }, - { 87426, true }, - { 87440, true }, - { 87450, true }, - { 87463, true }, - { 87476, true }, - { 87488, true }, - { 87502, true }, - { 87518, true }, - { 87533, true }, - { 87542, true }, - { 87558, true }, - { 87585, true }, - { 87600, true }, - { 87613, true }, + { 87301, true }, + { 87314, true }, + { 87323, true }, + { 87333, true }, + { 87344, true }, + { 87356, true }, + { 87366, true }, + { 87389, false }, + { 87404, true }, + { 87419, true }, + { 87438, true }, + { 87456, true }, + { 87470, true }, + { 87484, true }, + { 87494, true }, + { 87507, true }, + { 87520, true }, + { 87532, true }, + { 87546, true }, + { 87562, true }, + { 87577, true }, + { 87586, true }, + { 87602, true }, { 87629, true }, - { 87646, false }, - { 87663, true }, - { 87685, true }, + { 87644, true }, + { 87657, true }, + { 87673, true }, + { 87690, false }, { 87707, true }, { 87729, true }, - { 87741, true }, - { 87755, true }, - { 87768, true }, - { 87777, true }, - { 87793, true }, - { 87810, true }, - { 87824, true }, + { 87751, true }, + { 87773, true }, + { 87785, true }, + { 87799, true }, + { 87812, true }, + { 87821, true }, { 87837, true }, - { 87851, true }, - { 87863, true }, - { 87876, true }, - { 87889, true }, - { 87899, true }, - { 87913, false }, - { 87925, true }, - { 87938, true }, - { 87960, true }, + { 87854, true }, + { 87868, true }, + { 87881, true }, + { 87895, true }, + { 87907, true }, + { 87920, true }, + { 87933, true }, + { 87943, true }, + { 87957, false }, + { 87969, true }, { 87982, true }, - { 87993, false }, - { 88008, true }, - { 88019, false }, - { 88039, true }, - { 88056, true }, - { 88075, true }, - { 88102, true }, - { 88121, true }, - { 88133, true }, - { 88154, true }, - { 88179, true }, + { 88004, true }, + { 88026, true }, + { 88037, false }, + { 88052, true }, + { 88063, false }, + { 88083, true }, + { 88100, true }, + { 88119, true }, + { 88146, true }, + { 88165, true }, + { 88177, true }, { 88198, true }, - { 88213, true }, - { 88233, false }, - { 88241, true }, - { 88253, true }, - { 88265, true }, - { 88279, true }, - { 88289, true }, - { 88302, true }, - { 88320, true }, - { 88334, true }, - { 88341, true }, - { 88348, true }, - { 88360, true }, - { 88371, true }, - { 88384, true }, - { 88398, true }, + { 88223, true }, + { 88242, true }, + { 88257, true }, + { 88277, false }, + { 88285, true }, + { 88297, true }, + { 88309, true }, + { 88323, true }, + { 88333, true }, + { 88346, true }, + { 88364, true }, + { 88378, true }, + { 88385, true }, + { 88392, true }, + { 88404, true }, { 88415, true }, - { 88429, true }, - { 88445, true }, - { 88456, true }, - { 88463, true }, - { 88476, true }, + { 88428, true }, + { 88442, true }, + { 88459, true }, + { 88473, true }, { 88489, true }, - { 88498, true }, - { 88512, true }, - { 88528, false }, - { 88543, true }, - { 88571, true }, - { 88586, true }, - { 88607, true }, - { 88621, true }, - { 88635, true }, - { 88656, true }, - { 88668, true }, - { 88678, true }, - { 88689, true }, - { 88699, true }, - { 88712, true }, - { 88722, true }, - { 88735, true }, - { 88752, true }, - { 88771, true }, - { 88790, true }, - { 88808, true }, - { 88819, true }, + { 88500, true }, + { 88507, true }, + { 88520, true }, + { 88533, true }, + { 88542, true }, + { 88556, true }, + { 88572, false }, + { 88587, true }, + { 88615, true }, + { 88630, true }, + { 88651, true }, + { 88665, true }, + { 88679, true }, + { 88700, true }, + { 88716, true }, + { 88728, true }, + { 88738, true }, + { 88749, true }, + { 88759, true }, + { 88772, true }, + { 88782, true }, + { 88795, true }, + { 88812, true }, { 88831, true }, - { 88843, true }, - { 88854, true }, - { 88866, true }, - { 88881, true }, - { 88907, true }, - { 88918, true }, - { 88929, true }, - { 88940, true }, - { 88952, true }, - { 88963, true }, - { 88976, true }, - { 88985, true }, - { 88994, true }, - { 89007, true }, - { 89014, false }, - { 89022, true }, - { 89030, true }, + { 88850, true }, + { 88868, true }, + { 88879, true }, + { 88891, true }, + { 88903, true }, + { 88914, true }, + { 88926, true }, + { 88941, true }, + { 88967, true }, + { 88978, true }, + { 88989, true }, + { 89000, true }, + { 89012, true }, + { 89023, true }, + { 89036, true }, { 89045, true }, - { 89058, true }, - { 89069, true }, - { 89083, false }, - { 89095, true }, - { 89119, true }, - { 89134, true }, - { 89147, true }, - { 89161, true }, + { 89054, true }, + { 89067, true }, + { 89074, false }, + { 89082, true }, + { 89090, true }, + { 89105, true }, + { 89118, true }, + { 89129, true }, + { 89143, false }, + { 89155, true }, { 89179, true }, - { 89187, true }, - { 89204, true }, - { 89229, true }, - { 89249, true }, - { 89273, true }, - { 89285, true }, - { 89298, true }, - { 89314, true }, - { 89323, true }, - { 89339, true }, - { 89357, true }, - { 89372, true }, - { 89392, true }, - { 89405, true }, - { 89421, true }, - { 89435, true }, - { 89451, true }, - { 89471, true }, - { 89489, true }, - { 89508, true }, - { 89525, true }, - { 89541, true }, - { 89551, true }, - { 89580, true }, - { 89600, true }, - { 89617, true }, - { 89633, true }, - { 89642, true }, - { 89655, true }, - { 89667, true }, - { 89676, false }, - { 89690, true }, - { 89707, true }, - { 89740, true }, - { 89760, true }, - { 89772, true }, - { 89785, true }, + { 89194, true }, + { 89207, true }, + { 89221, true }, + { 89239, true }, + { 89247, true }, + { 89264, true }, + { 89289, true }, + { 89309, true }, + { 89333, true }, + { 89345, true }, + { 89358, true }, + { 89374, true }, + { 89383, true }, + { 89399, true }, + { 89417, true }, + { 89432, true }, + { 89452, true }, + { 89465, true }, + { 89481, true }, + { 89495, true }, + { 89511, true }, + { 89531, true }, + { 89549, true }, + { 89568, true }, + { 89585, true }, + { 89601, true }, + { 89611, true }, + { 89640, true }, + { 89660, true }, + { 89677, true }, + { 89693, true }, + { 89702, true }, + { 89715, true }, + { 89727, true }, + { 89736, false }, + { 89750, true }, + { 89767, true }, { 89800, true }, - { 89811, true }, - { 89828, true }, - { 89840, true }, - { 89852, true }, - { 89864, true }, - { 89873, true }, - { 89890, true }, - { 89904, true }, - { 89925, true }, - { 89940, true }, - { 89958, true }, - { 89979, true }, - { 89993, true }, - { 90007, true }, + { 89820, true }, + { 89832, true }, + { 89845, true }, + { 89860, true }, + { 89871, true }, + { 89888, true }, + { 89900, true }, + { 89912, true }, + { 89924, true }, + { 89933, true }, + { 89950, true }, + { 89964, true }, + { 89985, true }, + { 90000, true }, { 90018, true }, - { 90034, true }, - { 90046, true }, - { 90057, true }, - { 90071, true }, - { 90080, true }, + { 90039, true }, + { 90053, true }, + { 90067, true }, + { 90078, true }, { 90089, true }, - { 90104, true }, - { 90113, true }, - { 90121, true }, - { 90132, true }, - { 90143, true }, - { 90157, true }, - { 90172, true }, - { 90190, true }, - { 90204, true }, + { 90105, true }, + { 90117, true }, + { 90128, true }, + { 90142, true }, + { 90151, true }, + { 90160, true }, + { 90175, true }, + { 90184, true }, + { 90192, true }, + { 90203, true }, { 90214, true }, - { 90224, true }, - { 90232, true }, - { 90241, true }, - { 90253, true }, - { 90262, true }, - { 90276, true }, - { 90299, true }, - { 90314, true }, - { 90322, true }, - { 90335, true }, + { 90228, true }, + { 90243, true }, + { 90261, true }, + { 90275, true }, + { 90285, true }, + { 90295, true }, + { 90303, true }, + { 90312, true }, + { 90324, true }, + { 90333, true }, { 90347, true }, - { 90359, true }, - { 90372, true }, - { 90382, false }, - { 90391, false }, - { 90400, false }, - { 90409, true }, - { 90426, true }, - { 90445, true }, - { 90468, true }, - { 90487, true }, - { 90502, true }, + { 90370, true }, + { 90385, true }, + { 90393, true }, + { 90406, true }, + { 90418, true }, + { 90430, true }, + { 90443, true }, + { 90453, false }, + { 90462, false }, + { 90471, false }, + { 90480, true }, + { 90497, true }, { 90516, true }, - { 90531, true }, - { 90550, true }, - { 90563, true }, - { 90579, true }, - { 90592, true }, - { 90609, true }, - { 90625, true }, - { 90640, true }, + { 90539, true }, + { 90558, true }, + { 90573, true }, + { 90587, true }, + { 90602, true }, + { 90621, true }, + { 90634, true }, { 90650, true }, - { 90666, true }, - { 90685, true }, - { 90700, true }, - { 90719, true }, - { 90727, true }, - { 90741, true }, - { 90755, true }, - { 90769, false }, - { 90789, true }, - { 90802, true }, - { 90814, true }, - { 90829, true }, - { 90847, true }, - { 90858, true }, - { 90868, true }, - { 90882, true }, - { 90895, true }, - { 90911, true }, - { 90926, true }, - { 90951, true }, - { 90977, true }, - { 90992, true }, - { 91004, true }, - { 91029, true }, - { 91036, true }, - { 91058, true }, - { 91073, true }, - { 91081, true }, - { 91089, true }, + { 90663, true }, + { 90680, true }, + { 90696, true }, + { 90711, true }, + { 90721, true }, + { 90737, true }, + { 90756, true }, + { 90771, true }, + { 90790, true }, + { 90798, true }, + { 90812, true }, + { 90826, true }, + { 90840, false }, + { 90860, true }, + { 90873, true }, + { 90885, true }, + { 90900, true }, + { 90918, true }, + { 90929, true }, + { 90939, true }, + { 90953, true }, + { 90966, true }, + { 90982, true }, + { 90997, true }, + { 91022, true }, + { 91048, true }, + { 91063, true }, + { 91075, true }, { 91100, true }, - { 91116, true }, - { 91133, true }, - { 91147, true }, - { 91161, true }, - { 91177, true }, + { 91107, true }, + { 91129, true }, + { 91144, true }, + { 91152, true }, + { 91160, true }, + { 91171, true }, + { 91187, true }, { 91204, true }, { 91218, true }, - { 91227, true }, - { 91240, true }, - { 91252, true }, + { 91232, true }, + { 91248, true }, { 91275, true }, - { 91295, true }, - { 91314, true }, - { 91336, false }, - { 91347, true }, - { 91364, true }, - { 91378, true }, - { 91398, true }, - { 91423, true }, - { 91439, true }, - { 91451, true }, - { 91463, true }, - { 91485, true }, - { 91500, true }, - { 91515, true }, - { 91532, true }, - { 91547, true }, - { 91564, true }, - { 91579, true }, - { 91594, true }, - { 91606, false }, - { 91616, true }, - { 91633, true }, - { 91644, false }, - { 91659, true }, - { 91676, true }, - { 91690, true }, - { 91703, true }, - { 91716, true }, - { 91728, true }, - { 91740, true }, - { 91750, true }, - { 91762, true }, - { 91777, true }, - { 91789, true }, - { 91800, true }, - { 91820, true }, - { 91832, true }, - { 91843, true }, - { 91868, true }, - { 91877, true }, - { 91885, true }, - { 91898, true }, - { 91921, true }, - { 91938, true }, - { 91949, true }, - { 91965, false }, - { 91977, true }, - { 91985, true }, - { 91995, true }, - { 92010, true }, - { 92024, true }, - { 92034, false }, - { 92052, true }, - { 92076, true }, - { 92088, true }, - { 92116, true }, - { 92132, true }, - { 92144, true }, - { 92158, true }, - { 92186, true }, - { 92200, true }, - { 92216, true }, - { 92233, true }, - { 92247, true }, - { 92264, true }, - { 92286, true }, - { 92296, true }, - { 92306, true }, + { 91289, true }, + { 91298, true }, + { 91311, true }, + { 91323, true }, + { 91346, true }, + { 91366, true }, + { 91385, true }, + { 91407, false }, + { 91418, true }, + { 91435, true }, + { 91449, true }, + { 91469, true }, + { 91494, true }, + { 91510, true }, + { 91522, true }, + { 91534, true }, + { 91556, true }, + { 91571, true }, + { 91586, true }, + { 91603, true }, + { 91618, true }, + { 91635, true }, + { 91650, true }, + { 91665, true }, + { 91677, false }, + { 91687, true }, + { 91704, true }, + { 91715, false }, + { 91730, true }, + { 91747, true }, + { 91761, true }, + { 91774, true }, + { 91787, true }, + { 91799, true }, + { 91811, true }, + { 91821, true }, + { 91833, true }, + { 91848, true }, + { 91860, true }, + { 91880, true }, + { 91892, true }, + { 91903, true }, + { 91928, true }, + { 91937, true }, + { 91945, true }, + { 91958, true }, + { 91981, true }, + { 91998, true }, + { 92009, true }, + { 92025, false }, + { 92037, true }, + { 92045, true }, + { 92055, true }, + { 92070, true }, + { 92084, true }, + { 92094, false }, + { 92112, true }, + { 92136, true }, + { 92148, true }, + { 92176, true }, + { 92192, true }, + { 92204, true }, + { 92218, true }, + { 92246, true }, + { 92260, true }, + { 92276, true }, + { 92293, true }, + { 92307, true }, { 92324, true }, - { 92343, true }, - { 92362, true }, - { 92387, true }, - { 92406, true }, - { 92423, true }, - { 92437, true }, - { 92450, true }, - { 92479, true }, - { 92509, true }, - { 92521, true }, - { 92530, true }, - { 92543, true }, - { 92554, true }, - { 92576, true }, - { 92587, true }, - { 92597, true }, - { 92613, true }, - { 92630, true }, - { 92653, true }, - { 92679, true }, - { 92693, true }, - { 92707, true }, - { 92726, false }, - { 92736, true }, - { 92748, true }, - { 92764, true }, - { 92772, true }, - { 92791, true }, - { 92803, false }, - { 92814, true }, - { 92822, true }, - { 92838, true }, - { 92852, true }, - { 92864, true }, - { 92877, true }, - { 92896, true }, - { 92905, true }, - { 92916, true }, - { 92928, true }, - { 92941, true }, - { 92951, true }, - { 92964, true }, + { 92346, true }, + { 92356, true }, + { 92366, true }, + { 92384, true }, + { 92403, true }, + { 92422, true }, + { 92447, true }, + { 92466, true }, + { 92483, true }, + { 92497, true }, + { 92510, true }, + { 92539, true }, + { 92569, true }, + { 92581, true }, + { 92590, true }, + { 92603, true }, + { 92614, true }, + { 92636, true }, + { 92647, true }, + { 92657, true }, + { 92673, true }, + { 92690, true }, + { 92713, true }, + { 92739, true }, + { 92753, true }, + { 92767, true }, + { 92786, false }, + { 92796, true }, + { 92808, true }, + { 92824, true }, + { 92832, true }, + { 92851, true }, + { 92863, false }, + { 92874, true }, + { 92882, true }, + { 92898, true }, + { 92912, true }, + { 92924, true }, + { 92937, true }, + { 92956, true }, + { 92965, true }, { 92976, true }, - { 92992, true }, - { 93000, false }, - { 93008, true }, - { 93030, true }, - { 93042, true }, - { 93050, true }, - { 93066, true }, - { 93076, true }, + { 92988, true }, + { 93001, true }, + { 93011, true }, + { 93024, true }, + { 93036, true }, + { 93052, true }, + { 93060, false }, + { 93068, true }, { 93090, true }, - { 93107, true }, - { 93117, true }, - { 93132, true }, - { 93142, true }, - { 93152, true }, - { 93162, true }, - { 93174, true }, - { 93197, true }, - { 93211, true }, - { 93226, true }, - { 93239, true }, - { 93251, true }, - { 93260, true }, + { 93102, true }, + { 93110, true }, + { 93126, true }, + { 93136, true }, + { 93150, true }, + { 93167, true }, + { 93177, true }, + { 93192, true }, + { 93202, true }, + { 93212, true }, + { 93222, true }, + { 93234, true }, + { 93257, true }, { 93271, true }, - { 93284, true }, + { 93286, true }, { 93299, true }, - { 93314, true }, - { 93324, true }, + { 93311, true }, + { 93320, true }, + { 93331, true }, { 93344, true }, - { 93358, true }, - { 93381, true }, - { 93393, true }, - { 93408, true }, - { 93419, true }, + { 93359, true }, + { 93374, true }, + { 93384, true }, + { 93404, true }, + { 93418, true }, { 93441, true }, - { 93452, true }, - { 93462, true }, - { 93476, true }, - { 93484, true }, - { 93493, true }, + { 93453, true }, + { 93468, true }, + { 93479, true }, { 93501, true }, - { 93516, true }, - { 93526, true }, + { 93512, true }, + { 93522, true }, { 93536, true }, - { 93551, true }, - { 93560, true }, - { 93568, true }, - { 93577, true }, - { 93588, true }, - { 93600, true }, - { 93612, true }, - { 93622, true }, - { 93632, true }, - { 93644, true }, - { 93658, true }, - { 93673, true }, + { 93544, true }, + { 93553, true }, + { 93561, true }, + { 93576, true }, + { 93586, true }, + { 93596, true }, + { 93611, true }, + { 93620, true }, + { 93628, true }, + { 93636, true }, + { 93645, true }, + { 93656, true }, + { 93668, true }, + { 93680, true }, { 93690, true }, - { 93702, true }, - { 93713, true }, - { 93720, true }, - { 93734, true }, - { 93745, true }, - { 93756, true }, - { 93764, true }, - { 93775, true }, - { 93790, true }, - { 93804, true }, - { 93818, true }, - { 93833, true }, - { 93848, true }, - { 93859, true }, - { 93870, true }, - { 93885, true }, - { 93898, true }, - { 93911, true }, - { 93918, true }, + { 93700, true }, + { 93712, true }, + { 93726, true }, + { 93741, true }, + { 93758, true }, + { 93770, true }, + { 93781, true }, + { 93788, true }, + { 93802, true }, + { 93813, true }, + { 93824, true }, + { 93832, true }, + { 93843, true }, + { 93858, true }, + { 93872, true }, + { 93886, true }, + { 93901, true }, + { 93916, true }, + { 93927, true }, { 93938, true }, - { 93947, true }, - { 93959, true }, - { 93972, true }, - { 93989, true }, - { 94004, true }, - { 94019, true }, - { 94039, true }, - { 94059, true }, - { 94068, true }, - { 94084, true }, - { 94096, true }, - { 94105, true }, - { 94115, true }, - { 94124, true }, - { 94134, false }, - { 94141, true }, + { 93953, true }, + { 93966, true }, + { 93979, true }, + { 93986, true }, + { 94006, true }, + { 94015, true }, + { 94027, true }, + { 94040, true }, + { 94057, true }, + { 94072, true }, + { 94087, true }, + { 94107, true }, + { 94127, true }, + { 94136, true }, { 94152, true }, - { 94165, true }, - { 94180, true }, - { 94197, true }, - { 94213, true }, - { 94234, true }, - { 94241, true }, - { 94261, true }, - { 94271, true }, - { 94282, false }, - { 94295, true }, + { 94164, true }, + { 94173, true }, + { 94183, true }, + { 94192, true }, + { 94202, false }, + { 94209, true }, + { 94220, true }, + { 94233, true }, + { 94248, true }, + { 94265, true }, + { 94281, true }, + { 94302, true }, { 94309, true }, - { 94319, true }, - { 94331, true }, - { 94351, false }, - { 94367, true }, - { 94376, false }, - { 94385, true }, - { 94393, true }, - { 94405, true }, - { 94412, true }, - { 94430, true }, - { 94442, true }, + { 94329, true }, + { 94339, true }, + { 94350, false }, + { 94363, true }, + { 94377, true }, + { 94387, true }, + { 94399, true }, + { 94419, false }, + { 94435, true }, + { 94444, false }, + { 94453, true }, { 94461, true }, - { 94474, true }, - { 94487, false }, - { 94496, true }, - { 94505, true }, - { 94516, true }, - { 94536, true }, - { 94553, true }, - { 94566, true }, - { 94582, false }, - { 94597, true }, - { 94611, true }, - { 94624, true }, - { 94643, true }, - { 94656, true }, - { 94673, true }, - { 94684, true }, - { 94701, false }, - { 94722, false }, - { 94738, false }, - { 94758, true }, - { 94770, true }, - { 94793, true }, - { 94805, true }, - { 94818, true }, - { 94830, false }, - { 94841, true }, - { 94850, true }, + { 94473, true }, + { 94480, true }, + { 94498, true }, + { 94510, true }, + { 94529, true }, + { 94542, true }, + { 94555, false }, + { 94564, true }, + { 94573, true }, + { 94584, true }, + { 94604, true }, + { 94621, true }, + { 94634, true }, + { 94650, false }, + { 94665, true }, + { 94679, true }, + { 94692, true }, + { 94711, true }, + { 94724, true }, + { 94741, true }, + { 94752, true }, + { 94769, false }, + { 94790, false }, + { 94806, false }, + { 94826, true }, + { 94838, true }, { 94861, true }, - { 94876, true }, - { 94894, true }, - { 94921, true }, - { 94931, true }, - { 94939, true }, - { 94953, true }, - { 94965, true }, - { 94980, true }, - { 94990, true }, - { 95001, true }, - { 95010, true }, - { 95029, true }, - { 95042, true }, - { 95052, true }, - { 95060, true }, - { 95067, true }, - { 95080, true }, - { 95090, true }, - { 95099, false }, - { 95109, true }, - { 95118, true }, - { 95130, true }, - { 95141, true }, - { 95152, true }, - { 95162, false }, - { 95179, true }, - { 95188, true }, + { 94873, true }, + { 94886, true }, + { 94898, false }, + { 94909, true }, + { 94918, true }, + { 94929, true }, + { 94944, true }, + { 94962, true }, + { 94989, true }, + { 94999, true }, + { 95007, true }, + { 95021, true }, + { 95033, true }, + { 95048, true }, + { 95058, true }, + { 95069, true }, + { 95078, true }, + { 95097, true }, + { 95110, true }, + { 95120, true }, + { 95128, true }, + { 95135, true }, + { 95148, true }, + { 95158, true }, + { 95167, false }, + { 95177, true }, + { 95186, true }, { 95198, true }, - { 95206, true }, - { 95216, true }, - { 95226, true }, - { 95239, true }, - { 95251, true }, + { 95209, true }, + { 95220, true }, + { 95230, false }, + { 95247, true }, + { 95256, true }, { 95266, true }, - { 95278, true }, + { 95274, true }, + { 95284, true }, { 95294, true }, - { 95308, true }, - { 95322, true }, - { 95329, true }, - { 95341, true }, - { 95350, true }, - { 95366, true }, - { 95380, true }, - { 95391, true }, - { 95400, true }, - { 95414, true }, - { 95426, true }, - { 95438, true }, + { 95307, true }, + { 95319, true }, + { 95334, true }, + { 95346, true }, + { 95362, true }, + { 95376, true }, + { 95390, true }, + { 95397, true }, + { 95409, true }, + { 95418, true }, + { 95434, true }, { 95448, true }, - { 95458, true }, + { 95459, true }, { 95468, true }, - { 95480, true }, - { 95490, true }, - { 95500, true }, - { 95518, true }, - { 95533, true }, - { 95544, true }, - { 95557, true }, - { 95564, true }, - { 95581, true }, - { 95591, true }, + { 95482, true }, + { 95494, true }, + { 95506, true }, + { 95516, true }, + { 95526, true }, + { 95536, true }, + { 95548, true }, + { 95558, true }, + { 95568, true }, + { 95586, true }, { 95601, true }, { 95612, true }, - { 95621, true }, - { 95643, true }, - { 95668, true }, - { 95687, true }, - { 95694, true }, - { 95708, true }, - { 95723, true }, - { 95733, true }, - { 95749, true }, - { 95771, true }, - { 95785, true }, - { 95798, true }, - { 95812, true }, - { 95835, true }, - { 95846, true }, - { 95855, true }, + { 95625, true }, + { 95632, true }, + { 95649, true }, + { 95659, true }, + { 95669, true }, + { 95680, true }, + { 95689, true }, + { 95711, true }, + { 95736, true }, + { 95755, true }, + { 95762, true }, + { 95776, true }, + { 95791, true }, + { 95801, true }, + { 95817, true }, + { 95839, true }, + { 95853, true }, { 95866, true }, { 95880, true }, - { 95891, true }, { 95903, true }, - { 95922, true }, - { 95935, true }, - { 95944, true }, - { 95960, true }, - { 95973, true }, - { 95985, true }, - { 95998, true }, - { 96006, true }, - { 96018, true }, - { 96027, true }, - { 96042, true }, - { 96051, true }, - { 96063, true }, - { 96073, true }, - { 96088, true }, - { 96096, true }, - { 96111, true }, - { 96122, true }, - { 96133, true }, - { 96142, true }, - { 96157, true }, - { 96171, true }, - { 96185, true }, - { 96205, true }, - { 96228, true }, + { 95914, true }, + { 95923, true }, + { 95934, true }, + { 95948, true }, + { 95959, true }, + { 95971, true }, + { 95990, true }, + { 96003, true }, + { 96012, true }, + { 96028, true }, + { 96041, true }, + { 96053, true }, + { 96066, true }, + { 96074, true }, + { 96086, true }, + { 96095, true }, + { 96110, true }, + { 96119, true }, + { 96131, true }, + { 96141, true }, + { 96156, true }, + { 96164, true }, + { 96179, true }, + { 96190, true }, + { 96201, true }, + { 96210, true }, + { 96225, true }, + { 96239, true }, { 96253, true }, - { 96272, true }, - { 96286, true }, - { 96302, true }, - { 96316, true }, - { 96332, true }, - { 96350, true }, - { 96367, true }, + { 96273, true }, + { 96296, true }, + { 96321, true }, + { 96340, true }, + { 96354, true }, + { 96370, true }, { 96384, true }, - { 96399, true }, - { 96416, true }, - { 96433, true }, - { 96448, true }, - { 96457, true }, - { 96470, true }, - { 96487, true }, - { 96500, true }, - { 96510, true }, - { 96521, true }, - { 96532, true }, - { 96542, true }, - { 96554, true }, - { 96575, true }, - { 96589, false }, - { 96609, false }, - { 96621, true }, - { 96634, true }, - { 96644, true }, - { 96657, true }, - { 96670, true }, - { 96686, true }, - { 96703, true }, - { 96715, true }, - { 96729, true }, - { 96743, true }, - { 96759, true }, + { 96400, true }, + { 96418, true }, + { 96435, true }, + { 96452, true }, + { 96467, true }, + { 96484, true }, + { 96501, true }, + { 96516, true }, + { 96525, true }, + { 96538, true }, + { 96555, true }, + { 96568, true }, + { 96578, true }, + { 96589, true }, + { 96600, true }, + { 96610, true }, + { 96622, true }, + { 96643, true }, + { 96657, false }, + { 96677, false }, + { 96689, true }, + { 96702, true }, + { 96712, true }, + { 96725, true }, + { 96738, true }, + { 96754, true }, { 96771, true }, + { 96783, true }, { 96797, true }, - { 96818, true }, - { 96839, false }, - { 96853, true }, - { 96871, true }, - { 96888, true }, - { 96900, true }, - { 96920, true }, - { 96936, true }, - { 96948, true }, - { 96970, true }, - { 96992, true }, - { 97011, true }, - { 97028, true }, - { 97040, true }, - { 97051, true }, - { 97064, true }, - { 97084, true }, - { 97095, true }, - { 97120, true }, - { 97135, true }, + { 96811, true }, + { 96827, true }, + { 96839, true }, + { 96865, true }, + { 96886, true }, + { 96907, false }, + { 96921, true }, + { 96939, true }, + { 96956, true }, + { 96968, true }, + { 96988, true }, + { 97004, true }, + { 97016, true }, + { 97038, true }, + { 97060, true }, + { 97079, true }, + { 97096, true }, + { 97108, true }, + { 97119, true }, + { 97132, true }, { 97152, true }, - { 97173, true }, - { 97193, true }, - { 97215, false }, - { 97228, true }, - { 97239, true }, - { 97255, true }, - { 97270, true }, - { 97285, true }, - { 97305, true }, - { 97317, true }, - { 97335, true }, - { 97360, true }, - { 97383, true }, - { 97399, true }, - { 97416, true }, - { 97427, true }, - { 97439, true }, - { 97453, true }, - { 97469, false }, - { 97482, true }, + { 97163, true }, + { 97188, true }, + { 97203, true }, + { 97220, true }, + { 97241, true }, + { 97261, true }, + { 97283, false }, + { 97296, true }, + { 97307, true }, + { 97323, true }, + { 97338, true }, + { 97353, true }, + { 97373, true }, + { 97385, true }, + { 97403, true }, + { 97428, true }, + { 97451, true }, + { 97467, true }, + { 97484, true }, { 97495, true }, { 97507, true }, - { 97518, true }, - { 97535, true }, - { 97547, true }, - { 97557, false }, - { 97566, true }, - { 97576, true }, - { 97587, true }, - { 97610, true }, - { 97623, false }, - { 97636, true }, - { 97647, true }, - { 97661, true }, - { 97677, true }, - { 97685, true }, + { 97521, true }, + { 97537, false }, + { 97550, true }, + { 97563, true }, + { 97575, true }, + { 97586, true }, + { 97603, true }, + { 97615, true }, + { 97625, false }, + { 97634, true }, + { 97644, true }, + { 97655, true }, + { 97678, true }, + { 97691, false }, { 97704, true }, - { 97727, true }, - { 97741, true }, - { 97756, true }, - { 97766, true }, - { 97779, true }, - { 97794, true }, - { 97810, true }, - { 97826, true }, - { 97843, true }, - { 97856, true }, - { 97868, true }, - { 97881, true }, - { 97893, true }, - { 97908, true }, - { 97925, true }, - { 97934, true }, - { 97955, true }, - { 97972, true }, - { 97983, false }, - { 98001, true }, - { 98016, true }, - { 98028, true }, + { 97715, true }, + { 97729, true }, + { 97745, true }, + { 97753, true }, + { 97772, true }, + { 97795, true }, + { 97809, true }, + { 97824, true }, + { 97834, true }, + { 97847, true }, + { 97862, true }, + { 97878, true }, + { 97894, true }, + { 97911, true }, + { 97924, true }, + { 97936, true }, + { 97949, true }, + { 97961, true }, + { 97976, true }, + { 97993, true }, + { 98002, true }, + { 98023, true }, { 98040, true }, - { 98052, true }, - { 98071, true }, - { 98106, true }, - { 98128, true }, - { 98142, true }, - { 98159, true }, - { 98172, true }, - { 98189, true }, - { 98206, false }, - { 98225, true }, - { 98243, true }, - { 98274, true }, - { 98289, true }, - { 98302, true }, - { 98324, true }, - { 98336, true }, - { 98353, true }, + { 98051, false }, + { 98069, true }, + { 98084, true }, + { 98096, true }, + { 98108, true }, + { 98120, true }, + { 98139, true }, + { 98174, true }, + { 98196, true }, + { 98210, true }, + { 98227, true }, + { 98240, true }, + { 98257, true }, + { 98274, false }, + { 98293, true }, + { 98311, true }, + { 98342, true }, + { 98357, true }, { 98370, true }, { 98392, true }, - { 98408, true }, + { 98404, true }, { 98421, true }, - { 98433, true }, - { 98454, true }, - { 98473, true }, - { 98485, true }, - { 98502, true }, - { 98517, true }, - { 98534, true }, - { 98551, true }, - { 98567, true }, - { 98582, true }, - { 98598, true }, - { 98614, true }, - { 98638, true }, - { 98663, true }, - { 98685, true }, - { 98700, true }, - { 98727, true }, - { 98745, true }, - { 98762, true }, - { 98788, true }, - { 98803, true }, - { 98821, true }, - { 98842, true }, - { 98870, true }, + { 98438, true }, + { 98460, true }, + { 98476, true }, + { 98489, true }, + { 98501, true }, + { 98522, true }, + { 98541, true }, + { 98553, true }, + { 98570, true }, + { 98585, true }, + { 98602, true }, + { 98619, true }, + { 98635, true }, + { 98650, true }, + { 98666, true }, + { 98682, true }, + { 98706, true }, + { 98731, true }, + { 98753, true }, + { 98768, true }, + { 98795, true }, + { 98813, true }, + { 98830, true }, + { 98856, true }, + { 98871, true }, { 98889, true }, - { 98913, true }, - { 98937, true }, - { 98950, true }, - { 98963, true }, - { 98980, true }, - { 98995, true }, - { 99020, false }, - { 99034, true }, - { 99044, true }, + { 98910, true }, + { 98938, true }, + { 98957, true }, + { 98981, true }, + { 99005, true }, + { 99018, true }, + { 99031, true }, + { 99048, true }, { 99063, true }, - { 99079, true }, - { 99103, true }, - { 99118, true }, - { 99135, true }, - { 99145, true }, - { 99154, true }, - { 99169, true }, - { 99179, true }, - { 99191, true }, - { 99212, true }, - { 99225, true }, - { 99238, true }, - { 99256, true }, - { 99269, true }, - { 99283, true }, - { 99302, true }, - { 99312, true }, - { 99328, true }, - { 99344, true }, - { 99357, true }, - { 99376, true }, - { 99394, true }, - { 99408, true }, - { 99418, false }, - { 99430, true }, - { 99438, true }, - { 99448, true }, - { 99458, true }, - { 99470, true }, - { 99484, false }, - { 99497, true }, - { 99505, true }, + { 99088, false }, + { 99102, true }, + { 99112, true }, + { 99131, true }, + { 99147, true }, + { 99171, true }, + { 99186, true }, + { 99203, true }, + { 99213, true }, + { 99222, true }, + { 99237, true }, + { 99247, true }, + { 99259, true }, + { 99280, true }, + { 99293, true }, + { 99306, true }, + { 99324, true }, + { 99337, true }, + { 99351, true }, + { 99370, true }, + { 99380, true }, + { 99396, true }, + { 99412, true }, + { 99425, true }, + { 99444, true }, + { 99462, true }, + { 99476, true }, + { 99486, false }, + { 99498, true }, + { 99506, true }, { 99516, true }, - { 99527, true }, - { 99535, true }, - { 99551, true }, - { 99563, true }, - { 99572, true }, - { 99588, false }, + { 99526, true }, + { 99538, true }, + { 99552, false }, + { 99565, true }, + { 99573, true }, + { 99584, true }, { 99595, true }, { 99603, true }, - { 99613, true }, - { 99625, true }, - { 99639, true }, - { 99648, true }, - { 99664, true }, - { 99672, true }, + { 99619, true }, + { 99631, true }, + { 99640, true }, + { 99656, false }, + { 99663, true }, + { 99671, true }, { 99681, true }, - { 99697, true }, - { 99707, false }, - { 99725, true }, - { 99737, true }, - { 99749, false }, - { 99760, true }, - { 99773, true }, - { 99783, true }, + { 99693, true }, + { 99707, true }, + { 99716, true }, + { 99732, true }, + { 99740, true }, + { 99749, true }, + { 99765, true }, + { 99775, false }, { 99793, true }, - { 99803, true }, - { 99813, true }, - { 99823, true }, - { 99842, true }, + { 99805, true }, + { 99817, false }, + { 99828, true }, + { 99841, true }, { 99851, true }, - { 99860, true }, - { 99880, true }, - { 99896, true }, - { 99904, true }, - { 99925, true }, - { 99933, true }, - { 99949, true }, - { 99966, true }, - { 99974, true }, - { 99985, true }, - { 99997, true }, - { 100008, true }, - { 100023, true }, + { 99861, true }, + { 99871, true }, + { 99881, true }, + { 99891, true }, + { 99910, true }, + { 99919, true }, + { 99928, true }, + { 99948, true }, + { 99964, true }, + { 99972, true }, + { 99993, true }, + { 100001, true }, + { 100017, true }, { 100034, true }, - { 100044, true }, + { 100042, true }, { 100053, true }, - { 100071, true }, - { 100087, true }, - { 100101, true }, - { 100129, true }, - { 100142, true }, - { 100151, true }, - { 100170, true }, - { 100185, true }, - { 100202, true }, - { 100225, true }, - { 100244, true }, + { 100065, true }, + { 100076, true }, + { 100091, true }, + { 100102, true }, + { 100112, true }, + { 100121, true }, + { 100139, true }, + { 100155, true }, + { 100169, true }, + { 100197, true }, + { 100210, true }, + { 100219, true }, + { 100238, true }, { 100253, true }, - { 100271, true }, - { 100286, true }, - { 100300, true }, - { 100323, true }, - { 100345, true }, - { 100355, true }, - { 100371, true }, - { 100387, true }, - { 100395, true }, - { 100405, true }, - { 100417, true }, - { 100430, true }, - { 100447, true }, - { 100464, true }, - { 100475, true }, - { 100493, true }, - { 100507, true }, - { 100521, true }, - { 100539, true }, - { 100558, true }, - { 100574, true }, - { 100585, true }, - { 100596, true }, - { 100614, true }, - { 100627, true }, - { 100638, true }, - { 100648, true }, - { 100661, true }, - { 100673, true }, - { 100684, true }, + { 100270, true }, + { 100293, true }, + { 100312, true }, + { 100321, true }, + { 100339, true }, + { 100354, true }, + { 100368, true }, + { 100391, true }, + { 100413, true }, + { 100423, true }, + { 100439, true }, + { 100455, true }, + { 100463, true }, + { 100473, true }, + { 100485, true }, + { 100498, true }, + { 100515, true }, + { 100532, true }, + { 100543, true }, + { 100561, true }, + { 100575, true }, + { 100589, true }, + { 100607, true }, + { 100626, true }, + { 100642, true }, + { 100653, true }, + { 100664, true }, + { 100682, true }, { 100695, true }, { 100706, true }, { 100716, true }, - { 100725, true }, - { 100742, true }, - { 100761, true }, + { 100729, true }, + { 100741, true }, + { 100752, true }, + { 100763, true }, { 100774, true }, - { 100787, true }, - { 100806, true }, - { 100823, true }, - { 100848, true }, - { 100880, true }, - { 100894, true }, - { 100906, true }, - { 100930, true }, - { 100953, true }, - { 100985, true }, - { 101010, true }, - { 101023, true }, - { 101049, true }, - { 101068, true }, - { 101082, true }, - { 101096, true }, - { 101109, true }, - { 101124, true }, - { 101139, true }, - { 101153, true }, - { 101167, false }, - { 101187, true }, - { 101200, true }, - { 101217, true }, - { 101232, true }, - { 101249, true }, - { 101258, true }, - { 101267, true }, - { 101283, true }, - { 101303, true }, - { 101322, true }, - { 101331, true }, - { 101340, true }, + { 100784, true }, + { 100793, true }, + { 100810, true }, + { 100829, true }, + { 100842, true }, + { 100855, true }, + { 100874, true }, + { 100891, true }, + { 100916, true }, + { 100948, true }, + { 100962, true }, + { 100974, true }, + { 100998, true }, + { 101021, true }, + { 101053, true }, + { 101078, true }, + { 101091, true }, + { 101117, true }, + { 101136, true }, + { 101150, true }, + { 101164, true }, + { 101177, true }, + { 101192, true }, + { 101207, true }, + { 101221, true }, + { 101235, false }, + { 101255, true }, + { 101268, true }, + { 101285, true }, + { 101300, true }, + { 101317, true }, + { 101326, true }, + { 101335, true }, { 101351, true }, - { 101360, true }, - { 101368, true }, - { 101377, true }, - { 101388, true }, - { 101401, true }, - { 101413, true }, - { 101426, true }, - { 101435, true }, - { 101448, true }, - { 101458, true }, - { 101471, true }, - { 101484, true }, - { 101495, true }, - { 101506, true }, - { 101517, true }, + { 101371, true }, + { 101390, true }, + { 101399, true }, + { 101408, true }, + { 101419, true }, + { 101428, true }, + { 101436, true }, + { 101445, true }, + { 101456, true }, + { 101469, true }, + { 101481, true }, + { 101494, true }, + { 101503, true }, + { 101516, true }, { 101526, true }, - { 101535, true }, - { 101545, true }, - { 101562, true }, - { 101579, true }, - { 101588, true }, + { 101539, true }, + { 101552, true }, + { 101563, true }, + { 101574, true }, + { 101585, true }, + { 101594, true }, { 101603, true }, - { 101622, true }, - { 101634, true }, + { 101613, true }, + { 101630, true }, { 101647, true }, - { 101664, false }, - { 101677, true }, - { 101686, true }, - { 101700, true }, - { 101723, false }, - { 101735, true }, - { 101746, true }, - { 101763, true }, - { 101777, true }, - { 101788, true }, - { 101805, true }, - { 101826, true }, - { 101837, true }, - { 101848, true }, - { 101855, true }, - { 101866, true }, - { 101873, true }, - { 101883, true }, - { 101895, true }, - { 101905, true }, - { 101914, true }, + { 101656, true }, + { 101671, true }, + { 101690, false }, + { 101702, true }, + { 101715, true }, + { 101732, false }, + { 101745, true }, + { 101754, true }, + { 101777, false }, + { 101789, true }, + { 101800, true }, + { 101817, true }, + { 101831, true }, + { 101842, true }, + { 101859, true }, + { 101880, true }, + { 101891, true }, + { 101902, true }, + { 101909, true }, + { 101920, true }, { 101927, true }, - { 101939, true }, - { 101956, true }, - { 101970, true }, - { 101984, true }, - { 101991, true }, - { 101998, true }, - { 102005, true }, - { 102014, true }, - { 102023, true }, - { 102031, true }, - { 102041, true }, + { 101937, true }, + { 101949, true }, + { 101959, true }, + { 101968, true }, + { 101981, true }, + { 101993, true }, + { 102010, true }, + { 102024, true }, + { 102038, true }, + { 102045, true }, + { 102052, true }, { 102059, true }, - { 102073, true }, + { 102068, true }, + { 102077, true }, { 102085, true }, - { 102096, true }, - { 102107, true }, - { 102118, true }, - { 102131, true }, - { 102142, true }, - { 102151, true }, - { 102168, true }, - { 102179, true }, - { 102195, true }, - { 102202, true }, - { 102209, true }, - { 102223, true }, - { 102231, true }, - { 102238, true }, + { 102095, true }, + { 102113, true }, + { 102127, true }, + { 102139, true }, + { 102150, true }, + { 102161, true }, + { 102172, true }, + { 102185, true }, + { 102196, true }, + { 102205, true }, + { 102222, true }, + { 102233, true }, { 102249, true }, - { 102255, true }, - { 102268, true }, - { 102281, true }, - { 102291, true }, - { 102301, true }, - { 102314, true }, - { 102328, true }, - { 102343, true }, - { 102356, true }, - { 102365, true }, - { 102384, true }, - { 102409, false }, - { 102421, true }, - { 102429, true }, - { 102443, true }, - { 102456, true }, - { 102471, true }, - { 102490, true }, - { 102503, true }, - { 102518, true }, - { 102531, true }, - { 102542, true }, - { 102555, true }, + { 102256, true }, + { 102263, true }, + { 102277, true }, + { 102285, true }, + { 102292, true }, + { 102303, true }, + { 102309, true }, + { 102322, true }, + { 102335, true }, + { 102345, true }, + { 102355, true }, + { 102368, true }, + { 102382, true }, + { 102397, true }, + { 102410, true }, + { 102419, true }, + { 102438, true }, + { 102463, false }, + { 102475, true }, + { 102483, true }, + { 102497, true }, + { 102510, true }, + { 102525, true }, + { 102544, true }, + { 102557, true }, { 102572, true }, - { 102586, false }, - { 102605, true }, - { 102620, true }, - { 102634, true }, - { 102650, true }, - { 102666, true }, - { 102686, true }, + { 102585, true }, + { 102596, true }, + { 102609, true }, + { 102626, true }, + { 102640, false }, + { 102659, true }, + { 102674, true }, + { 102688, true }, { 102704, true }, - { 102714, true }, - { 102723, true }, - { 102739, true }, - { 102754, true }, - { 102774, true }, + { 102720, true }, + { 102740, true }, + { 102758, true }, + { 102768, true }, + { 102777, true }, { 102793, true }, - { 102810, true }, - { 102826, true }, - { 102846, true }, - { 102859, true }, - { 102873, false }, - { 102886, true }, - { 102896, true }, - { 102908, true }, - { 102925, true }, + { 102808, true }, + { 102828, true }, + { 102847, true }, + { 102864, true }, + { 102880, true }, + { 102900, true }, + { 102913, true }, + { 102927, false }, { 102940, true }, - { 102963, true }, - { 102980, true }, + { 102950, true }, + { 102962, true }, + { 102979, true }, { 102994, true }, - { 103006, true }, - { 103021, true }, - { 103038, true }, - { 103052, true }, - { 103067, true }, - { 103076, true }, - { 103091, true }, - { 103109, true }, - { 103123, true }, - { 103140, true }, - { 103150, true }, - { 103161, true }, - { 103171, true }, - { 103186, true }, - { 103200, true }, - { 103213, true }, - { 103224, true }, - { 103241, true }, - { 103255, true }, - { 103265, true }, - { 103277, true }, - { 103295, true }, - { 103309, true }, - { 103321, false }, - { 103336, true }, - { 103355, true }, - { 103366, true }, - { 103378, true }, - { 103396, true }, - { 103409, true }, - { 103426, true }, - { 103442, true }, - { 103461, true }, - { 103478, true }, - { 103496, true }, - { 103518, true }, - { 103537, true }, - { 103550, true }, - { 103566, true }, - { 103579, true }, - { 103594, true }, - { 103602, true }, - { 103615, true }, - { 103629, true }, - { 103643, true }, - { 103654, true }, - { 103664, true }, - { 103682, true }, - { 103700, true }, - { 103713, true }, - { 103721, true }, - { 103729, true }, - { 103742, true }, - { 103754, true }, - { 103765, true }, - { 103780, true }, - { 103790, true }, - { 103801, true }, - { 103809, true }, - { 103824, true }, - { 103831, true }, - { 103847, true }, - { 103869, true }, - { 103885, true }, - { 103894, true }, - { 103904, true }, - { 103916, true }, - { 103929, true }, - { 103947, true }, - { 103961, true }, - { 103980, true }, - { 103994, true }, - { 104007, true }, - { 104023, false }, - { 104040, true }, - { 104061, true }, - { 104080, true }, - { 104099, true }, - { 104118, false }, - { 104134, true }, - { 104149, true }, - { 104159, true }, - { 104169, true }, - { 104178, true }, - { 104191, true }, - { 104201, false }, - { 104219, true }, - { 104241, true }, - { 104258, true }, - { 104274, true }, - { 104292, true }, - { 104303, true }, - { 104319, true }, - { 104337, true }, - { 104352, false }, - { 104366, true }, - { 104383, true }, - { 104401, true }, + { 103017, true }, + { 103034, true }, + { 103048, true }, + { 103060, true }, + { 103075, true }, + { 103092, true }, + { 103106, true }, + { 103121, true }, + { 103130, true }, + { 103145, true }, + { 103163, true }, + { 103177, true }, + { 103187, true }, + { 103198, true }, + { 103208, true }, + { 103223, true }, + { 103237, true }, + { 103250, true }, + { 103261, true }, + { 103278, true }, + { 103292, true }, + { 103302, true }, + { 103314, true }, + { 103332, true }, + { 103346, true }, + { 103358, false }, + { 103373, true }, + { 103392, true }, + { 103403, true }, + { 103415, true }, + { 103433, true }, + { 103446, true }, + { 103463, true }, + { 103479, true }, + { 103498, true }, + { 103515, true }, + { 103533, true }, + { 103555, true }, + { 103574, true }, + { 103587, true }, + { 103603, true }, + { 103616, true }, + { 103631, true }, + { 103639, true }, + { 103652, true }, + { 103666, true }, + { 103680, true }, + { 103691, true }, + { 103701, true }, + { 103719, true }, + { 103737, true }, + { 103750, true }, + { 103758, true }, + { 103766, true }, + { 103779, true }, + { 103791, true }, + { 103802, true }, + { 103817, true }, + { 103827, true }, + { 103838, true }, + { 103846, true }, + { 103861, true }, + { 103868, true }, + { 103884, true }, + { 103906, true }, + { 103922, true }, + { 103931, true }, + { 103941, true }, + { 103953, true }, + { 103966, true }, + { 103984, true }, + { 103998, true }, + { 104017, true }, + { 104031, true }, + { 104044, true }, + { 104060, false }, + { 104077, true }, + { 104098, true }, + { 104117, true }, + { 104136, true }, + { 104155, true }, + { 104171, true }, + { 104186, true }, + { 104196, true }, + { 104206, true }, + { 104215, true }, + { 104228, true }, + { 104238, false }, + { 104256, true }, + { 104278, true }, + { 104295, true }, + { 104311, true }, + { 104329, true }, + { 104340, true }, + { 104356, true }, + { 104374, true }, + { 104389, false }, + { 104403, true }, { 104420, true }, - { 104431, true }, - { 104447, true }, - { 104464, true }, - { 104480, true }, - { 104493, true }, - { 104511, true }, - { 104522, true }, - { 104539, true }, - { 104561, false }, - { 104578, true }, - { 104594, true }, - { 104608, true }, - { 104620, true }, - { 104642, false }, + { 104438, true }, + { 104457, true }, + { 104468, true }, + { 104484, true }, + { 104501, true }, + { 104517, true }, + { 104530, true }, + { 104548, true }, + { 104559, true }, + { 104576, true }, + { 104598, false }, + { 104615, true }, + { 104631, true }, + { 104645, true }, { 104657, true }, - { 104669, true }, - { 104677, true }, - { 104690, true }, - { 104705, true }, - { 104720, true }, - { 104730, true }, - { 104741, true }, - { 104753, true }, - { 104762, true }, - { 104772, true }, - { 104782, true }, - { 104796, true }, - { 104810, true }, - { 104821, false }, - { 104834, true }, - { 104842, true }, - { 104851, true }, - { 104864, true }, - { 104873, true }, - { 104883, true }, - { 104896, true }, - { 104916, false }, - { 104926, true }, - { 104942, true }, - { 104955, true }, - { 104968, true }, + { 104679, false }, + { 104694, true }, + { 104706, true }, + { 104714, true }, + { 104727, true }, + { 104742, true }, + { 104757, true }, + { 104767, true }, + { 104778, true }, + { 104790, true }, + { 104799, true }, + { 104809, true }, + { 104819, true }, + { 104833, true }, + { 104847, true }, + { 104858, false }, + { 104871, true }, + { 104879, true }, + { 104888, true }, + { 104901, true }, + { 104910, true }, + { 104920, true }, + { 104933, true }, + { 104953, false }, + { 104963, true }, { 104979, true }, - { 104988, true }, - { 104995, true }, - { 105011, true }, - { 105024, true }, - { 105037, true }, - { 105050, true }, - { 105065, true }, - { 105076, true }, - { 105096, true }, - { 105108, true }, - { 105115, true }, - { 105122, true }, - { 105131, true }, - { 105140, true }, - { 105149, true }, - { 105160, true }, - { 105174, true }, - { 105187, true }, - { 105195, true }, - { 105214, true }, - { 105225, true }, - { 105237, true }, + { 104992, true }, + { 105005, true }, + { 105016, true }, + { 105025, true }, + { 105032, true }, + { 105048, true }, + { 105061, true }, + { 105074, true }, + { 105087, true }, + { 105102, true }, + { 105113, true }, + { 105133, true }, + { 105145, true }, + { 105152, true }, + { 105159, true }, + { 105168, true }, + { 105177, true }, + { 105186, true }, + { 105197, true }, + { 105211, true }, + { 105224, true }, + { 105232, true }, { 105251, true }, { 105262, true }, - { 105278, true }, - { 105292, true }, - { 105307, true }, - { 105317, false }, - { 105331, true }, - { 105341, true }, - { 105356, false }, - { 105372, true }, - { 105384, true }, - { 105397, true }, - { 105416, true }, - { 105440, false }, + { 105274, true }, + { 105288, true }, + { 105299, true }, + { 105315, true }, + { 105329, true }, + { 105344, true }, + { 105354, false }, + { 105368, true }, + { 105378, true }, + { 105393, false }, + { 105409, true }, + { 105421, true }, + { 105434, true }, { 105453, true }, - { 105469, true }, - { 105483, true }, - { 105498, true }, - { 105517, true }, - { 105534, true }, - { 105551, true }, - { 105561, true }, - { 105576, true }, - { 105590, true }, - { 105603, true }, - { 105619, true }, - { 105634, true }, - { 105650, true }, - { 105664, true }, - { 105679, true }, - { 105693, true }, - { 105708, true }, - { 105727, true }, - { 105742, true }, - { 105757, true }, - { 105775, true }, + { 105477, false }, + { 105490, true }, + { 105506, true }, + { 105520, true }, + { 105535, true }, + { 105554, true }, + { 105571, true }, + { 105588, true }, + { 105598, true }, + { 105613, true }, + { 105627, true }, + { 105640, true }, + { 105656, true }, + { 105671, true }, + { 105687, true }, + { 105701, true }, + { 105716, true }, + { 105730, true }, + { 105745, true }, + { 105764, true }, + { 105779, true }, { 105794, true }, - { 105807, true }, - { 105820, false }, - { 105843, true }, - { 105859, true }, - { 105870, true }, - { 105883, true }, - { 105898, true }, - { 105913, true }, - { 105929, true }, - { 105944, true }, - { 105960, true }, - { 105977, true }, - { 105989, true }, - { 105999, true }, - { 106017, true }, - { 106027, true }, - { 106038, true }, - { 106048, true }, - { 106062, true }, + { 105812, true }, + { 105831, true }, + { 105844, true }, + { 105857, false }, + { 105880, true }, + { 105896, true }, + { 105907, true }, + { 105920, true }, + { 105935, true }, + { 105950, true }, + { 105966, true }, + { 105981, true }, + { 105997, true }, + { 106014, true }, + { 106026, true }, + { 106036, true }, + { 106054, true }, + { 106064, true }, { 106075, true }, - { 106103, true }, - { 106114, true }, - { 106125, true }, - { 106136, true }, - { 106149, true }, + { 106085, true }, + { 106099, true }, + { 106112, true }, + { 106140, true }, + { 106151, true }, { 106162, true }, - { 106179, true }, - { 106193, false }, - { 106210, true }, - { 106224, true }, - { 106241, true }, - { 106258, true }, - { 106270, true }, - { 106281, true }, + { 106173, true }, + { 106186, true }, + { 106199, true }, + { 106216, true }, + { 106230, false }, + { 106247, true }, + { 106261, true }, + { 106278, true }, { 106295, true }, { 106307, true }, - { 106323, true }, - { 106349, true }, - { 106359, true }, - { 106372, true }, - { 106382, true }, - { 106395, true }, - { 106403, true }, - { 106414, true }, - { 106434, true }, - { 106452, true }, - { 106469, true }, - { 106484, true }, - { 106502, true }, - { 106518, true }, - { 106532, true }, - { 106549, true }, - { 106559, true }, - { 106575, true }, - { 106588, true }, - { 106598, false }, + { 106318, true }, + { 106332, true }, + { 106344, true }, + { 106360, true }, + { 106386, true }, + { 106396, true }, + { 106409, true }, + { 106419, true }, + { 106432, true }, + { 106440, true }, + { 106451, true }, + { 106471, true }, + { 106489, true }, + { 106506, true }, + { 106521, true }, + { 106539, true }, + { 106555, true }, + { 106569, true }, + { 106586, true }, + { 106596, true }, { 106612, true }, - { 106623, true }, - { 106639, true }, - { 106647, true }, - { 106657, true }, - { 106672, true }, - { 106688, true }, - { 106707, true }, - { 106720, true }, - { 106740, true }, - { 106755, true }, - { 106773, true }, - { 106786, true }, - { 106796, true }, - { 106813, true }, - { 106828, true }, - { 106839, true }, - { 106858, true }, - { 106869, true }, - { 106882, true }, - { 106890, true }, - { 106899, true }, - { 106910, true }, - { 106924, true }, - { 106934, true }, - { 106957, true }, - { 106970, true }, - { 106982, false }, - { 106993, true }, + { 106625, true }, + { 106635, false }, + { 106649, true }, + { 106660, true }, + { 106676, true }, + { 106684, true }, + { 106694, true }, + { 106709, true }, + { 106725, true }, + { 106744, true }, + { 106757, true }, + { 106777, true }, + { 106792, true }, + { 106810, true }, + { 106823, true }, + { 106833, true }, + { 106850, true }, + { 106865, true }, + { 106876, true }, + { 106895, true }, + { 106906, true }, + { 106919, true }, + { 106927, true }, + { 106936, true }, + { 106947, true }, + { 106961, true }, + { 106971, true }, + { 106994, true }, { 107007, true }, - { 107035, true }, + { 107019, false }, + { 107030, true }, { 107044, true }, - { 107059, true }, - { 107078, true }, - { 107102, true }, - { 107117, true }, - { 107137, true }, - { 107155, true }, - { 107168, true }, - { 107184, true }, - { 107199, true }, - { 107212, true }, - { 107226, true }, - { 107237, true }, - { 107248, true }, - { 107262, true }, + { 107072, true }, + { 107081, true }, + { 107096, true }, + { 107115, true }, + { 107139, true }, + { 107154, true }, + { 107174, true }, + { 107192, true }, + { 107205, true }, + { 107221, true }, + { 107236, true }, + { 107249, true }, + { 107263, true }, { 107274, true }, - { 107291, true }, - { 107301, true }, - { 107314, true }, - { 107329, true }, - { 107337, true }, - { 107357, true }, - { 107368, true }, - { 107378, true }, + { 107285, true }, + { 107299, true }, + { 107311, true }, + { 107328, true }, + { 107338, true }, + { 107351, true }, + { 107366, true }, + { 107374, true }, { 107394, true }, - { 107403, true }, - { 107414, true }, - { 107427, true }, - { 107437, true }, - { 107449, true }, + { 107405, true }, + { 107415, true }, + { 107431, true }, + { 107440, true }, + { 107451, true }, { 107464, true }, - { 107473, true }, - { 107487, true }, - { 107500, true }, - { 107515, true }, - { 107529, true }, - { 107540, true }, - { 107555, true }, - { 107565, false }, - { 107575, true }, - { 107594, true }, - { 107607, true }, - { 107616, true }, - { 107627, true }, + { 107474, true }, + { 107486, true }, + { 107501, true }, + { 107510, true }, + { 107524, true }, + { 107537, true }, + { 107547, true }, + { 107562, true }, + { 107576, true }, + { 107587, true }, + { 107602, true }, + { 107612, false }, + { 107622, true }, { 107641, true }, - { 107661, true }, - { 107677, true }, + { 107654, true }, + { 107663, true }, + { 107674, true }, { 107688, true }, - { 107704, true }, - { 107721, true }, - { 107736, true }, - { 107757, true }, - { 107770, true }, - { 107787, true }, - { 107797, true }, - { 107805, true }, - { 107816, true }, - { 107826, true }, - { 107841, true }, - { 107854, true }, - { 107868, true }, - { 107880, true }, - { 107890, true }, - { 107898, true }, + { 107708, true }, + { 107724, true }, + { 107735, true }, + { 107751, true }, + { 107768, true }, + { 107783, true }, + { 107804, true }, + { 107817, true }, + { 107834, true }, + { 107842, true }, + { 107853, true }, + { 107863, true }, + { 107878, true }, + { 107891, true }, + { 107905, true }, { 107917, true }, - { 107937, true }, - { 107946, true }, - { 107960, true }, + { 107927, true }, + { 107935, true }, + { 107954, true }, { 107974, true }, - { 108016, true }, - { 108032, true }, - { 108041, true }, + { 107983, true }, + { 107997, true }, + { 108011, true }, { 108053, true }, - { 108065, true }, + { 108069, true }, { 108078, true }, - { 108091, true }, - { 108109, true }, - { 108117, true }, - { 108130, true }, - { 108141, true }, - { 108155, true }, - { 108165, true }, - { 108175, true }, - { 108187, true }, - { 108198, true }, - { 108215, true }, - { 108230, true }, - { 108242, true }, - { 108255, true }, + { 108090, true }, + { 108102, true }, + { 108115, true }, + { 108128, true }, + { 108146, true }, + { 108154, true }, + { 108167, true }, + { 108178, true }, + { 108192, true }, + { 108202, true }, + { 108212, true }, + { 108224, true }, + { 108235, true }, + { 108252, true }, { 108267, true }, - { 108282, true }, - { 108295, true }, - { 108307, true }, - { 108317, true }, - { 108333, true }, - { 108342, true }, - { 108363, true }, - { 108376, true }, - { 108394, true }, - { 108409, true }, - { 108423, true }, - { 108441, true }, - { 108459, true }, - { 108471, true }, - { 108482, true }, - { 108500, true }, - { 108511, true }, - { 108525, true }, - { 108545, true }, - { 108558, true }, - { 108570, true }, - { 108590, true }, - { 108599, true }, - { 108608, true }, - { 108615, true }, - { 108630, true }, - { 108645, true }, - { 108659, true }, + { 108279, true }, + { 108292, true }, + { 108304, true }, + { 108319, true }, + { 108332, true }, + { 108344, true }, + { 108354, true }, + { 108370, true }, + { 108379, true }, + { 108400, true }, + { 108413, true }, + { 108431, true }, + { 108446, true }, + { 108460, true }, + { 108478, true }, + { 108496, true }, + { 108508, true }, + { 108519, true }, + { 108530, true }, + { 108544, true }, + { 108564, true }, + { 108577, true }, + { 108589, true }, + { 108609, true }, + { 108618, true }, + { 108627, true }, + { 108634, true }, + { 108649, true }, + { 108664, true }, { 108678, true }, - { 108702, true }, - { 108713, true }, - { 108727, true }, - { 108739, true }, - { 108752, true }, - { 108765, true }, - { 108776, true }, - { 108789, true }, - { 108801, true }, - { 108824, true }, - { 108833, true }, - { 108850, true }, - { 108863, true }, - { 108875, true }, - { 108886, true }, - { 108901, true }, - { 108915, true }, - { 108923, true }, - { 108937, true }, - { 108951, true }, - { 108959, true }, - { 108972, true }, - { 108983, true }, - { 108995, true }, - { 109006, true }, - { 109030, true }, - { 109038, true }, - { 109048, true }, - { 109058, true }, - { 109075, true }, - { 109093, true }, - { 109111, true }, - { 109121, true }, - { 109145, true }, - { 109159, true }, + { 108697, true }, + { 108721, true }, + { 108732, true }, + { 108746, true }, + { 108758, true }, + { 108771, true }, + { 108784, true }, + { 108795, true }, + { 108808, true }, + { 108820, true }, + { 108843, true }, + { 108852, true }, + { 108869, true }, + { 108882, true }, + { 108894, true }, + { 108905, true }, + { 108920, true }, + { 108934, true }, + { 108942, true }, + { 108956, true }, + { 108970, true }, + { 108978, true }, + { 108991, true }, + { 109002, true }, + { 109014, true }, + { 109025, true }, + { 109049, true }, + { 109057, true }, + { 109067, true }, + { 109077, true }, + { 109094, true }, + { 109112, true }, + { 109130, true }, + { 109144, true }, + { 109154, true }, { 109178, true }, - { 109190, true }, - { 109209, true }, - { 109226, true }, - { 109236, true }, - { 109251, true }, - { 109271, true }, - { 109283, true }, - { 109295, true }, - { 109308, true }, - { 109317, true }, - { 109326, true }, - { 109335, true }, - { 109354, true }, - { 109366, true }, - { 109376, true }, - { 109385, true }, - { 109400, true }, - { 109415, false }, + { 109192, true }, + { 109211, true }, + { 109223, true }, + { 109242, true }, + { 109259, true }, + { 109269, true }, + { 109284, true }, + { 109304, true }, + { 109316, true }, + { 109328, true }, + { 109341, true }, + { 109350, true }, + { 109359, true }, + { 109368, true }, + { 109387, true }, + { 109399, true }, + { 109409, true }, + { 109418, true }, { 109433, true }, - { 109444, true }, - { 109456, true }, - { 109472, true }, - { 109487, true }, - { 109503, true }, - { 109529, true }, - { 109540, true }, - { 109555, true }, - { 109570, true }, - { 109585, true }, + { 109448, false }, + { 109466, true }, + { 109477, true }, + { 109489, true }, + { 109505, true }, + { 109520, true }, + { 109536, true }, + { 109562, true }, + { 109573, true }, + { 109588, true }, { 109603, true }, - { 109613, true }, - { 109628, true }, - { 109643, true }, - { 109656, true }, - { 109672, true }, - { 109695, true }, - { 109708, true }, - { 109721, true }, - { 109734, true }, - { 109753, true }, - { 109769, true }, - { 109784, true }, - { 109798, true }, - { 109810, false }, - { 109829, true }, - { 109844, true }, + { 109618, true }, + { 109636, true }, + { 109646, true }, + { 109661, true }, + { 109676, true }, + { 109689, true }, + { 109705, true }, + { 109728, true }, + { 109741, true }, + { 109754, true }, + { 109767, true }, + { 109786, true }, + { 109802, true }, + { 109817, true }, + { 109831, true }, + { 109843, false }, { 109862, true }, - { 109873, true }, - { 109885, true }, - { 109896, true }, - { 109909, true }, - { 109932, true }, - { 109947, true }, - { 109962, true }, - { 109976, true }, - { 109993, false }, - { 110007, true }, - { 110018, true }, - { 110026, true }, - { 110042, true }, - { 110055, true }, - { 110065, true }, - { 110076, true }, - { 110084, true }, - { 110101, true }, - { 110116, true }, - { 110126, true }, - { 110136, true }, - { 110147, true }, - { 110158, true }, - { 110178, true }, - { 110193, true }, - { 110210, true }, - { 110224, true }, - { 110240, true }, - { 110250, true }, - { 110261, true }, - { 110280, true }, - { 110291, true }, + { 109877, true }, + { 109895, true }, + { 109906, true }, + { 109918, true }, + { 109929, true }, + { 109942, true }, + { 109965, true }, + { 109980, true }, + { 109995, true }, + { 110009, true }, + { 110026, false }, + { 110040, true }, + { 110051, true }, + { 110059, true }, + { 110075, true }, + { 110088, true }, + { 110098, true }, + { 110109, true }, + { 110117, true }, + { 110134, true }, + { 110149, true }, + { 110159, true }, + { 110169, true }, + { 110180, true }, + { 110191, true }, + { 110211, true }, + { 110226, true }, + { 110243, true }, + { 110257, true }, + { 110273, true }, + { 110283, true }, + { 110294, true }, { 110313, true }, - { 110327, true }, - { 110338, true }, - { 110351, true }, - { 110361, true }, - { 110379, true }, - { 110396, true }, - { 110410, true }, - { 110422, true }, - { 110438, true }, - { 110452, true }, - { 110463, true }, - { 110473, true }, + { 110324, true }, + { 110346, true }, + { 110360, true }, + { 110371, true }, + { 110384, true }, + { 110394, true }, + { 110412, true }, + { 110429, true }, + { 110443, true }, + { 110455, true }, + { 110471, true }, { 110485, true }, - { 110505, true }, - { 110532, true }, - { 110548, true }, - { 110563, true }, - { 110575, true }, - { 110591, true }, - { 110603, true }, - { 110620, true }, - { 110640, true }, - { 110650, true }, - { 110667, true }, - { 110681, true }, - { 110698, true }, - { 110710, true }, - { 110723, false }, - { 110737, true }, - { 110760, false }, - { 110774, true }, - { 110786, true }, - { 110797, true }, - { 110809, true }, - { 110827, true }, - { 110840, true }, - { 110855, true }, + { 110496, true }, + { 110506, true }, + { 110518, true }, + { 110538, true }, + { 110565, true }, + { 110581, true }, + { 110596, true }, + { 110608, true }, + { 110624, true }, + { 110636, true }, + { 110653, true }, + { 110673, true }, + { 110683, true }, + { 110700, true }, + { 110714, true }, + { 110731, true }, + { 110743, true }, + { 110756, false }, + { 110770, true }, + { 110793, false }, + { 110807, true }, + { 110819, true }, + { 110830, true }, + { 110842, true }, + { 110860, true }, { 110873, true }, - { 110883, true }, - { 110895, true }, + { 110888, true }, + { 110906, true }, + { 110916, true }, { 110928, true }, - { 110938, true }, - { 110947, true }, - { 110966, true }, - { 110978, true }, - { 110992, true }, - { 111013, true }, - { 111027, true }, - { 111041, true }, - { 111059, true }, - { 111077, true }, - { 111095, true }, - { 111107, true }, - { 111119, true }, - { 111127, true }, - { 111141, true }, - { 111157, true }, - { 111172, true }, - { 111186, true }, - { 111195, true }, + { 110961, true }, + { 110971, true }, + { 110980, true }, + { 110999, true }, + { 111011, true }, + { 111025, true }, + { 111046, true }, + { 111060, true }, + { 111074, true }, + { 111092, true }, + { 111110, true }, + { 111128, true }, + { 111140, true }, + { 111152, true }, + { 111160, true }, + { 111174, true }, + { 111190, true }, { 111205, true }, - { 111217, true }, - { 111232, true }, - { 111244, true }, - { 111267, true }, - { 111279, true }, - { 111292, true }, + { 111219, true }, + { 111228, true }, + { 111238, true }, + { 111250, true }, + { 111265, true }, + { 111277, true }, { 111300, true }, - { 111311, true }, - { 111320, true }, - { 111328, true }, - { 111341, true }, - { 111364, true }, - { 111376, true }, - { 111392, true }, - { 111415, true }, - { 111426, true }, - { 111442, true }, - { 111458, true }, - { 111473, true }, - { 111486, true }, - { 111496, true }, - { 111503, true }, - { 111516, true }, - { 111533, true }, - { 111556, true }, - { 111573, true }, - { 111591, true }, - { 111620, true }, - { 111637, true }, + { 111312, true }, + { 111325, true }, + { 111333, true }, + { 111344, true }, + { 111353, true }, + { 111361, true }, + { 111374, true }, + { 111397, true }, + { 111409, true }, + { 111425, true }, + { 111448, true }, + { 111459, true }, + { 111475, true }, + { 111491, true }, + { 111506, true }, + { 111519, true }, + { 111529, true }, + { 111536, true }, + { 111549, true }, + { 111566, true }, + { 111589, true }, + { 111606, true }, + { 111624, true }, { 111653, true }, - { 111663, true }, - { 111677, true }, - { 111691, true }, - { 111703, true }, - { 111712, true }, - { 111728, true }, + { 111670, true }, + { 111686, true }, + { 111696, true }, + { 111710, true }, + { 111724, true }, + { 111736, true }, { 111745, true }, - { 111761, false }, - { 111776, true }, - { 111789, true }, - { 111800, true }, - { 111818, true }, - { 111832, true }, - { 111850, true }, - { 111868, true }, - { 111876, true }, - { 111886, true }, - { 111894, true }, - { 111904, true }, - { 111915, true }, - { 111925, true }, - { 111939, true }, - { 111947, true }, - { 111959, true }, - { 111973, true }, - { 111991, true }, - { 112000, true }, - { 112011, true }, - { 112026, true }, - { 112034, true }, - { 112049, true }, + { 111761, true }, + { 111778, true }, + { 111794, false }, + { 111809, true }, + { 111822, true }, + { 111833, true }, + { 111851, true }, + { 111865, true }, + { 111883, true }, + { 111901, true }, + { 111909, true }, + { 111919, true }, + { 111927, true }, + { 111937, true }, + { 111948, true }, + { 111958, true }, + { 111972, true }, + { 111980, true }, + { 111992, true }, + { 112006, true }, + { 112024, true }, + { 112033, true }, + { 112044, true }, + { 112059, true }, { 112067, true }, - { 112085, true }, - { 112097, true }, - { 112107, true }, + { 112082, true }, + { 112100, true }, { 112118, true }, - { 112132, true }, - { 112144, true }, - { 112155, false }, - { 112171, false }, - { 112192, true }, - { 112209, true }, - { 112227, true }, - { 112244, true }, - { 112261, true }, - { 112275, true }, - { 112287, true }, - { 112302, true }, - { 112310, true }, - { 112323, true }, - { 112341, true }, - { 112365, true }, - { 112382, true }, - { 112397, true }, - { 112410, false }, - { 112426, true }, - { 112439, true }, - { 112453, true }, - { 112465, true }, - { 112476, true }, - { 112487, true }, - { 112497, true }, - { 112508, false }, - { 112529, true }, - { 112540, true }, - { 112554, true }, - { 112566, true }, - { 112580, true }, - { 112598, true }, - { 112612, true }, - { 112623, true }, - { 112640, true }, - { 112651, true }, - { 112671, true }, - { 112682, true }, - { 112696, true }, - { 112710, true }, - { 112723, true }, - { 112734, true }, - { 112753, true }, - { 112769, true }, - { 112782, true }, - { 112790, true }, - { 112804, true }, - { 112817, true }, - { 112829, true }, - { 112842, true }, - { 112854, true }, - { 112866, true }, - { 112881, true }, - { 112891, true }, - { 112906, true }, - { 112920, true }, - { 112933, true }, - { 112943, true }, - { 112965, true }, - { 112979, true }, - { 112992, true }, - { 113002, true }, + { 112130, true }, + { 112140, true }, + { 112151, true }, + { 112165, true }, + { 112177, true }, + { 112188, false }, + { 112204, false }, + { 112225, true }, + { 112242, true }, + { 112260, true }, + { 112277, true }, + { 112294, true }, + { 112308, true }, + { 112320, true }, + { 112335, true }, + { 112343, true }, + { 112356, true }, + { 112374, true }, + { 112398, true }, + { 112415, true }, + { 112430, true }, + { 112443, false }, + { 112459, true }, + { 112472, true }, + { 112486, true }, + { 112498, true }, + { 112509, true }, + { 112520, true }, + { 112530, true }, + { 112541, false }, + { 112562, true }, + { 112573, true }, + { 112587, true }, + { 112599, true }, + { 112613, true }, + { 112631, true }, + { 112645, true }, + { 112656, true }, + { 112673, true }, + { 112684, true }, + { 112704, true }, + { 112715, true }, + { 112729, true }, + { 112743, true }, + { 112756, true }, + { 112767, true }, + { 112786, true }, + { 112802, true }, + { 112815, true }, + { 112823, true }, + { 112837, true }, + { 112850, true }, + { 112862, true }, + { 112875, true }, + { 112887, true }, + { 112899, true }, + { 112914, true }, + { 112924, true }, + { 112939, true }, + { 112953, true }, + { 112966, true }, + { 112976, true }, + { 112998, true }, { 113012, true }, - { 113026, true }, - { 113037, true }, - { 113047, true }, - { 113058, true }, - { 113069, true }, - { 113082, true }, - { 113094, true }, - { 113104, true }, - { 113116, true }, - { 113126, true }, - { 113134, true }, - { 113156, true }, - { 113168, true }, - { 113177, true }, - { 113193, true }, - { 113202, true }, - { 113214, true }, + { 113025, true }, + { 113035, true }, + { 113045, true }, + { 113059, true }, + { 113070, true }, + { 113080, true }, + { 113091, true }, + { 113102, true }, + { 113115, true }, + { 113127, true }, + { 113137, true }, + { 113149, true }, + { 113159, true }, + { 113167, true }, + { 113189, true }, + { 113201, true }, + { 113210, true }, { 113226, true }, - { 113236, true }, - { 113246, true }, - { 113257, true }, - { 113270, false }, - { 113281, true }, - { 113294, false }, - { 113319, true }, - { 113331, true }, - { 113340, true }, - { 113349, true }, - { 113366, true }, - { 113384, true }, - { 113392, true }, - { 113411, true }, - { 113424, true }, - { 113438, true }, - { 113448, true }, - { 113460, true }, - { 113484, true }, - { 113498, true }, - { 113516, true }, - { 113534, true }, - { 113552, true }, - { 113568, true }, - { 113587, true }, - { 113597, true }, + { 113235, true }, + { 113247, true }, + { 113259, true }, + { 113269, true }, + { 113279, true }, + { 113290, true }, + { 113303, false }, + { 113314, true }, + { 113327, false }, + { 113352, true }, + { 113364, true }, + { 113373, true }, + { 113382, true }, + { 113399, true }, + { 113417, true }, + { 113425, true }, + { 113444, true }, + { 113457, true }, + { 113471, true }, + { 113481, true }, + { 113493, true }, + { 113517, true }, + { 113531, true }, + { 113549, true }, + { 113567, true }, + { 113585, true }, + { 113601, true }, { 113620, true }, - { 113634, false }, - { 113647, true }, - { 113657, true }, - { 113670, true }, - { 113679, true }, + { 113630, true }, + { 113653, true }, + { 113667, false }, + { 113680, true }, { 113690, true }, - { 113702, false }, - { 113715, true }, - { 113725, true }, - { 113733, true }, - { 113745, true }, - { 113757, true }, - { 113765, true }, - { 113777, true }, - { 113792, true }, - { 113801, true }, - { 113807, true }, - { 113819, true }, - { 113829, true }, - { 113838, true }, - { 113848, true }, - { 113855, false }, - { 113870, true }, - { 113888, true }, + { 113703, true }, + { 113712, true }, + { 113723, true }, + { 113735, false }, + { 113748, true }, + { 113758, true }, + { 113766, true }, + { 113778, true }, + { 113790, true }, + { 113798, true }, + { 113810, true }, + { 113825, true }, + { 113834, true }, + { 113840, true }, + { 113852, true }, + { 113862, true }, + { 113871, true }, + { 113881, true }, + { 113888, false }, { 113903, true }, - { 113916, true }, - { 113930, true }, - { 113942, true }, - { 113956, true }, - { 113969, true }, - { 113980, true }, + { 113921, true }, + { 113936, true }, + { 113949, true }, + { 113963, true }, + { 113975, true }, { 113989, true }, - { 114004, true }, - { 114023, true }, - { 114033, true }, - { 114046, true }, - { 114054, true }, - { 114067, true }, + { 114002, true }, + { 114013, true }, + { 114022, true }, + { 114037, true }, + { 114056, true }, + { 114066, true }, { 114079, true }, - { 114092, true }, + { 114087, true }, + { 114100, true }, { 114112, true }, - { 114131, true }, - { 114148, true }, - { 114160, true }, - { 114175, true }, - { 114188, true }, - { 114200, true }, - { 114219, true }, - { 114227, true }, - { 114246, true }, - { 114264, true }, - { 114286, true }, - { 114302, true }, - { 114313, true }, - { 114328, true }, - { 114338, true }, - { 114352, true }, - { 114367, false }, - { 114378, true }, - { 114397, true }, - { 114406, false }, - { 114417, true }, - { 114425, true }, - { 114433, true }, - { 114449, true }, + { 114125, true }, + { 114145, true }, + { 114164, true }, + { 114181, true }, + { 114193, true }, + { 114208, true }, + { 114221, true }, + { 114233, true }, + { 114252, true }, + { 114260, true }, + { 114279, true }, + { 114297, true }, + { 114319, true }, + { 114335, true }, + { 114346, true }, + { 114361, true }, + { 114371, true }, + { 114385, true }, + { 114400, false }, + { 114411, true }, + { 114430, true }, + { 114439, false }, + { 114450, true }, { 114458, true }, { 114466, true }, - { 114477, true }, - { 114489, true }, - { 114503, true }, - { 114517, true }, - { 114528, true }, - { 114537, true }, - { 114553, true }, - { 114575, true }, - { 114587, true }, - { 114605, true }, - { 114612, true }, - { 114624, true }, - { 114634, true }, - { 114650, true }, - { 114662, true }, - { 114680, true }, - { 114698, true }, - { 114718, true }, - { 114728, true }, + { 114482, true }, + { 114491, true }, + { 114499, true }, + { 114510, true }, + { 114522, true }, + { 114536, true }, + { 114550, true }, + { 114561, true }, + { 114570, true }, + { 114586, true }, + { 114608, true }, + { 114620, true }, + { 114638, true }, + { 114645, true }, + { 114657, true }, + { 114667, true }, + { 114683, true }, + { 114695, true }, + { 114713, true }, + { 114731, true }, { 114751, true }, - { 114806, true }, - { 114818, true }, - { 114833, true }, - { 114843, true }, - { 114861, true }, + { 114761, true }, + { 114784, true }, + { 114839, true }, + { 114851, true }, + { 114866, true }, { 114876, true }, - { 114889, false }, - { 114903, true }, - { 114917, false }, - { 114933, true }, - { 114958, true }, - { 114968, true }, - { 114979, true }, + { 114894, true }, + { 114909, true }, + { 114922, false }, + { 114936, true }, + { 114950, false }, + { 114966, true }, { 114991, true }, - { 115013, true }, - { 115036, true }, + { 115001, true }, + { 115012, true }, + { 115024, true }, { 115046, true }, - { 115056, true }, + { 115069, true }, { 115079, true }, - { 115092, false }, - { 115106, true }, - { 115124, true }, - { 115135, true }, - { 115146, true }, - { 115165, true }, - { 115181, true }, - { 115194, true }, - { 115219, true }, - { 115233, true }, - { 115246, true }, - { 115275, true }, - { 115288, true }, - { 115298, true }, - { 115310, true }, - { 115322, true }, - { 115341, true }, - { 115351, true }, - { 115365, true }, - { 115382, true }, - { 115399, true }, - { 115411, true }, - { 115425, true }, - { 115439, true }, - { 115449, true }, - { 115466, true }, - { 115478, true }, - { 115489, true }, - { 115505, true }, - { 115520, true }, - { 115532, false }, - { 115541, true }, - { 115561, true }, - { 115581, true }, - { 115597, true }, - { 115611, true }, - { 115624, true }, - { 115639, true }, - { 115651, true }, - { 115661, true }, - { 115682, true }, - { 115696, true }, - { 115710, true }, - { 115728, true }, + { 115089, true }, + { 115112, true }, + { 115125, false }, + { 115139, true }, + { 115157, true }, + { 115168, true }, + { 115179, true }, + { 115198, true }, + { 115214, true }, + { 115227, true }, + { 115252, true }, + { 115266, true }, + { 115279, true }, + { 115308, true }, + { 115321, true }, + { 115331, true }, + { 115343, true }, + { 115355, true }, + { 115374, true }, + { 115384, true }, + { 115398, true }, + { 115415, true }, + { 115432, true }, + { 115444, true }, + { 115458, true }, + { 115472, true }, + { 115482, true }, + { 115499, true }, + { 115511, true }, + { 115522, true }, + { 115538, true }, + { 115553, true }, + { 115565, false }, + { 115574, true }, + { 115594, true }, + { 115614, true }, + { 115630, true }, + { 115644, true }, + { 115657, true }, + { 115672, true }, + { 115684, true }, + { 115694, true }, + { 115715, true }, + { 115729, true }, { 115743, true }, - { 115755, true }, - { 115773, true }, - { 115784, true }, - { 115797, true }, - { 115807, true }, - { 115819, true }, - { 115833, true }, - { 115845, true }, - { 115864, true }, - { 115876, true }, - { 115888, true }, - { 115900, true }, + { 115761, true }, + { 115776, true }, + { 115788, true }, + { 115806, true }, + { 115817, true }, + { 115830, true }, + { 115840, true }, + { 115852, true }, + { 115866, true }, + { 115878, true }, + { 115897, true }, + { 115909, true }, { 115921, true }, - { 115937, true }, - { 115950, true }, - { 115967, true }, - { 115982, true }, - { 115996, true }, - { 116009, true }, - { 116022, true }, - { 116036, true }, - { 116051, true }, - { 116063, true }, - { 116076, true }, - { 116095, true }, - { 116118, false }, - { 116131, true }, - { 116139, true }, - { 116159, false }, - { 116177, true }, - { 116197, true }, + { 115933, true }, + { 115954, true }, + { 115970, true }, + { 115983, true }, + { 116000, true }, + { 116015, true }, + { 116029, true }, + { 116042, true }, + { 116055, true }, + { 116069, true }, + { 116084, true }, + { 116096, true }, + { 116109, true }, + { 116128, true }, + { 116151, false }, + { 116164, true }, + { 116172, true }, + { 116192, false }, { 116210, true }, - { 116225, true }, - { 116240, true }, - { 116255, true }, - { 116269, true }, - { 116284, true }, - { 116297, true }, - { 116322, true }, - { 116333, true }, - { 116349, true }, - { 116363, true }, - { 116376, true }, - { 116404, true }, - { 116431, true }, - { 116456, true }, - { 116484, true }, - { 116498, true }, - { 116512, true }, - { 116526, true }, - { 116542, true }, - { 116555, true }, - { 116566, true }, - { 116577, true }, + { 116230, true }, + { 116243, true }, + { 116258, true }, + { 116273, true }, + { 116288, true }, + { 116302, true }, + { 116317, true }, + { 116330, true }, + { 116355, true }, + { 116366, true }, + { 116382, true }, + { 116396, true }, + { 116409, true }, + { 116437, true }, + { 116464, true }, + { 116489, true }, + { 116517, true }, + { 116531, true }, + { 116545, true }, + { 116559, true }, + { 116575, true }, { 116588, true }, - { 116600, true }, - { 116628, true }, - { 116638, true }, - { 116648, true }, - { 116665, true }, - { 116682, true }, - { 116692, true }, + { 116599, true }, + { 116610, true }, + { 116621, true }, + { 116633, true }, + { 116661, true }, + { 116671, true }, + { 116681, true }, + { 116698, true }, { 116715, true }, { 116725, true }, - { 116734, true }, - { 116756, true }, - { 116768, true }, - { 116779, true }, - { 116791, true }, - { 116803, true }, - { 116814, true }, - { 116832, true }, + { 116748, true }, + { 116758, true }, + { 116767, true }, + { 116789, true }, + { 116801, true }, + { 116812, true }, + { 116824, true }, + { 116836, true }, { 116847, true }, - { 116857, true }, - { 116866, true }, - { 116884, false }, - { 116895, true }, - { 116906, true }, - { 116916, true }, - { 116924, true }, - { 116938, true }, - { 116950, true }, - { 116962, true }, - { 116980, true }, - { 117000, true }, - { 117015, true }, - { 117032, true }, + { 116865, true }, + { 116880, true }, + { 116890, true }, + { 116899, true }, + { 116917, false }, + { 116928, true }, + { 116939, false }, + { 116949, true }, + { 116957, true }, + { 116971, true }, + { 116983, true }, + { 116995, true }, + { 117013, true }, + { 117033, true }, { 117048, true }, - { 117061, true }, - { 117072, true }, - { 117087, true }, - { 117108, true }, - { 117124, true }, - { 117137, true }, - { 117162, true }, - { 117178, true }, - { 117187, true }, - { 117207, true }, - { 117222, true }, - { 117233, true }, - { 117244, true }, - { 117258, true }, - { 117270, true }, - { 117287, true }, - { 117298, true }, - { 117306, true }, - { 117318, true }, - { 117330, true }, - { 117344, true }, - { 117358, true }, - { 117375, true }, + { 117065, true }, + { 117081, true }, + { 117094, true }, + { 117105, true }, + { 117120, true }, + { 117141, true }, + { 117157, true }, + { 117170, true }, + { 117195, true }, + { 117211, true }, + { 117220, true }, + { 117240, true }, + { 117255, true }, + { 117266, true }, + { 117277, true }, + { 117291, true }, + { 117303, true }, + { 117320, true }, + { 117331, true }, + { 117339, true }, + { 117351, true }, + { 117363, true }, + { 117377, true }, { 117391, true }, - { 117407, true }, - { 117423, true }, - { 117442, true }, - { 117457, true }, - { 117469, true }, - { 117486, false }, - { 117506, true }, - { 117522, true }, - { 117533, true }, - { 117553, true }, - { 117574, true }, - { 117595, false }, - { 117612, true }, - { 117631, true }, - { 117646, true }, - { 117657, true }, - { 117674, true }, - { 117682, true }, - { 117709, true }, - { 117720, true }, - { 117737, true }, - { 117747, true }, - { 117762, true }, - { 117774, true }, + { 117408, true }, + { 117424, true }, + { 117440, true }, + { 117456, true }, + { 117475, true }, + { 117490, true }, + { 117502, true }, + { 117519, false }, + { 117539, true }, + { 117555, true }, + { 117566, true }, + { 117586, true }, + { 117607, true }, + { 117628, false }, + { 117645, true }, + { 117664, true }, + { 117679, true }, + { 117690, true }, + { 117707, true }, + { 117715, true }, + { 117742, true }, + { 117753, true }, + { 117770, true }, + { 117780, true }, { 117795, true }, - { 117804, true }, - { 117817, true }, - { 117830, true }, - { 117848, true }, - { 117857, true }, - { 117866, true }, - { 117875, false }, - { 117892, false }, - { 117903, true }, - { 117921, true }, - { 117932, true }, - { 117947, true }, - { 117962, true }, - { 117978, true }, - { 118000, true }, - { 118015, true }, - { 118023, true }, - { 118036, true }, + { 117807, true }, + { 117828, true }, + { 117837, true }, + { 117850, true }, + { 117863, true }, + { 117881, true }, + { 117890, true }, + { 117899, true }, + { 117908, false }, + { 117925, false }, + { 117936, true }, + { 117954, true }, + { 117965, true }, + { 117980, true }, + { 117995, true }, + { 118011, true }, + { 118033, true }, { 118048, true }, - { 118065, true }, - { 118079, true }, - { 118089, true }, - { 118107, true }, - { 118124, true }, - { 118141, true }, - { 118149, true }, - { 118173, true }, - { 118191, true }, - { 118205, true }, - { 118223, true }, - { 118236, true }, - { 118250, true }, - { 118264, true }, + { 118056, true }, + { 118069, true }, + { 118081, true }, + { 118098, true }, + { 118112, true }, + { 118122, true }, + { 118140, true }, + { 118157, true }, + { 118174, true }, + { 118182, true }, + { 118206, true }, + { 118224, true }, + { 118238, true }, + { 118256, true }, + { 118269, true }, { 118283, true }, - { 118293, true }, - { 118315, true }, - { 118327, true }, - { 118338, true }, - { 118365, true }, - { 118377, true }, - { 118389, true }, + { 118297, true }, + { 118316, true }, + { 118326, true }, + { 118348, true }, + { 118360, true }, + { 118371, true }, + { 118398, true }, { 118410, true }, - { 118423, true }, - { 118430, true }, - { 118450, true }, - { 118460, true }, - { 118472, true }, - { 118488, true }, - { 118498, false }, - { 118515, true }, - { 118526, true }, - { 118533, true }, - { 118542, true }, - { 118561, true }, - { 118574, true }, - { 118584, true }, - { 118604, true }, - { 118614, true }, - { 118624, true }, - { 118632, true }, - { 118645, true }, - { 118662, true }, - { 118674, false }, - { 118685, false }, - { 118700, true }, - { 118712, true }, - { 118727, true }, - { 118737, true }, - { 118755, true }, - { 118766, true }, - { 118778, true }, - { 118799, false }, - { 118825, true }, - { 118839, true }, - { 118853, true }, - { 118867, true }, - { 118880, true }, - { 118894, true }, - { 118905, true }, - { 118919, true }, - { 118932, true }, - { 118944, true }, - { 118957, true }, - { 118974, false }, - { 118988, true }, - { 119001, true }, - { 119014, true }, - { 119027, true }, + { 118422, true }, + { 118443, true }, + { 118456, true }, + { 118463, true }, + { 118483, true }, + { 118493, true }, + { 118505, true }, + { 118521, true }, + { 118531, false }, + { 118548, true }, + { 118559, true }, + { 118566, true }, + { 118575, true }, + { 118594, true }, + { 118607, true }, + { 118617, true }, + { 118637, true }, + { 118647, true }, + { 118657, true }, + { 118665, true }, + { 118678, true }, + { 118695, true }, + { 118707, false }, + { 118718, false }, + { 118733, true }, + { 118745, true }, + { 118760, true }, + { 118770, true }, + { 118788, true }, + { 118799, true }, + { 118811, true }, + { 118832, false }, + { 118858, true }, + { 118872, true }, + { 118886, true }, + { 118900, true }, + { 118913, true }, + { 118927, true }, + { 118938, true }, + { 118952, true }, + { 118965, true }, + { 118977, true }, + { 118990, true }, + { 119007, false }, + { 119021, true }, + { 119034, true }, { 119047, true }, - { 119057, true }, - { 119068, true }, - { 119079, true }, + { 119060, true }, + { 119080, true }, { 119090, true }, - { 119102, true }, - { 119115, true }, - { 119139, true }, - { 119151, true }, - { 119163, true }, - { 119177, true }, - { 119192, true }, - { 119215, true }, - { 119226, true }, - { 119240, true }, - { 119253, false }, - { 119268, true }, - { 119280, true }, - { 119296, true }, - { 119308, true }, - { 119322, true }, - { 119332, true }, - { 119346, true }, - { 119359, true }, - { 119372, true }, - { 119386, true }, - { 119396, true }, - { 119424, true }, - { 119452, true }, - { 119462, true }, - { 119474, true }, - { 119484, true }, - { 119494, true }, + { 119101, true }, + { 119112, true }, + { 119123, true }, + { 119135, true }, + { 119148, true }, + { 119172, true }, + { 119184, true }, + { 119196, true }, + { 119210, true }, + { 119225, true }, + { 119248, true }, + { 119259, true }, + { 119273, true }, + { 119286, false }, + { 119301, true }, + { 119313, true }, + { 119329, true }, + { 119341, true }, + { 119355, true }, + { 119365, true }, + { 119379, true }, + { 119392, true }, + { 119405, true }, + { 119419, true }, + { 119429, true }, + { 119457, true }, + { 119485, true }, + { 119495, true }, { 119507, true }, - { 119523, true }, - { 119536, true }, - { 119552, false }, - { 119567, true }, - { 119585, true }, - { 119604, true }, - { 119612, true }, - { 119625, true }, - { 119640, true }, - { 119654, true }, - { 119670, true }, - { 119684, true }, - { 119702, true }, - { 119712, true }, - { 119721, false }, - { 119732, true }, - { 119748, true }, - { 119759, true }, - { 119769, true }, + { 119517, true }, + { 119527, true }, + { 119540, true }, + { 119556, true }, + { 119569, true }, + { 119585, false }, + { 119600, true }, + { 119618, true }, + { 119637, true }, + { 119645, true }, + { 119658, true }, + { 119673, true }, + { 119687, true }, + { 119703, true }, + { 119717, true }, + { 119735, true }, + { 119745, true }, + { 119754, false }, + { 119765, true }, { 119781, true }, - { 119791, true }, - { 119818, true }, - { 119836, true }, - { 119850, true }, - { 119861, true }, - { 119870, true }, - { 119879, true }, - { 119896, false }, - { 119910, true }, - { 119933, true }, - { 119949, true }, - { 119970, true }, - { 119986, true }, - { 119999, true }, - { 120021, true }, - { 120031, true }, - { 120039, true }, - { 120048, true }, - { 120059, true }, - { 120074, true }, - { 120088, true }, - { 120098, true }, - { 120115, true }, - { 120130, true }, - { 120144, true }, - { 120154, true }, - { 120174, true }, - { 120184, true }, - { 120198, true }, - { 120210, true }, - { 120229, true }, - { 120242, true }, - { 120266, false }, - { 120285, true }, - { 120313, true }, - { 120327, true }, - { 120341, true }, - { 120353, true }, - { 120367, true }, - { 120377, true }, - { 120399, true }, - { 120418, true }, - { 120436, true }, - { 120444, true }, - { 120460, true }, - { 120475, true }, - { 120483, true }, - { 120494, true }, - { 120507, true }, - { 120523, true }, - { 120537, true }, - { 120553, true }, - { 120567, true }, - { 120582, true }, - { 120597, true }, - { 120609, true }, - { 120621, true }, - { 120640, false }, - { 120665, true }, - { 120684, true }, - { 120701, true }, - { 120711, true }, - { 120722, true }, - { 120734, false }, - { 120749, true }, - { 120767, true }, - { 120776, true }, - { 120783, true }, - { 120794, true }, - { 120808, true }, - { 120821, true }, - { 120834, true }, - { 120847, true }, - { 120858, true }, - { 120871, true }, - { 120881, true }, - { 120891, true }, - { 120903, true }, - { 120911, true }, - { 120923, true }, - { 120932, true }, - { 120939, true }, - { 120949, true }, + { 119792, true }, + { 119802, true }, + { 119814, true }, + { 119824, true }, + { 119851, true }, + { 119869, true }, + { 119883, true }, + { 119894, true }, + { 119903, true }, + { 119912, true }, + { 119929, false }, + { 119943, true }, + { 119966, true }, + { 119982, true }, + { 120003, true }, + { 120019, true }, + { 120032, true }, + { 120054, true }, + { 120064, true }, + { 120072, true }, + { 120081, true }, + { 120092, true }, + { 120107, true }, + { 120121, true }, + { 120131, true }, + { 120148, true }, + { 120163, true }, + { 120177, true }, + { 120187, true }, + { 120207, true }, + { 120217, true }, + { 120231, true }, + { 120243, true }, + { 120262, true }, + { 120275, true }, + { 120299, false }, + { 120318, true }, + { 120346, true }, + { 120360, true }, + { 120374, true }, + { 120386, true }, + { 120400, true }, + { 120410, true }, + { 120432, true }, + { 120451, true }, + { 120469, true }, + { 120477, true }, + { 120493, true }, + { 120508, true }, + { 120516, true }, + { 120527, true }, + { 120540, true }, + { 120556, true }, + { 120570, true }, + { 120586, true }, + { 120600, true }, + { 120615, true }, + { 120630, true }, + { 120642, true }, + { 120654, true }, + { 120673, true }, + { 120689, false }, + { 120714, true }, + { 120733, true }, + { 120750, true }, + { 120760, true }, + { 120771, true }, + { 120783, false }, + { 120798, true }, + { 120816, true }, + { 120825, true }, + { 120832, true }, + { 120843, true }, + { 120857, true }, + { 120870, true }, + { 120883, true }, + { 120896, true }, + { 120907, true }, + { 120920, true }, + { 120930, true }, + { 120940, true }, + { 120952, true }, { 120960, true }, - { 120978, true }, - { 120996, true }, - { 121010, true }, - { 121024, true }, - { 121047, true }, - { 121057, true }, - { 121072, true }, - { 121090, true }, - { 121107, true }, + { 120972, true }, + { 120981, true }, + { 120988, true }, + { 120998, true }, + { 121009, true }, + { 121027, true }, + { 121045, true }, + { 121059, true }, + { 121073, true }, + { 121096, true }, + { 121106, true }, { 121121, true }, - { 121135, true }, - { 121150, true }, - { 121166, true }, - { 121179, true }, - { 121193, true }, - { 121205, true }, - { 121217, true }, - { 121230, true }, - { 121243, false }, + { 121139, true }, + { 121156, true }, + { 121170, true }, + { 121184, true }, + { 121199, true }, + { 121215, true }, + { 121228, true }, + { 121242, true }, { 121254, true }, - { 121268, true }, + { 121266, true }, { 121279, true }, - { 121292, true }, - { 121307, true }, - { 121314, true }, - { 121333, true }, - { 121352, true }, - { 121367, true }, - { 121391, false }, - { 121406, true }, - { 121417, true }, + { 121292, false }, + { 121303, true }, + { 121317, true }, + { 121328, true }, + { 121341, true }, + { 121356, true }, + { 121363, true }, + { 121382, true }, + { 121401, true }, + { 121416, true }, { 121440, false }, - { 121451, false }, - { 121462, false }, - { 121474, true }, - { 121488, true }, - { 121501, true }, - { 121514, true }, - { 121527, true }, - { 121549, true }, - { 121559, true }, - { 121579, true }, - { 121597, true }, - { 121611, true }, - { 121628, false }, - { 121643, false }, - { 121659, true }, - { 121676, true }, - { 121687, true }, - { 121709, true }, - { 121723, true }, - { 121743, true }, - { 121753, true }, - { 121764, true }, + { 121455, true }, + { 121466, true }, + { 121489, false }, + { 121500, false }, + { 121511, false }, + { 121523, true }, + { 121537, true }, + { 121550, true }, + { 121563, true }, + { 121576, true }, + { 121598, true }, + { 121608, true }, + { 121628, true }, + { 121646, true }, + { 121660, true }, + { 121677, false }, + { 121692, false }, + { 121708, true }, + { 121725, true }, + { 121736, true }, + { 121758, true }, { 121772, true }, - { 121781, true }, { 121792, true }, { 121802, true }, - { 121817, true }, + { 121813, true }, + { 121821, true }, { 121830, true }, - { 121844, true }, - { 121852, true }, - { 121869, true }, - { 121890, true }, - { 121904, true }, - { 121919, true }, - { 121933, true }, + { 121841, true }, + { 121851, true }, + { 121866, true }, + { 121879, true }, + { 121893, true }, + { 121901, true }, + { 121918, true }, + { 121939, true }, { 121953, true }, { 121968, true }, - { 121979, true }, - { 121991, true }, - { 122010, true }, - { 122023, true }, - { 122035, true }, - { 122046, false }, - { 122062, true }, - { 122075, true }, - { 122089, true }, - { 122102, true }, - { 122112, true }, - { 122132, true }, - { 122155, true }, - { 122175, true }, - { 122186, true }, - { 122196, true }, - { 122206, true }, - { 122221, true }, - { 122231, true }, - { 122248, true }, - { 122264, true }, - { 122279, true }, - { 122299, true }, - { 122309, true }, - { 122323, true }, - { 122335, true }, - { 122349, true }, - { 122363, true }, - { 122377, true }, - { 122391, true }, - { 122405, true }, - { 122420, true }, - { 122434, true }, - { 122448, true }, - { 122462, true }, - { 122482, true }, - { 122499, true }, - { 122514, true }, - { 122525, true }, - { 122538, true }, - { 122556, true }, - { 122571, true }, + { 121982, true }, + { 122002, true }, + { 122017, true }, + { 122028, true }, + { 122040, true }, + { 122059, true }, + { 122072, true }, + { 122084, true }, + { 122095, false }, + { 122111, true }, + { 122124, true }, + { 122138, true }, + { 122151, true }, + { 122161, true }, + { 122181, true }, + { 122204, false }, + { 122224, true }, + { 122235, true }, + { 122245, true }, + { 122255, true }, + { 122270, true }, + { 122280, true }, + { 122297, true }, + { 122313, true }, + { 122328, true }, + { 122348, true }, + { 122358, true }, + { 122372, true }, + { 122384, true }, + { 122398, true }, + { 122412, true }, + { 122426, true }, + { 122440, true }, + { 122454, true }, + { 122469, true }, + { 122483, true }, + { 122497, true }, + { 122511, true }, + { 122531, true }, + { 122548, true }, + { 122563, true }, + { 122574, true }, { 122587, true }, - { 122599, true }, - { 122616, true }, - { 122629, true }, - { 122644, true }, - { 122653, false }, - { 122668, true }, - { 122679, true }, - { 122694, true }, - { 122706, true }, - { 122723, true }, - { 122732, true }, - { 122744, true }, - { 122761, false }, - { 122771, true }, - { 122790, true }, - { 122800, true }, - { 122816, true }, - { 122836, true }, - { 122850, true }, - { 122864, true }, - { 122883, true }, - { 122903, true }, - { 122915, true }, - { 122931, true }, - { 122941, true }, - { 122956, true }, - { 122966, true }, + { 122605, true }, + { 122620, true }, + { 122636, true }, + { 122648, true }, + { 122665, true }, + { 122678, true }, + { 122693, true }, + { 122702, false }, + { 122717, true }, + { 122728, true }, + { 122743, true }, + { 122755, true }, + { 122772, true }, + { 122781, true }, + { 122793, true }, + { 122810, false }, + { 122820, true }, + { 122839, true }, + { 122849, true }, + { 122865, true }, + { 122885, true }, + { 122899, true }, + { 122913, true }, + { 122932, true }, + { 122952, true }, + { 122964, true }, { 122980, true }, { 122990, true }, - { 123009, true }, - { 123026, true }, - { 123035, true }, - { 123048, true }, - { 123063, true }, - { 123077, true }, - { 123096, true }, - { 123114, true }, - { 123128, true }, - { 123143, true }, - { 123159, true }, - { 123175, true }, - { 123183, true }, - { 123203, true }, - { 123215, true }, - { 123227, true }, - { 123239, true }, + { 123005, true }, + { 123015, true }, + { 123029, true }, + { 123039, true }, + { 123058, true }, + { 123075, true }, + { 123084, true }, + { 123097, true }, + { 123112, true }, + { 123126, true }, + { 123145, true }, + { 123163, true }, + { 123177, true }, + { 123192, true }, + { 123208, true }, + { 123224, true }, + { 123232, true }, { 123252, true }, - { 123265, true }, - { 123279, true }, - { 123293, true }, - { 123307, false }, - { 123333, true }, - { 123344, true }, - { 123353, true }, - { 123361, true }, - { 123369, true }, - { 123377, true }, - { 123387, true }, - { 123396, true }, - { 123408, true }, - { 123427, true }, - { 123437, true }, - { 123448, true }, - { 123458, true }, - { 123475, true }, - { 123488, true }, - { 123498, true }, - { 123512, true }, - { 123523, true }, - { 123541, true }, - { 123559, true }, - { 123573, true }, - { 123583, true }, - { 123597, true }, - { 123604, true }, - { 123614, true }, - { 123629, true }, - { 123651, true }, - { 123659, true }, - { 123669, true }, - { 123688, true }, + { 123264, true }, + { 123276, true }, + { 123288, true }, + { 123301, true }, + { 123314, true }, + { 123328, true }, + { 123342, true }, + { 123356, false }, + { 123382, true }, + { 123393, true }, + { 123402, true }, + { 123410, true }, + { 123418, true }, + { 123426, true }, + { 123436, true }, + { 123445, true }, + { 123457, true }, + { 123476, true }, + { 123486, true }, + { 123497, true }, + { 123507, true }, + { 123524, true }, + { 123537, true }, + { 123547, true }, + { 123561, true }, + { 123572, true }, + { 123590, true }, + { 123608, true }, + { 123622, true }, + { 123632, true }, + { 123646, true }, + { 123653, true }, + { 123663, true }, + { 123678, true }, { 123700, true }, - { 123710, true }, - { 123720, true }, - { 123730, true }, - { 123741, true }, - { 123754, true }, - { 123762, true }, - { 123776, true }, - { 123786, true }, - { 123797, true }, - { 123804, true }, - { 123812, true }, - { 123830, true }, - { 123841, true }, - { 123857, false }, - { 123872, true }, - { 123882, true }, - { 123891, true }, - { 123899, true }, - { 123908, true }, - { 123917, true }, - { 123937, true }, - { 123946, false }, + { 123708, true }, + { 123718, true }, + { 123737, true }, + { 123749, true }, + { 123759, true }, + { 123769, true }, + { 123779, true }, + { 123790, true }, + { 123803, true }, + { 123811, true }, + { 123825, true }, + { 123835, true }, + { 123846, true }, + { 123853, true }, + { 123861, true }, + { 123879, true }, + { 123890, true }, + { 123906, false }, + { 123921, true }, + { 123931, true }, + { 123940, true }, + { 123948, true }, { 123957, true }, - { 123969, false }, - { 123983, true }, - { 123999, true }, - { 124012, true }, - { 124025, true }, - { 124037, true }, - { 124052, true }, - { 124062, true }, + { 123966, true }, + { 123986, true }, + { 123995, false }, + { 124006, true }, + { 124018, false }, + { 124032, true }, + { 124048, true }, + { 124061, true }, { 124074, true }, { 124086, true }, - { 124097, true }, - { 124108, true }, - { 124120, true }, - { 124143, true }, - { 124153, true }, - { 124163, true }, - { 124179, true }, - { 124194, true }, - { 124207, true }, - { 124216, true }, - { 124231, true }, - { 124244, true }, - { 124257, true }, - { 124272, true }, - { 124282, true }, - { 124299, true }, - { 124315, true }, - { 124329, false }, - { 124339, true }, - { 124350, true }, - { 124360, true }, - { 124374, true }, - { 124385, true }, - { 124398, true }, - { 124411, true }, - { 124428, true }, - { 124440, true }, - { 124457, true }, - { 124475, true }, - { 124486, true }, - { 124499, true }, - { 124520, true }, - { 124531, true }, - { 124555, true }, - { 124570, true }, + { 124101, true }, + { 124111, true }, + { 124123, true }, + { 124135, true }, + { 124146, true }, + { 124157, true }, + { 124169, true }, + { 124192, true }, + { 124202, true }, + { 124212, true }, + { 124228, true }, + { 124243, true }, + { 124256, true }, + { 124265, true }, + { 124280, true }, + { 124293, true }, + { 124306, true }, + { 124321, true }, + { 124331, true }, + { 124348, true }, + { 124364, true }, + { 124378, false }, + { 124388, true }, + { 124399, true }, + { 124409, true }, + { 124423, true }, + { 124434, true }, + { 124447, true }, + { 124460, true }, + { 124477, true }, + { 124489, true }, + { 124506, true }, + { 124524, true }, + { 124535, true }, + { 124548, true }, + { 124569, true }, + { 124580, true }, { 124595, true }, - { 124603, true }, - { 124619, false }, - { 124634, true }, - { 124646, true }, - { 124658, true }, - { 124672, true }, - { 124686, true }, - { 124700, true }, - { 124714, true }, - { 124731, true }, - { 124758, true }, - { 124775, true }, - { 124795, true }, - { 124807, true }, - { 124817, true }, - { 124831, true }, - { 124853, true }, - { 124867, true }, - { 124885, true }, - { 124906, true }, - { 124923, true }, - { 124934, true }, + { 124620, true }, + { 124628, true }, + { 124644, false }, + { 124659, true }, + { 124671, true }, + { 124683, true }, + { 124697, true }, + { 124711, true }, + { 124725, true }, + { 124739, true }, + { 124756, true }, + { 124783, true }, + { 124800, true }, + { 124820, true }, + { 124832, true }, + { 124842, true }, + { 124856, true }, + { 124878, true }, + { 124892, true }, + { 124910, true }, + { 124931, true }, { 124948, true }, - { 124961, true }, - { 124977, true }, - { 124989, true }, - { 125005, true }, - { 125022, true }, - { 125036, true }, - { 125048, false }, - { 125073, true }, - { 125097, true }, - { 125107, false }, - { 125133, true }, - { 125150, true }, - { 125167, true }, - { 125181, true }, - { 125211, false }, - { 125225, true }, - { 125242, true }, - { 125256, true }, - { 125279, true }, - { 125297, true }, - { 125312, true }, - { 125320, true }, - { 125328, true }, - { 125336, true }, - { 125344, true }, - { 125352, true }, - { 125363, true }, - { 125373, true }, - { 125387, true }, - { 125406, true }, - { 125422, true }, - { 125433, true }, - { 125458, true }, - { 125470, true }, - { 125479, false }, - { 125495, true }, - { 125505, false }, - { 125527, true }, - { 125542, true }, - { 125556, true }, - { 125569, true }, - { 125586, true }, - { 125602, true }, - { 125625, true }, - { 125647, true }, - { 125665, true }, - { 125684, false }, - { 125703, true }, - { 125716, true }, - { 125729, true }, - { 125753, true }, - { 125764, true }, - { 125783, true }, - { 125811, true }, - { 125832, true }, - { 125845, true }, - { 125865, true }, - { 125885, true }, - { 125899, true }, - { 125912, true }, - { 125933, false }, - { 125944, true }, - { 125963, true }, - { 125974, true }, - { 125986, true }, - { 125997, true }, - { 126027, true }, - { 126038, true }, - { 126052, true }, - { 126066, true }, - { 126078, true }, - { 126092, true }, - { 126112, true }, - { 126127, true }, - { 126138, true }, - { 126162, true }, - { 126183, true }, - { 126196, true }, - { 126213, true }, - { 126229, true }, - { 126247, true }, - { 126269, true }, - { 126286, true }, - { 126300, true }, - { 126314, true }, - { 126330, true }, - { 126350, true }, - { 126365, true }, - { 126382, true }, - { 126409, true }, - { 126428, true }, - { 126443, true }, - { 126454, true }, + { 124959, true }, + { 124973, true }, + { 124986, true }, + { 125002, true }, + { 125014, true }, + { 125031, true }, + { 125045, true }, + { 125057, false }, + { 125082, true }, + { 125106, true }, + { 125116, false }, + { 125142, true }, + { 125159, true }, + { 125176, true }, + { 125190, true }, + { 125220, false }, + { 125234, true }, + { 125251, true }, + { 125265, true }, + { 125288, true }, + { 125306, true }, + { 125314, true }, + { 125322, true }, + { 125330, true }, + { 125338, true }, + { 125346, true }, + { 125357, true }, + { 125367, true }, + { 125381, true }, + { 125400, true }, + { 125416, true }, + { 125427, true }, + { 125452, true }, + { 125464, true }, + { 125473, false }, + { 125489, true }, + { 125499, false }, + { 125521, true }, + { 125536, true }, + { 125550, true }, + { 125563, true }, + { 125580, true }, + { 125596, true }, + { 125619, true }, + { 125641, true }, + { 125659, true }, + { 125678, false }, + { 125697, true }, + { 125710, true }, + { 125723, true }, + { 125747, true }, + { 125758, true }, + { 125777, true }, + { 125805, true }, + { 125826, true }, + { 125839, true }, + { 125859, true }, + { 125879, true }, + { 125893, true }, + { 125906, true }, + { 125927, false }, + { 125938, true }, + { 125957, true }, + { 125968, true }, + { 125980, true }, + { 125991, true }, + { 126021, true }, + { 126032, true }, + { 126046, true }, + { 126060, true }, + { 126072, true }, + { 126086, true }, + { 126106, true }, + { 126121, true }, + { 126132, true }, + { 126156, true }, + { 126177, true }, + { 126190, true }, + { 126207, true }, + { 126223, true }, + { 126241, true }, + { 126263, true }, + { 126280, true }, + { 126294, true }, + { 126308, true }, + { 126324, true }, + { 126344, true }, + { 126359, true }, + { 126376, true }, + { 126403, true }, + { 126422, true }, + { 126437, true }, + { 126451, true }, { 126468, true }, - { 126485, true }, + { 126484, true }, { 126501, true }, - { 126518, true }, - { 126533, true }, - { 126544, true }, - { 126560, true }, + { 126516, true }, + { 126527, true }, + { 126543, true }, + { 126559, true }, { 126576, true }, - { 126593, true }, - { 126613, true }, - { 126628, true }, - { 126647, true }, - { 126663, true }, - { 126673, true }, - { 126686, true }, - { 126705, true }, - { 126721, true }, - { 126741, true }, - { 126753, true }, - { 126770, false }, - { 126785, true }, - { 126797, true }, - { 126810, true }, + { 126596, true }, + { 126611, true }, + { 126630, true }, + { 126646, true }, + { 126656, true }, + { 126669, true }, + { 126688, true }, + { 126704, true }, + { 126724, true }, + { 126736, true }, + { 126753, false }, + { 126768, true }, + { 126780, true }, + { 126793, true }, + { 126803, true }, { 126820, true }, - { 126837, true }, - { 126849, false }, - { 126859, true }, + { 126832, false }, + { 126842, true }, + { 126855, true }, { 126872, true }, - { 126889, true }, + { 126895, true }, { 126912, true }, - { 126929, true }, - { 126944, true }, - { 126963, true }, - { 126988, true }, - { 127021, true }, - { 127031, true }, - { 127045, true }, - { 127061, true }, - { 127080, false }, - { 127103, true }, - { 127117, true }, - { 127131, true }, - { 127143, true }, - { 127158, true }, - { 127178, true }, - { 127190, true }, - { 127210, true }, - { 127228, true }, - { 127239, true }, - { 127254, true }, - { 127267, true }, - { 127280, true }, - { 127293, true }, - { 127304, true }, - { 127319, true }, - { 127330, true }, - { 127346, true }, - { 127360, true }, - { 127372, true }, - { 127386, true }, - { 127394, true }, - { 127413, true }, - { 127427, true }, + { 126927, true }, + { 126946, true }, + { 126971, true }, + { 127004, true }, + { 127014, true }, + { 127028, true }, + { 127044, true }, + { 127063, false }, + { 127086, true }, + { 127100, true }, + { 127114, true }, + { 127126, true }, + { 127141, true }, + { 127161, true }, + { 127173, true }, + { 127193, true }, + { 127211, true }, + { 127222, true }, + { 127237, true }, + { 127250, true }, + { 127263, true }, + { 127276, true }, + { 127287, true }, + { 127302, true }, + { 127313, true }, + { 127329, true }, + { 127343, true }, + { 127355, true }, + { 127369, true }, + { 127377, true }, + { 127396, true }, + { 127410, true }, + { 127432, true }, { 127449, true }, - { 127466, true }, - { 127475, true }, - { 127488, true }, - { 127498, false }, - { 127510, true }, - { 127521, true }, - { 127531, true }, - { 127554, true }, - { 127568, true }, - { 127583, true }, - { 127607, true }, - { 127626, true }, - { 127640, true }, - { 127654, true }, - { 127675, true }, - { 127694, true }, - { 127704, true }, + { 127458, true }, + { 127471, true }, + { 127481, false }, + { 127493, true }, + { 127504, true }, + { 127514, true }, + { 127537, true }, + { 127551, true }, + { 127566, true }, + { 127590, true }, + { 127609, true }, + { 127623, true }, + { 127637, true }, + { 127658, true }, + { 127677, true }, + { 127687, true }, + { 127703, true }, { 127720, true }, - { 127737, true }, + { 127733, true }, { 127750, true }, - { 127767, true }, - { 127783, true }, - { 127802, true }, - { 127815, true }, - { 127827, true }, - { 127835, true }, - { 127851, true }, - { 127867, true }, - { 127887, true }, - { 127905, true }, + { 127766, true }, + { 127785, true }, + { 127798, true }, + { 127810, true }, + { 127818, true }, + { 127834, true }, + { 127850, true }, + { 127870, true }, + { 127888, true }, + { 127902, true }, { 127919, true }, - { 127936, true }, + { 127938, true }, { 127955, true }, - { 127972, true }, - { 127986, true }, - { 128007, true }, - { 128026, true }, - { 128044, true }, - { 128057, true }, - { 128067, true }, - { 128085, true }, - { 128105, true }, - { 128125, true }, - { 128134, true }, + { 127969, true }, + { 127990, true }, + { 128009, true }, + { 128027, true }, + { 128040, true }, + { 128050, true }, + { 128068, true }, + { 128088, true }, + { 128108, true }, + { 128117, true }, + { 128131, true }, { 128148, true }, - { 128165, true }, - { 128188, true }, - { 128197, true }, - { 128213, true }, - { 128231, true }, - { 128243, true }, - { 128256, true }, - { 128269, true }, - { 128285, true }, - { 128293, false }, - { 128305, true }, - { 128319, true }, - { 128329, true }, - { 128348, true }, - { 128363, true }, - { 128378, true }, - { 128397, true }, - { 128419, true }, - { 128438, true }, - { 128452, true }, - { 128464, true }, - { 128478, true }, - { 128491, false }, + { 128171, true }, + { 128180, true }, + { 128196, true }, + { 128214, true }, + { 128226, true }, + { 128239, true }, + { 128252, true }, + { 128268, true }, + { 128276, false }, + { 128288, true }, + { 128302, true }, + { 128312, true }, + { 128331, true }, + { 128346, true }, + { 128361, true }, + { 128380, true }, + { 128402, true }, + { 128421, true }, + { 128435, true }, + { 128447, true }, + { 128461, true }, + { 128474, false }, + { 128496, true }, { 128513, true }, - { 128530, true }, - { 128548, true }, - { 128561, true }, - { 128575, true }, - { 128586, true }, - { 128600, false }, - { 128620, true }, - { 128631, false }, - { 128640, true }, - { 128655, false }, - { 128673, true }, - { 128686, true }, - { 128696, true }, - { 128707, false }, - { 128722, true }, - { 128731, true }, - { 128743, true }, - { 128752, true }, - { 128765, true }, - { 128778, true }, - { 128791, true }, - { 128808, false }, - { 128825, true }, + { 128531, true }, + { 128544, true }, + { 128558, true }, + { 128569, true }, + { 128583, false }, + { 128603, true }, + { 128614, false }, + { 128623, true }, + { 128638, false }, + { 128656, true }, + { 128669, true }, + { 128679, true }, + { 128690, false }, + { 128705, true }, + { 128714, true }, + { 128726, true }, + { 128735, true }, + { 128748, true }, + { 128761, true }, + { 128774, true }, + { 128791, false }, + { 128808, true }, + { 128815, true }, + { 128823, true }, { 128832, true }, - { 128840, true }, - { 128849, true }, - { 128861, true }, - { 128884, true }, - { 128898, true }, + { 128844, true }, + { 128867, true }, + { 128881, true }, + { 128895, true }, { 128912, true }, - { 128929, true }, - { 128943, false }, - { 128959, false }, + { 128926, false }, + { 128942, false }, + { 128956, true }, + { 128963, true }, { 128973, true }, - { 128980, true }, - { 128990, true }, - { 129001, true }, - { 129016, true }, - { 129028, true }, - { 129036, true }, - { 129048, true }, - { 129063, false }, - { 129073, true }, - { 129085, true }, - { 129097, true }, - { 129112, true }, - { 129141, true }, - { 129155, true }, + { 128984, true }, + { 128999, true }, + { 129011, true }, + { 129019, true }, + { 129031, true }, + { 129046, false }, + { 129056, true }, + { 129068, true }, + { 129080, true }, + { 129095, true }, + { 129124, true }, + { 129138, true }, + { 129146, true }, + { 129154, true }, { 129163, true }, - { 129171, true }, - { 129180, true }, - { 129193, true }, - { 129201, true }, - { 129212, true }, - { 129223, true }, - { 129230, true }, - { 129239, true }, - { 129249, true }, - { 129269, true }, - { 129281, true }, - { 129293, true }, - { 129302, false }, - { 129311, true }, - { 129331, false }, - { 129352, true }, - { 129363, true }, - { 129376, true }, - { 129385, true }, + { 129176, true }, + { 129184, true }, + { 129195, true }, + { 129206, true }, + { 129213, true }, + { 129222, true }, + { 129232, true }, + { 129252, true }, + { 129264, true }, + { 129276, true }, + { 129285, false }, + { 129294, true }, + { 129314, false }, + { 129335, true }, + { 129346, true }, + { 129359, true }, + { 129368, true }, + { 129382, true }, { 129399, true }, - { 129416, true }, - { 129432, true }, - { 129450, true }, + { 129415, true }, + { 129433, true }, + { 129447, true }, { 129464, true }, - { 129481, true }, - { 129493, true }, - { 129506, true }, - { 129518, true }, - { 129532, true }, - { 129550, true }, - { 129564, true }, - { 129580, false }, + { 129476, true }, + { 129489, true }, + { 129501, true }, + { 129515, true }, + { 129533, true }, + { 129547, true }, + { 129563, false }, + { 129581, true }, { 129598, true }, - { 129615, true }, - { 129637, true }, - { 129660, true }, - { 129671, true }, - { 129682, true }, - { 129693, true }, - { 129704, true }, - { 129716, true }, - { 129730, true }, - { 129741, true }, - { 129753, true }, - { 129769, true }, - { 129798, false }, - { 129817, true }, - { 129833, true }, - { 129859, true }, + { 129620, true }, + { 129643, true }, + { 129654, true }, + { 129665, true }, + { 129676, true }, + { 129687, true }, + { 129699, true }, + { 129713, true }, + { 129724, true }, + { 129736, true }, + { 129752, true }, + { 129781, false }, + { 129800, true }, + { 129816, true }, + { 129842, true }, + { 129856, true }, { 129873, true }, - { 129890, true }, + { 129892, true }, { 129909, true }, - { 129926, true }, - { 129942, true }, - { 129953, true }, - { 129961, true }, + { 129925, true }, + { 129936, true }, + { 129944, true }, + { 129956, true }, { 129973, true }, - { 129990, true }, - { 130003, true }, - { 130018, true }, - { 130031, true }, - { 130045, true }, - { 130057, true }, - { 130069, true }, + { 129986, true }, + { 130001, true }, + { 130014, true }, + { 130028, true }, + { 130040, true }, + { 130052, true }, + { 130066, true }, { 130083, true }, - { 130100, true }, - { 130113, true }, - { 130128, true }, - { 130141, true }, - { 130153, true }, - { 130167, true }, - { 130178, true }, - { 130201, true }, - { 130219, true }, - { 130240, true }, - { 130259, true }, + { 130096, true }, + { 130111, true }, + { 130124, true }, + { 130136, true }, + { 130150, true }, + { 130161, true }, + { 130184, true }, + { 130202, true }, + { 130223, true }, + { 130242, true }, + { 130260, true }, { 130277, true }, { 130294, true }, - { 130311, true }, - { 130322, true }, - { 130344, true }, - { 130366, true }, - { 130378, true }, - { 130386, true }, - { 130407, true }, - { 130428, true }, - { 130449, true }, - { 130467, true }, - { 130483, true }, - { 130495, true }, - { 130507, true }, - { 130525, true }, - { 130535, true }, - { 130549, true }, - { 130565, true }, - { 130591, false }, - { 130620, true }, - { 130631, true }, - { 130646, true }, - { 130662, true }, - { 130677, true }, - { 130688, true }, - { 130702, true }, - { 130729, true }, - { 130747, true }, - { 130764, false }, - { 130775, true }, - { 130785, true }, - { 130800, true }, - { 130811, true }, - { 130829, true }, - { 130847, true }, - { 130860, true }, - { 130871, true }, - { 130893, true }, - { 130912, true }, - { 130926, true }, - { 130938, false }, - { 130958, true }, - { 130968, true }, - { 130982, true }, - { 131000, true }, - { 131014, true }, - { 131026, true }, - { 131036, true }, - { 131048, true }, + { 130305, true }, + { 130327, true }, + { 130349, true }, + { 130361, true }, + { 130369, true }, + { 130390, true }, + { 130411, true }, + { 130432, true }, + { 130450, true }, + { 130466, true }, + { 130478, true }, + { 130490, true }, + { 130508, true }, + { 130518, true }, + { 130532, true }, + { 130548, true }, + { 130574, false }, + { 130603, true }, + { 130614, true }, + { 130629, true }, + { 130645, true }, + { 130660, true }, + { 130671, true }, + { 130685, true }, + { 130712, true }, + { 130730, true }, + { 130747, false }, + { 130758, true }, + { 130768, true }, + { 130783, true }, + { 130794, true }, + { 130812, true }, + { 130830, true }, + { 130843, true }, + { 130854, true }, + { 130876, true }, + { 130895, true }, + { 130909, true }, + { 130921, false }, + { 130941, true }, + { 130951, true }, + { 130965, true }, + { 130983, true }, + { 130997, true }, + { 131009, true }, + { 131019, true }, + { 131031, true }, + { 131039, true }, { 131056, true }, - { 131073, true }, - { 131087, true }, - { 131108, true }, - { 131120, true }, - { 131138, true }, - { 131154, true }, - { 131166, true }, - { 131178, true }, - { 131190, true }, - { 131202, true }, - { 131214, true }, - { 131226, true }, - { 131238, true }, - { 131250, true }, - { 131266, false }, - { 131286, true }, - { 131295, true }, - { 131309, true }, - { 131325, true }, - { 131338, true }, - { 131351, true }, - { 131374, true }, - { 131387, true }, - { 131395, true }, - { 131410, false }, - { 131426, true }, - { 131436, true }, - { 131454, true }, - { 131468, true }, - { 131477, true }, - { 131490, true }, - { 131506, true }, - { 131521, true }, - { 131537, true }, - { 131549, true }, - { 131560, true }, - { 131575, true }, - { 131590, true }, - { 131602, true }, - { 131620, true }, - { 131639, true }, - { 131658, true }, - { 131680, true }, - { 131700, true }, + { 131070, true }, + { 131091, true }, + { 131103, true }, + { 131121, true }, + { 131137, true }, + { 131149, true }, + { 131161, true }, + { 131173, true }, + { 131185, true }, + { 131197, true }, + { 131209, true }, + { 131221, true }, + { 131233, true }, + { 131249, false }, + { 131269, true }, + { 131278, true }, + { 131292, true }, + { 131308, true }, + { 131321, true }, + { 131334, true }, + { 131357, true }, + { 131370, true }, + { 131378, true }, + { 131393, false }, + { 131409, true }, + { 131419, true }, + { 131437, true }, + { 131451, true }, + { 131460, true }, + { 131473, true }, + { 131489, true }, + { 131504, true }, + { 131520, true }, + { 131532, true }, + { 131543, true }, + { 131558, true }, + { 131573, true }, + { 131585, true }, + { 131603, true }, + { 131622, true }, + { 131641, true }, + { 131663, true }, + { 131683, true }, + { 131702, true }, { 131719, true }, - { 131736, true }, - { 131754, true }, - { 131772, true }, - { 131790, true }, - { 131812, true }, - { 131826, true }, + { 131737, true }, + { 131755, true }, + { 131773, true }, + { 131795, true }, + { 131809, true }, + { 131825, true }, { 131842, true }, - { 131859, true }, - { 131880, true }, - { 131895, true }, - { 131917, true }, + { 131863, true }, + { 131878, true }, + { 131900, true }, + { 131924, true }, { 131941, true }, - { 131958, true }, - { 131969, true }, - { 131982, true }, - { 131995, true }, - { 132007, true }, - { 132017, true }, - { 132028, true }, - { 132043, true }, - { 132054, true }, - { 132066, true }, - { 132075, true }, - { 132085, true }, - { 132094, true }, - { 132105, true }, - { 132130, true }, - { 132142, true }, - { 132160, true }, - { 132176, true }, - { 132187, true }, - { 132203, true }, - { 132226, true }, - { 132247, true }, - { 132265, true }, - { 132284, true }, - { 132293, false }, - { 132307, true }, - { 132318, true }, - { 132331, true }, - { 132345, true }, - { 132360, true }, - { 132371, true }, - { 132384, true }, - { 132393, true }, - { 132407, true }, - { 132420, true }, - { 132434, true }, - { 132447, true }, - { 132458, true }, - { 132471, true }, - { 132483, true }, - { 132493, true }, - { 132507, true }, - { 132516, true }, - { 132531, true }, - { 132544, true }, - { 132557, true }, - { 132576, true }, - { 132589, true }, - { 132607, true }, - { 132623, true }, - { 132635, true }, - { 132648, true }, - { 132660, true }, - { 132675, true }, - { 132685, true }, - { 132695, true }, - { 132706, true }, - { 132720, true }, - { 132731, true }, - { 132758, true }, - { 132772, true }, - { 132780, true }, - { 132802, true }, - { 132816, true }, - { 132830, true }, - { 132841, true }, - { 132860, true }, - { 132879, true }, - { 132898, true }, - { 132917, true }, - { 132937, true }, - { 132957, true }, - { 132977, true }, - { 132995, true }, - { 133014, true }, - { 133033, true }, - { 133052, true }, - { 133071, true }, - { 133085, true }, - { 133098, true }, - { 133110, true }, - { 133123, false }, - { 133145, true }, - { 133160, true }, - { 133172, true }, - { 133180, true }, - { 133205, true }, - { 133221, true }, - { 133230, true }, + { 131952, true }, + { 131965, true }, + { 131978, true }, + { 131990, true }, + { 132000, true }, + { 132011, true }, + { 132026, true }, + { 132037, true }, + { 132049, true }, + { 132058, true }, + { 132068, true }, + { 132077, true }, + { 132088, true }, + { 132113, true }, + { 132125, true }, + { 132143, true }, + { 132159, true }, + { 132170, true }, + { 132186, true }, + { 132209, true }, + { 132230, true }, + { 132248, true }, + { 132267, true }, + { 132276, false }, + { 132290, true }, + { 132301, true }, + { 132314, true }, + { 132328, true }, + { 132343, true }, + { 132354, true }, + { 132367, true }, + { 132376, true }, + { 132390, true }, + { 132403, true }, + { 132417, true }, + { 132430, true }, + { 132441, true }, + { 132454, true }, + { 132466, true }, + { 132476, true }, + { 132490, true }, + { 132499, true }, + { 132514, true }, + { 132527, true }, + { 132540, true }, + { 132559, true }, + { 132572, true }, + { 132590, true }, + { 132606, true }, + { 132618, true }, + { 132631, true }, + { 132643, true }, + { 132658, true }, + { 132668, true }, + { 132678, true }, + { 132689, true }, + { 132703, true }, + { 132714, true }, + { 132741, true }, + { 132755, true }, + { 132763, true }, + { 132785, true }, + { 132799, true }, + { 132813, true }, + { 132824, true }, + { 132843, true }, + { 132862, true }, + { 132881, true }, + { 132900, true }, + { 132920, true }, + { 132940, true }, + { 132960, true }, + { 132978, true }, + { 132997, true }, + { 133016, true }, + { 133035, true }, + { 133054, true }, + { 133068, true }, + { 133081, true }, + { 133093, true }, + { 133106, false }, + { 133128, true }, + { 133143, true }, + { 133155, true }, + { 133163, true }, + { 133188, true }, + { 133204, true }, + { 133213, true }, + { 133225, true }, { 133242, true }, - { 133259, true }, - { 133272, true }, - { 133287, true }, - { 133303, true }, - { 133321, true }, - { 133334, true }, - { 133346, true }, - { 133356, true }, - { 133367, true }, - { 133381, true }, - { 133396, true }, - { 133409, true }, - { 133420, true }, - { 133434, true }, - { 133449, true }, - { 133458, true }, - { 133471, true }, - { 133487, true }, - { 133506, true }, - { 133520, true }, - { 133535, true }, - { 133546, true }, - { 133556, true }, - { 133568, true }, + { 133255, true }, + { 133270, true }, + { 133286, true }, + { 133304, true }, + { 133317, true }, + { 133329, true }, + { 133339, true }, + { 133350, true }, + { 133364, true }, + { 133379, true }, + { 133392, true }, + { 133403, true }, + { 133417, true }, + { 133432, true }, + { 133441, true }, + { 133454, true }, + { 133470, true }, + { 133489, true }, + { 133503, true }, + { 133518, true }, + { 133529, true }, + { 133539, true }, + { 133551, true }, + { 133566, true }, { 133583, true }, - { 133600, true }, - { 133631, true }, - { 133646, true }, - { 133664, true }, - { 133685, true }, - { 133699, true }, - { 133717, true }, - { 133727, true }, - { 133739, true }, - { 133749, true }, - { 133758, true }, - { 133771, true }, - { 133786, true }, - { 133799, true }, - { 133811, true }, - { 133819, true }, - { 133837, true }, + { 133614, true }, + { 133629, true }, + { 133647, true }, + { 133668, true }, + { 133682, true }, + { 133700, true }, + { 133710, true }, + { 133722, true }, + { 133732, true }, + { 133741, true }, + { 133754, true }, + { 133769, true }, + { 133782, true }, + { 133794, true }, + { 133802, true }, + { 133820, true }, + { 133835, true }, { 133852, true }, - { 133869, true }, - { 133884, true }, - { 133897, true }, - { 133913, true }, - { 133933, true }, - { 133948, true }, - { 133962, true }, - { 133975, true }, - { 133985, true }, - { 133999, true }, - { 134009, true }, - { 134029, true }, - { 134038, true }, - { 134048, true }, - { 134059, true }, - { 134072, true }, - { 134091, true }, - { 134101, true }, - { 134112, true }, - { 134125, true }, - { 134132, true }, - { 134141, true }, - { 134157, true }, - { 134168, true }, - { 134175, true }, - { 134198, true }, - { 134207, true }, - { 134227, true }, - { 134235, true }, - { 134245, true }, - { 134266, true }, - { 134278, true }, - { 134287, true }, - { 134295, true }, - { 134304, true }, - { 134315, true }, - { 134325, true }, - { 134336, true }, - { 134343, true }, - { 134352, true }, - { 134360, true }, - { 134371, true }, - { 134383, true }, - { 134391, true }, - { 134399, true }, - { 134409, true }, - { 134425, true }, - { 134437, true }, - { 134467, true }, - { 134487, true }, - { 134501, false }, - { 134519, false }, - { 134535, true }, - { 134550, true }, - { 134566, true }, - { 134581, true }, - { 134602, true }, - { 134616, true }, - { 134635, true }, - { 134646, true }, - { 134656, true }, - { 134674, true }, - { 134685, true }, - { 134696, true }, - { 134710, true }, - { 134724, true }, - { 134757, true }, - { 134771, true }, - { 134791, true }, - { 134804, false }, - { 134820, true }, - { 134834, true }, - { 134853, true }, - { 134879, true }, - { 134902, true }, - { 134919, true }, - { 134932, true }, - { 134948, true }, - { 134956, true }, - { 134969, true }, - { 134976, true }, - { 134988, true }, - { 135000, true }, - { 135015, true }, - { 135025, true }, - { 135037, true }, - { 135048, true }, - { 135068, false }, - { 135086, true }, - { 135099, true }, - { 135110, true }, - { 135120, true }, - { 135134, true }, - { 135146, false }, - { 135162, true }, - { 135173, true }, - { 135182, true }, - { 135195, true }, - { 135203, true }, - { 135213, true }, - { 135230, true }, - { 135241, true }, - { 135257, true }, - { 135268, true }, - { 135280, true }, - { 135290, false }, - { 135305, true }, - { 135320, true }, - { 135335, false }, - { 135343, true }, - { 135359, true }, - { 135371, true }, - { 135386, true }, - { 135405, true }, - { 135425, true }, - { 135436, true }, - { 135450, true }, - { 135466, true }, - { 135488, true }, - { 135501, true }, - { 135520, true }, - { 135533, true }, - { 135542, true }, - { 135557, true }, - { 135570, true }, - { 135582, true }, - { 135599, true }, - { 135623, true }, - { 135636, true }, - { 135648, true }, - { 135665, true }, - { 135677, true }, - { 135695, true }, - { 135708, true }, - { 135723, true }, + { 133867, true }, + { 133880, true }, + { 133896, true }, + { 133916, true }, + { 133931, true }, + { 133947, true }, + { 133961, true }, + { 133974, true }, + { 133984, true }, + { 133998, true }, + { 134008, true }, + { 134028, true }, + { 134037, true }, + { 134047, true }, + { 134058, true }, + { 134071, true }, + { 134090, true }, + { 134100, true }, + { 134111, true }, + { 134124, true }, + { 134131, true }, + { 134140, true }, + { 134156, true }, + { 134167, true }, + { 134174, true }, + { 134197, true }, + { 134206, true }, + { 134226, true }, + { 134234, true }, + { 134244, true }, + { 134265, true }, + { 134277, true }, + { 134286, true }, + { 134294, true }, + { 134303, true }, + { 134314, true }, + { 134324, true }, + { 134335, true }, + { 134342, true }, + { 134351, true }, + { 134359, true }, + { 134370, true }, + { 134382, true }, + { 134390, true }, + { 134398, true }, + { 134408, true }, + { 134424, true }, + { 134436, true }, + { 134466, true }, + { 134486, true }, + { 134500, false }, + { 134518, false }, + { 134534, true }, + { 134549, true }, + { 134565, true }, + { 134580, true }, + { 134601, true }, + { 134615, true }, + { 134634, true }, + { 134645, true }, + { 134655, true }, + { 134673, true }, + { 134684, true }, + { 134695, true }, + { 134709, true }, + { 134723, true }, + { 134756, true }, + { 134770, true }, + { 134790, true }, + { 134803, false }, + { 134819, true }, + { 134833, true }, + { 134852, true }, + { 134878, true }, + { 134901, true }, + { 134918, true }, + { 134931, true }, + { 134947, true }, + { 134955, true }, + { 134968, true }, + { 134975, true }, + { 134987, true }, + { 134999, true }, + { 135014, true }, + { 135024, true }, + { 135036, true }, + { 135047, true }, + { 135067, true }, + { 135075, false }, + { 135093, true }, + { 135106, true }, + { 135117, true }, + { 135127, true }, + { 135141, true }, + { 135153, false }, + { 135169, true }, + { 135180, true }, + { 135189, true }, + { 135202, true }, + { 135210, true }, + { 135220, true }, + { 135237, true }, + { 135248, true }, + { 135264, true }, + { 135275, true }, + { 135287, true }, + { 135297, false }, + { 135312, true }, + { 135327, true }, + { 135342, false }, + { 135350, true }, + { 135366, true }, + { 135378, true }, + { 135393, true }, + { 135412, true }, + { 135432, true }, + { 135443, true }, + { 135457, true }, + { 135473, true }, + { 135495, true }, + { 135508, true }, + { 135527, true }, + { 135540, true }, + { 135549, true }, + { 135564, true }, + { 135577, true }, + { 135589, true }, + { 135606, true }, + { 135630, true }, + { 135643, true }, + { 135655, true }, + { 135672, true }, + { 135684, true }, + { 135702, true }, + { 135715, true }, { 135730, true }, - { 135742, true }, - { 135752, true }, - { 135766, true }, - { 135779, true }, - { 135793, true }, - { 135810, true }, - { 135825, true }, - { 135839, true }, - { 135851, true }, - { 135864, true }, - { 135884, true }, - { 135899, true }, - { 135914, true }, - { 135929, true }, - { 135948, true }, - { 135967, true }, - { 135986, true }, - { 136001, true }, - { 136012, true }, - { 136022, true }, - { 136035, false }, - { 136048, true }, - { 136062, true }, - { 136073, true }, - { 136088, true }, - { 136104, true }, - { 136117, true }, - { 136130, true }, - { 136150, true }, - { 136159, true }, - { 136175, true }, - { 136188, true }, - { 136203, true }, - { 136217, true }, - { 136227, true }, - { 136240, true }, - { 136258, true }, - { 136266, false }, - { 136279, true }, - { 136297, true }, - { 136320, true }, - { 136338, true }, - { 136369, true }, - { 136399, true }, - { 136421, true }, - { 136437, true }, - { 136448, false }, - { 136461, true }, - { 136473, true }, - { 136488, true }, - { 136505, false }, - { 136524, true }, - { 136535, true }, - { 136545, true }, - { 136555, true }, - { 136570, true }, - { 136584, true }, - { 136594, true }, - { 136606, true }, - { 136622, true }, - { 136633, true }, - { 136650, true }, - { 136663, true }, - { 136683, true }, - { 136693, true }, - { 136704, true }, - { 136714, false }, - { 136729, true }, - { 136744, true }, - { 136761, true }, - { 136776, true }, - { 136787, false }, - { 136800, true }, - { 136813, true }, - { 136823, true }, - { 136840, true }, - { 136852, true }, - { 136866, true }, - { 136877, true }, - { 136894, true }, - { 136907, true }, - { 136916, true }, - { 136927, true }, - { 136937, true }, - { 136951, true }, - { 136962, true }, - { 136971, true }, - { 136985, true }, - { 136995, true }, - { 137005, true }, - { 137021, true }, - { 137032, true }, - { 137044, true }, - { 137054, true }, - { 137063, true }, - { 137076, true }, - { 137087, false }, - { 137095, true }, - { 137113, true }, + { 135737, true }, + { 135749, true }, + { 135759, true }, + { 135773, true }, + { 135786, true }, + { 135800, true }, + { 135817, true }, + { 135832, true }, + { 135846, true }, + { 135858, true }, + { 135871, true }, + { 135891, true }, + { 135906, true }, + { 135921, true }, + { 135936, true }, + { 135955, true }, + { 135974, true }, + { 135993, true }, + { 136008, true }, + { 136019, true }, + { 136029, true }, + { 136042, false }, + { 136055, true }, + { 136069, true }, + { 136080, true }, + { 136095, true }, + { 136111, true }, + { 136124, true }, + { 136137, true }, + { 136157, true }, + { 136166, true }, + { 136182, true }, + { 136195, true }, + { 136210, true }, + { 136224, true }, + { 136234, true }, + { 136247, true }, + { 136265, true }, + { 136273, false }, + { 136286, true }, + { 136304, true }, + { 136327, true }, + { 136345, true }, + { 136376, true }, + { 136406, true }, + { 136428, true }, + { 136444, true }, + { 136455, false }, + { 136468, true }, + { 136480, true }, + { 136495, true }, + { 136512, false }, + { 136531, true }, + { 136542, true }, + { 136552, true }, + { 136562, true }, + { 136577, true }, + { 136591, true }, + { 136601, true }, + { 136613, true }, + { 136629, true }, + { 136640, true }, + { 136657, true }, + { 136670, true }, + { 136690, true }, + { 136700, true }, + { 136711, true }, + { 136721, false }, + { 136736, true }, + { 136751, true }, + { 136768, true }, + { 136783, true }, + { 136794, false }, + { 136807, true }, + { 136820, true }, + { 136830, true }, + { 136847, true }, + { 136859, true }, + { 136873, true }, + { 136884, true }, + { 136901, true }, + { 136914, true }, + { 136923, true }, + { 136934, true }, + { 136944, true }, + { 136958, true }, + { 136969, true }, + { 136978, true }, + { 136992, true }, + { 137002, true }, + { 137012, true }, + { 137028, true }, + { 137039, true }, + { 137051, true }, + { 137061, true }, + { 137070, true }, + { 137083, true }, + { 137094, false }, + { 137102, true }, { 137120, true }, - { 137131, false }, - { 137151, true }, - { 137158, false }, - { 137174, true }, - { 137190, true }, - { 137205, true }, - { 137217, true }, - { 137237, true }, - { 137251, true }, - { 137267, true }, - { 137277, true }, - { 137290, true }, - { 137308, true }, - { 137322, true }, - { 137339, true }, - { 137358, true }, - { 137374, true }, - { 137393, true }, - { 137416, true }, - { 137428, true }, - { 137450, true }, - { 137464, true }, - { 137475, true }, - { 137485, true }, - { 137499, true }, - { 137509, true }, - { 137520, true }, - { 137535, true }, - { 137544, true }, - { 137553, true }, - { 137570, true }, - { 137586, true }, - { 137608, true }, - { 137624, true }, - { 137638, true }, - { 137658, true }, - { 137666, true }, - { 137683, true }, - { 137700, true }, - { 137714, true }, - { 137733, true }, - { 137749, false }, - { 137763, true }, - { 137776, true }, - { 137793, true }, - { 137808, true }, - { 137827, true }, - { 137838, true }, - { 137849, true }, - { 137863, true }, - { 137877, true }, - { 137892, true }, - { 137913, true }, - { 137929, true }, - { 137947, true }, - { 137965, true }, - { 137978, true }, - { 138006, true }, - { 138018, true }, - { 138034, true }, - { 138045, true }, - { 138053, true }, - { 138067, true }, - { 138081, false }, - { 138090, true }, - { 138097, false }, - { 138107, false }, - { 138127, true }, - { 138138, true }, - { 138148, true }, - { 138159, true }, - { 138169, false }, - { 138188, false }, - { 138201, false }, - { 138213, false }, - { 138234, true }, - { 138256, true }, - { 138269, true }, - { 138285, true }, - { 138303, true }, - { 138312, true }, - { 138324, true }, - { 138340, true }, - { 138351, true }, - { 138375, true }, - { 138386, false }, - { 138402, true }, - { 138420, true }, - { 138435, true }, - { 138447, true }, - { 138462, true }, - { 138479, true }, - { 138493, true }, - { 138508, true }, - { 138527, true }, - { 138546, true }, - { 138557, true }, - { 138571, true }, - { 138589, true }, - { 138599, false }, - { 138628, true }, - { 138642, true }, - { 138666, true }, - { 138685, true }, - { 138698, true }, - { 138713, true }, - { 138727, true }, - { 138742, true }, - { 138760, true }, - { 138770, false }, - { 138785, true }, - { 138793, true }, - { 138806, false }, - { 138820, true }, - { 138831, true }, - { 138839, true }, - { 138847, true }, - { 138861, true }, - { 138883, true }, - { 138895, true }, - { 138907, true }, - { 138919, true }, - { 138934, true }, - { 138954, true }, - { 138977, true }, - { 138996, true }, - { 139015, true }, - { 139034, true }, - { 139053, true }, - { 139072, true }, - { 139091, true }, - { 139110, true }, - { 139127, true }, - { 139145, true }, - { 139162, true }, - { 139177, true }, - { 139195, true }, - { 139210, true }, - { 139223, true }, - { 139247, true }, - { 139264, true }, - { 139282, true }, - { 139298, true }, - { 139316, true }, - { 139333, true }, - { 139349, true }, - { 139362, true }, - { 139375, true }, - { 139392, true }, - { 139413, true }, - { 139428, true }, - { 139445, true }, - { 139457, true }, - { 139468, true }, - { 139476, true }, - { 139489, true }, - { 139503, true }, - { 139519, true }, - { 139535, true }, - { 139548, true }, - { 139561, true }, - { 139571, true }, - { 139584, true }, - { 139599, true }, - { 139609, true }, - { 139620, true }, - { 139635, true }, - { 139650, false }, - { 139660, false }, - { 139670, false }, - { 139680, true }, - { 139692, true }, - { 139700, false }, - { 139711, true }, - { 139719, true }, - { 139728, true }, - { 139741, true }, + { 137127, true }, + { 137138, false }, + { 137158, true }, + { 137165, false }, + { 137181, true }, + { 137197, true }, + { 137212, true }, + { 137224, true }, + { 137244, true }, + { 137258, true }, + { 137274, true }, + { 137284, true }, + { 137297, true }, + { 137315, true }, + { 137329, true }, + { 137346, true }, + { 137365, true }, + { 137381, true }, + { 137400, true }, + { 137423, true }, + { 137435, true }, + { 137457, true }, + { 137471, true }, + { 137482, true }, + { 137492, true }, + { 137506, true }, + { 137516, true }, + { 137527, true }, + { 137542, true }, + { 137551, true }, + { 137560, true }, + { 137577, true }, + { 137593, true }, + { 137615, true }, + { 137631, true }, + { 137645, true }, + { 137665, true }, + { 137673, true }, + { 137690, true }, + { 137707, true }, + { 137721, true }, + { 137740, true }, + { 137756, false }, + { 137770, true }, + { 137783, true }, + { 137800, true }, + { 137815, true }, + { 137834, true }, + { 137845, true }, + { 137856, true }, + { 137870, true }, + { 137884, true }, + { 137899, true }, + { 137920, true }, + { 137936, true }, + { 137954, true }, + { 137972, true }, + { 137985, true }, + { 138013, true }, + { 138025, true }, + { 138041, true }, + { 138052, true }, + { 138060, true }, + { 138074, true }, + { 138088, false }, + { 138097, true }, + { 138104, false }, + { 138114, false }, + { 138134, true }, + { 138145, true }, + { 138155, true }, + { 138166, true }, + { 138176, false }, + { 138195, false }, + { 138208, false }, + { 138220, false }, + { 138241, true }, + { 138263, true }, + { 138276, true }, + { 138292, true }, + { 138310, true }, + { 138319, true }, + { 138331, true }, + { 138347, true }, + { 138358, true }, + { 138382, true }, + { 138393, false }, + { 138409, true }, + { 138427, true }, + { 138442, true }, + { 138454, true }, + { 138469, true }, + { 138486, true }, + { 138500, true }, + { 138515, true }, + { 138534, true }, + { 138553, true }, + { 138564, true }, + { 138578, true }, + { 138596, true }, + { 138606, false }, + { 138635, true }, + { 138649, true }, + { 138673, true }, + { 138692, true }, + { 138705, true }, + { 138720, true }, + { 138734, true }, + { 138749, true }, + { 138767, true }, + { 138777, false }, + { 138792, true }, + { 138800, true }, + { 138813, false }, + { 138827, true }, + { 138838, true }, + { 138846, true }, + { 138854, true }, + { 138868, true }, + { 138890, true }, + { 138902, true }, + { 138914, true }, + { 138926, true }, + { 138941, true }, + { 138961, true }, + { 138984, true }, + { 139003, true }, + { 139022, true }, + { 139041, true }, + { 139060, true }, + { 139079, true }, + { 139098, true }, + { 139117, true }, + { 139134, true }, + { 139152, true }, + { 139169, true }, + { 139184, true }, + { 139202, true }, + { 139217, true }, + { 139230, true }, + { 139254, true }, + { 139271, true }, + { 139289, true }, + { 139305, true }, + { 139323, true }, + { 139340, true }, + { 139356, true }, + { 139369, true }, + { 139382, true }, + { 139399, true }, + { 139420, true }, + { 139435, true }, + { 139452, true }, + { 139464, true }, + { 139475, true }, + { 139483, true }, + { 139496, true }, + { 139510, true }, + { 139537, true }, + { 139553, true }, + { 139569, true }, + { 139582, true }, + { 139595, true }, + { 139605, true }, + { 139618, true }, + { 139633, true }, + { 139643, true }, + { 139654, true }, + { 139669, true }, + { 139684, false }, + { 139694, false }, + { 139704, false }, + { 139714, true }, + { 139726, true }, + { 139734, false }, + { 139745, true }, { 139753, true }, - { 139773, true }, - { 139794, true }, - { 139810, true }, - { 139827, true }, - { 139846, true }, - { 139855, true }, - { 139869, true }, - { 139879, true }, - { 139890, true }, - { 139899, true }, - { 139908, true }, - { 139921, true }, - { 139950, true }, - { 139969, true }, - { 139986, true }, - { 140009, true }, - { 140017, true }, - { 140035, true }, - { 140046, true }, - { 140059, true }, - { 140070, true }, - { 140083, true }, - { 140096, true }, - { 140113, true }, - { 140126, true }, - { 140137, true }, - { 140146, true }, - { 140156, true }, - { 140166, true }, - { 140179, true }, + { 139762, true }, + { 139775, true }, + { 139787, true }, + { 139807, true }, + { 139828, true }, + { 139844, true }, + { 139861, true }, + { 139880, true }, + { 139889, true }, + { 139903, true }, + { 139913, true }, + { 139924, true }, + { 139933, true }, + { 139942, true }, + { 139955, true }, + { 139984, true }, + { 140003, true }, + { 140020, true }, + { 140043, true }, + { 140051, true }, + { 140069, true }, + { 140080, true }, + { 140093, true }, + { 140104, true }, + { 140117, true }, + { 140130, true }, + { 140147, true }, + { 140160, true }, + { 140171, true }, + { 140180, true }, { 140190, true }, { 140200, true }, { 140213, true }, - { 140223, true }, - { 140236, true }, - { 140255, true }, - { 140266, true }, - { 140281, true }, - { 140295, true }, - { 140306, true }, - { 140318, true }, - { 140326, true }, + { 140224, true }, + { 140234, true }, + { 140247, true }, + { 140257, true }, + { 140270, true }, + { 140289, true }, + { 140300, true }, + { 140315, true }, + { 140329, true }, { 140340, true }, - { 140355, false }, - { 140369, false }, - { 140381, true }, - { 140392, false }, - { 140407, true }, - { 140421, true }, - { 140442, true }, - { 140457, true }, - { 140469, true }, - { 140480, true }, - { 140493, true }, + { 140352, true }, + { 140360, true }, + { 140374, true }, + { 140389, false }, + { 140403, false }, + { 140415, true }, + { 140426, false }, + { 140441, true }, + { 140455, true }, + { 140476, true }, + { 140491, true }, { 140503, true }, - { 140524, true }, - { 140542, true }, - { 140563, true }, - { 140589, true }, - { 140612, true }, - { 140645, true }, - { 140664, true }, - { 140688, true }, - { 140699, true }, - { 140713, true }, - { 140724, true }, - { 140737, false }, - { 140761, true }, - { 140772, true }, - { 140786, true }, - { 140797, true }, + { 140514, true }, + { 140527, true }, + { 140537, true }, + { 140558, true }, + { 140576, true }, + { 140597, true }, + { 140623, true }, + { 140646, true }, + { 140679, true }, + { 140698, true }, + { 140722, true }, + { 140733, true }, + { 140747, true }, + { 140758, false }, + { 140782, true }, + { 140793, true }, { 140807, true }, - { 140815, true }, - { 140822, true }, - { 140833, true }, - { 140844, true }, - { 140855, true }, + { 140818, true }, + { 140828, true }, + { 140836, true }, + { 140843, true }, + { 140854, true }, { 140865, true }, { 140876, true }, - { 140885, true }, - { 140900, true }, - { 140915, true }, - { 140926, true }, - { 140935, true }, - { 140946, true }, - { 140957, true }, - { 140971, true }, - { 140980, true }, - { 140996, true }, - { 141004, true }, - { 141016, true }, - { 141028, true }, - { 141044, true }, - { 141052, true }, - { 141062, true }, - { 141081, true }, - { 141089, true }, + { 140886, true }, + { 140897, true }, + { 140906, true }, + { 140921, true }, + { 140936, true }, + { 140947, true }, + { 140956, true }, + { 140967, true }, + { 140978, true }, + { 140992, true }, + { 141001, true }, + { 141017, true }, + { 141025, true }, + { 141037, true }, + { 141049, true }, + { 141065, true }, + { 141073, true }, + { 141083, true }, { 141102, true }, - { 141119, true }, - { 141130, true }, - { 141142, true }, + { 141110, true }, + { 141123, true }, + { 141140, true }, { 141151, true }, + { 141163, true }, { 141172, true }, - { 141191, true }, - { 141207, true }, - { 141222, true }, - { 141235, true }, - { 141252, true }, - { 141265, true }, - { 141281, true }, - { 141291, true }, - { 141299, true }, - { 141307, true }, - { 141321, true }, - { 141340, false }, - { 141349, true }, - { 141359, true }, - { 141381, true }, - { 141396, true }, - { 141409, true }, - { 141423, true }, - { 141431, true }, - { 141443, true }, - { 141454, true }, - { 141466, true }, - { 141476, true }, - { 141485, true }, - { 141496, true }, - { 141507, false }, - { 141517, false }, - { 141533, true }, - { 141543, true }, - { 141558, true }, - { 141568, true }, - { 141582, true }, - { 141597, true }, - { 141609, true }, - { 141620, true }, - { 141629, true }, - { 141642, true }, - { 141652, true }, - { 141665, true }, - { 141676, true }, - { 141699, false }, - { 141713, true }, - { 141725, true }, - { 141738, true }, - { 141747, true }, - { 141760, false }, - { 141770, true }, - { 141786, true }, - { 141797, true }, - { 141811, true }, - { 141825, true }, - { 141835, true }, - { 141844, true }, - { 141854, true }, - { 141869, true }, - { 141881, true }, - { 141893, true }, - { 141907, true }, - { 141924, true }, - { 141934, false }, - { 141943, false }, - { 141962, true }, - { 141978, true }, - { 141993, true }, - { 142003, true }, - { 142015, true }, - { 142027, false }, - { 142039, true }, - { 142052, true }, - { 142070, true }, - { 142085, true }, - { 142100, false }, - { 142116, true }, - { 142128, true }, - { 142141, true }, - { 142153, true }, - { 142164, true }, - { 142177, false }, - { 142192, true }, - { 142207, true }, - { 142217, true }, - { 142227, true }, - { 142241, true }, - { 142255, true }, - { 142267, true }, - { 142278, true }, - { 142294, true }, - { 142305, true }, - { 142316, true }, - { 142334, true }, - { 142352, true }, - { 142365, true }, - { 142386, false }, - { 142405, true }, - { 142425, true }, - { 142447, true }, - { 142459, true }, - { 142477, true }, - { 142492, true }, - { 142504, true }, - { 142520, true }, - { 142535, true }, - { 142551, true }, - { 142567, true }, - { 142584, true }, - { 142600, true }, - { 142617, true }, - { 142639, true }, - { 142656, true }, - { 142678, true }, - { 142689, true }, - { 142705, true }, - { 142725, true }, - { 142736, true }, - { 142751, true }, - { 142767, true }, - { 142782, true }, - { 142797, true }, - { 142811, true }, - { 142834, true }, - { 142846, true }, - { 142861, true }, - { 142886, true }, - { 142901, true }, - { 142913, true }, - { 142928, true }, - { 142944, true }, - { 142959, true }, - { 142988, true }, - { 143010, true }, - { 143028, true }, - { 143042, true }, - { 143055, true }, - { 143070, true }, - { 143085, true }, - { 143092, true }, - { 143108, true }, - { 143119, true }, - { 143130, true }, + { 141193, true }, + { 141212, true }, + { 141228, true }, + { 141243, true }, + { 141256, true }, + { 141273, true }, + { 141286, true }, + { 141302, true }, + { 141312, true }, + { 141320, true }, + { 141328, true }, + { 141342, true }, + { 141361, false }, + { 141370, true }, + { 141380, true }, + { 141402, true }, + { 141417, true }, + { 141430, true }, + { 141444, true }, + { 141452, true }, + { 141464, true }, + { 141475, true }, + { 141487, true }, + { 141497, true }, + { 141506, true }, + { 141517, true }, + { 141528, false }, + { 141538, false }, + { 141554, true }, + { 141564, true }, + { 141579, true }, + { 141589, true }, + { 141603, true }, + { 141618, true }, + { 141630, true }, + { 141641, true }, + { 141650, true }, + { 141663, true }, + { 141673, true }, + { 141686, true }, + { 141697, true }, + { 141720, false }, + { 141734, true }, + { 141746, true }, + { 141759, true }, + { 141768, true }, + { 141781, false }, + { 141791, true }, + { 141807, true }, + { 141818, true }, + { 141832, true }, + { 141846, true }, + { 141856, true }, + { 141865, true }, + { 141875, true }, + { 141890, true }, + { 141902, true }, + { 141914, true }, + { 141928, true }, + { 141945, true }, + { 141955, false }, + { 141964, false }, + { 141983, true }, + { 141999, true }, + { 142014, true }, + { 142024, true }, + { 142036, true }, + { 142048, false }, + { 142060, true }, + { 142073, true }, + { 142091, true }, + { 142106, true }, + { 142121, false }, + { 142137, true }, + { 142149, true }, + { 142162, true }, + { 142174, true }, + { 142185, true }, + { 142198, false }, + { 142213, true }, + { 142228, true }, + { 142238, true }, + { 142248, true }, + { 142262, true }, + { 142276, true }, + { 142288, true }, + { 142304, true }, + { 142315, true }, + { 142326, true }, + { 142344, true }, + { 142362, true }, + { 142375, true }, + { 142396, false }, + { 142415, true }, + { 142435, true }, + { 142457, true }, + { 142469, true }, + { 142487, true }, + { 142502, true }, + { 142514, true }, + { 142530, true }, + { 142545, true }, + { 142561, true }, + { 142577, true }, + { 142594, true }, + { 142610, true }, + { 142627, true }, + { 142649, true }, + { 142666, true }, + { 142688, true }, + { 142699, true }, + { 142715, true }, + { 142735, true }, + { 142746, true }, + { 142761, true }, + { 142777, true }, + { 142792, true }, + { 142807, true }, + { 142821, true }, + { 142844, true }, + { 142856, true }, + { 142871, true }, + { 142896, true }, + { 142911, true }, + { 142923, true }, + { 142938, true }, + { 142954, true }, + { 142969, true }, + { 142998, true }, + { 143020, true }, + { 143038, true }, + { 143052, true }, + { 143065, true }, + { 143080, true }, + { 143095, true }, + { 143102, true }, + { 143118, true }, + { 143129, true }, { 143140, true }, - { 143151, true }, - { 143165, true }, - { 143179, true }, - { 143191, true }, - { 143203, true }, - { 143214, true }, - { 143229, true }, - { 143242, true }, - { 143271, true }, - { 143280, true }, - { 143295, true }, - { 143302, true }, + { 143150, true }, + { 143161, true }, + { 143175, true }, + { 143189, true }, + { 143201, true }, + { 143213, true }, + { 143224, true }, + { 143239, true }, + { 143252, true }, + { 143281, true }, + { 143290, true }, + { 143305, true }, { 143312, true }, { 143322, true }, - { 143331, true }, - { 143347, true }, - { 143356, true }, - { 143368, true }, - { 143384, true }, - { 143403, true }, - { 143415, false }, - { 143432, false }, - { 143452, true }, - { 143467, true }, - { 143483, true }, - { 143496, true }, - { 143514, true }, - { 143529, true }, - { 143538, true }, - { 143553, true }, - { 143567, true }, - { 143583, true }, - { 143598, true }, - { 143620, true }, - { 143641, true }, - { 143660, true }, - { 143679, true }, - { 143695, true }, - { 143706, true }, - { 143715, true }, + { 143332, true }, + { 143341, true }, + { 143357, true }, + { 143366, true }, + { 143378, true }, + { 143394, true }, + { 143413, true }, + { 143425, false }, + { 143442, false }, + { 143462, true }, + { 143477, true }, + { 143493, true }, + { 143506, true }, + { 143524, true }, + { 143539, true }, + { 143548, true }, + { 143563, true }, + { 143577, true }, + { 143593, true }, + { 143608, true }, + { 143630, true }, + { 143651, true }, + { 143670, true }, + { 143689, true }, + { 143705, true }, + { 143716, true }, { 143725, true }, - { 143744, true }, - { 143759, true }, - { 143773, true }, - { 143786, true }, - { 143794, true }, - { 143802, true }, - { 143811, true }, - { 143823, true }, - { 143835, true }, - { 143844, true }, - { 143856, true }, - { 143864, true }, - { 143876, true }, - { 143902, true }, - { 143925, false }, - { 143941, true }, - { 143955, true }, - { 143975, true }, - { 143986, true }, - { 144007, true }, - { 144026, true }, - { 144040, true }, - { 144054, true }, - { 144071, true }, - { 144085, false }, - { 144100, true }, - { 144108, true }, - { 144123, true }, - { 144138, true }, - { 144149, true }, - { 144163, true }, - { 144174, true }, + { 143735, true }, + { 143754, true }, + { 143769, true }, + { 143783, true }, + { 143796, true }, + { 143804, true }, + { 143812, true }, + { 143821, true }, + { 143833, true }, + { 143845, true }, + { 143854, true }, + { 143866, true }, + { 143874, true }, + { 143886, true }, + { 143912, true }, + { 143935, false }, + { 143951, true }, + { 143965, true }, + { 143985, true }, + { 143996, true }, + { 144017, true }, + { 144036, true }, + { 144050, true }, + { 144064, true }, + { 144081, true }, + { 144095, false }, + { 144110, true }, + { 144118, true }, + { 144133, true }, + { 144148, true }, + { 144159, true }, + { 144173, true }, { 144184, true }, - { 144202, true }, - { 144219, true }, - { 144239, true }, - { 144263, true }, - { 144270, true }, - { 144281, true }, - { 144292, true }, - { 144305, true }, - { 144317, false }, - { 144332, true }, - { 144348, true }, - { 144361, true }, - { 144369, true }, + { 144194, true }, + { 144212, true }, + { 144229, true }, + { 144249, true }, + { 144273, true }, + { 144280, true }, + { 144291, true }, + { 144302, true }, + { 144315, true }, + { 144327, false }, + { 144342, true }, + { 144358, true }, + { 144371, true }, { 144379, true }, - { 144394, false }, - { 144403, true }, - { 144417, true }, - { 144432, true }, + { 144389, true }, + { 144404, false }, + { 144413, true }, + { 144427, true }, { 144442, true }, - { 144454, true }, + { 144452, true }, { 144464, true }, - { 144477, true }, - { 144489, true }, - { 144497, true }, - { 144508, true }, - { 144522, true }, - { 144543, true }, - { 144556, true }, - { 144566, false }, - { 144586, true }, - { 144593, true }, - { 144600, true }, + { 144474, true }, + { 144487, true }, + { 144499, true }, + { 144507, true }, + { 144518, true }, + { 144532, true }, + { 144553, true }, + { 144566, true }, + { 144576, false }, + { 144596, true }, + { 144603, true }, { 144610, true }, - { 144616, true }, - { 144624, true }, - { 144633, false }, - { 144653, true }, - { 144662, true }, - { 144671, true }, - { 144689, true }, - { 144703, true }, - { 144718, true }, - { 144730, true }, - { 144743, true }, - { 144761, true }, - { 144772, true }, - { 144780, true }, + { 144620, true }, + { 144626, true }, + { 144634, true }, + { 144643, false }, + { 144663, true }, + { 144672, true }, + { 144681, true }, + { 144699, true }, + { 144713, true }, + { 144728, true }, + { 144740, true }, + { 144753, true }, + { 144771, true }, + { 144782, true }, { 144790, true }, - { 144798, true }, - { 144810, true }, - { 144819, true }, - { 144832, true }, + { 144800, true }, + { 144808, true }, + { 144820, true }, + { 144829, true }, { 144842, true }, { 144854, true }, { 144869, true }, @@ -26267,183 +26272,183 @@ static const nsSTSPreload kSTSPreloadList[] = { { 147798, true }, { 147806, true }, { 147814, true }, - { 147822, true }, - { 147835, false }, - { 147846, true }, - { 147861, true }, - { 147881, true }, - { 147889, true }, - { 147907, true }, - { 147927, true }, - { 147947, true }, - { 147968, true }, - { 147983, true }, - { 148009, true }, - { 148019, true }, - { 148032, false }, - { 148050, true }, - { 148081, true }, - { 148101, true }, - { 148118, true }, - { 148136, true }, - { 148149, true }, - { 148164, true }, + { 147826, true }, + { 147834, true }, + { 147847, false }, + { 147858, true }, + { 147873, true }, + { 147893, true }, + { 147901, true }, + { 147919, true }, + { 147939, true }, + { 147959, true }, + { 147980, true }, + { 147995, true }, + { 148021, true }, + { 148031, true }, + { 148044, false }, + { 148062, true }, + { 148093, true }, + { 148113, true }, + { 148130, true }, + { 148148, true }, + { 148161, true }, { 148176, true }, - { 148186, true }, - { 148193, true }, - { 148213, true }, - { 148226, true }, - { 148243, true }, - { 148259, true }, + { 148188, true }, + { 148198, true }, + { 148205, true }, + { 148225, true }, + { 148238, true }, + { 148255, true }, { 148271, true }, - { 148285, true }, + { 148283, true }, { 148297, true }, - { 148312, true }, - { 148330, true }, - { 148343, true }, - { 148353, true }, - { 148364, true }, - { 148375, true }, - { 148386, true }, - { 148401, true }, - { 148412, true }, - { 148424, false }, - { 148436, true }, - { 148450, true }, - { 148467, true }, - { 148477, true }, - { 148490, false }, - { 148508, false }, - { 148519, true }, - { 148534, true }, - { 148551, true }, - { 148568, true }, - { 148585, true }, - { 148595, true }, - { 148610, true }, - { 148620, true }, - { 148635, true }, - { 148652, true }, + { 148309, true }, + { 148324, true }, + { 148342, true }, + { 148355, true }, + { 148365, true }, + { 148376, true }, + { 148387, true }, + { 148398, true }, + { 148413, true }, + { 148424, true }, + { 148436, false }, + { 148448, true }, + { 148462, true }, + { 148479, true }, + { 148489, true }, + { 148502, false }, + { 148520, false }, + { 148531, true }, + { 148546, true }, + { 148563, true }, + { 148580, true }, + { 148597, true }, + { 148607, true }, + { 148622, true }, + { 148632, true }, + { 148647, true }, { 148664, true }, - { 148675, true }, - { 148693, true }, - { 148708, true }, - { 148723, true }, - { 148748, true }, - { 148773, true }, - { 148786, true }, - { 148805, true }, - { 148822, true }, - { 148842, true }, - { 148863, true }, - { 148877, true }, - { 148902, true }, - { 148923, true }, - { 148945, true }, - { 148975, true }, - { 148999, true }, - { 149014, true }, - { 149027, true }, - { 149037, true }, - { 149060, true }, - { 149071, true }, - { 149078, true }, - { 149097, true }, - { 149106, true }, - { 149113, true }, - { 149133, true }, - { 149144, true }, - { 149163, true }, - { 149179, true }, - { 149189, true }, - { 149200, true }, - { 149210, true }, - { 149221, true }, + { 148676, true }, + { 148687, true }, + { 148705, true }, + { 148720, true }, + { 148735, true }, + { 148760, true }, + { 148785, true }, + { 148798, true }, + { 148817, true }, + { 148834, true }, + { 148854, true }, + { 148875, true }, + { 148889, true }, + { 148914, true }, + { 148935, true }, + { 148957, true }, + { 148987, true }, + { 149011, true }, + { 149026, true }, + { 149039, true }, + { 149049, true }, + { 149072, true }, + { 149083, true }, + { 149090, true }, + { 149109, true }, + { 149118, true }, + { 149125, true }, + { 149145, true }, + { 149156, true }, + { 149175, true }, + { 149191, true }, + { 149201, true }, + { 149212, true }, + { 149222, true }, { 149233, true }, - { 149249, true }, - { 149257, true }, - { 149267, true }, - { 149277, true }, + { 149245, true }, + { 149261, true }, + { 149269, true }, + { 149279, true }, { 149289, true }, - { 149300, true }, - { 149315, true }, - { 149339, true }, - { 149353, true }, - { 149361, true }, - { 149379, true }, - { 149390, true }, - { 149403, true }, - { 149414, true }, - { 149433, true }, + { 149301, true }, + { 149312, true }, + { 149327, true }, + { 149351, true }, + { 149365, true }, + { 149373, true }, + { 149391, true }, + { 149402, true }, + { 149415, true }, + { 149426, true }, { 149445, true }, - { 149456, true }, - { 149471, true }, - { 149486, true }, - { 149500, true }, + { 149457, true }, + { 149468, true }, + { 149483, true }, + { 149498, true }, { 149512, true }, - { 149530, true }, - { 149550, true }, + { 149524, true }, + { 149542, true }, { 149562, true }, - { 149579, true }, - { 149594, true }, - { 149608, true }, - { 149622, true }, - { 149633, true }, - { 149642, true }, - { 149655, true }, - { 149664, true }, - { 149675, true }, + { 149574, true }, + { 149591, true }, + { 149606, true }, + { 149620, true }, + { 149634, true }, + { 149645, true }, + { 149654, true }, + { 149667, true }, + { 149676, true }, { 149687, true }, - { 149701, true }, - { 149708, true }, - { 149719, true }, - { 149736, false }, - { 149762, false }, - { 149774, true }, - { 149787, true }, - { 149798, true }, - { 149815, true }, - { 149825, true }, - { 149838, true }, - { 149853, true }, - { 149874, true }, - { 149890, true }, - { 149914, true }, - { 149928, true }, - { 149939, true }, - { 149953, true }, - { 149970, true }, + { 149699, true }, + { 149713, true }, + { 149720, true }, + { 149731, true }, + { 149748, false }, + { 149774, false }, + { 149786, true }, + { 149799, true }, + { 149810, true }, + { 149827, true }, + { 149837, true }, + { 149850, true }, + { 149865, true }, + { 149886, true }, + { 149902, true }, + { 149926, true }, + { 149940, true }, + { 149951, true }, + { 149965, true }, { 149982, true }, - { 149997, true }, - { 150007, true }, - { 150020, true }, - { 150033, true }, - { 150046, true }, - { 150066, true }, - { 150088, true }, - { 150102, true }, - { 150117, false }, - { 150130, true }, - { 150145, true }, - { 150156, true }, - { 150176, true }, - { 150189, true }, - { 150210, true }, - { 150221, true }, - { 150240, true }, - { 150248, true }, - { 150256, true }, - { 150273, true }, - { 150289, true }, - { 150298, true }, - { 150313, true }, - { 150324, true }, - { 150335, true }, - { 150345, true }, - { 150355, true }, - { 150366, true }, - { 150376, true }, - { 150387, true }, + { 149994, true }, + { 150009, true }, + { 150019, true }, + { 150032, true }, + { 150045, true }, + { 150058, true }, + { 150078, true }, + { 150100, true }, + { 150114, true }, + { 150129, false }, + { 150142, true }, + { 150157, true }, + { 150168, true }, + { 150188, true }, + { 150201, true }, + { 150222, true }, + { 150233, true }, + { 150252, true }, + { 150260, true }, + { 150268, true }, + { 150285, true }, + { 150301, true }, + { 150310, true }, + { 150325, true }, + { 150336, true }, + { 150347, true }, + { 150357, true }, + { 150367, true }, + { 150378, true }, + { 150388, true }, { 150399, true }, { 150406, true }, { 150424, true }, @@ -26744,1549 +26749,1549 @@ static const nsSTSPreload kSTSPreloadList[] = { { 154741, true }, { 154754, true }, { 154768, true }, - { 154777, true }, - { 154789, true }, - { 154807, true }, - { 154821, true }, - { 154839, true }, - { 154860, true }, - { 154880, true }, - { 154903, true }, - { 154919, true }, - { 154933, true }, - { 154949, true }, - { 154962, true }, - { 154983, true }, - { 155003, true }, - { 155016, true }, - { 155025, true }, - { 155059, true }, - { 155076, true }, - { 155087, true }, - { 155098, true }, - { 155110, true }, - { 155121, true }, - { 155140, true }, - { 155152, true }, - { 155165, true }, - { 155181, true }, - { 155200, true }, - { 155215, true }, - { 155229, true }, - { 155244, true }, - { 155261, false }, - { 155276, true }, - { 155296, true }, - { 155307, true }, - { 155318, true }, - { 155338, false }, - { 155347, true }, - { 155356, true }, - { 155367, true }, - { 155379, true }, - { 155393, true }, - { 155411, true }, - { 155425, true }, - { 155437, true }, - { 155452, true }, - { 155465, true }, - { 155476, false }, - { 155493, true }, + { 154777, false }, + { 154787, true }, + { 154799, true }, + { 154817, true }, + { 154831, true }, + { 154849, true }, + { 154870, true }, + { 154890, true }, + { 154913, true }, + { 154929, true }, + { 154943, true }, + { 154959, true }, + { 154972, true }, + { 154993, true }, + { 155013, true }, + { 155026, true }, + { 155035, true }, + { 155069, true }, + { 155086, true }, + { 155097, true }, + { 155108, true }, + { 155120, true }, + { 155131, true }, + { 155150, true }, + { 155162, true }, + { 155175, true }, + { 155191, true }, + { 155210, true }, + { 155225, true }, + { 155239, true }, + { 155254, true }, + { 155271, false }, + { 155286, true }, + { 155306, true }, + { 155317, true }, + { 155328, true }, + { 155348, false }, + { 155357, true }, + { 155366, true }, + { 155377, true }, + { 155389, true }, + { 155403, true }, + { 155421, true }, + { 155435, true }, + { 155447, true }, + { 155462, true }, + { 155475, true }, + { 155486, false }, { 155503, true }, - { 155524, true }, - { 155552, false }, - { 155563, true }, - { 155570, true }, - { 155581, true }, + { 155513, true }, + { 155534, true }, + { 155562, false }, + { 155573, true }, + { 155580, true }, { 155591, true }, { 155601, true }, - { 155615, true }, - { 155629, true }, - { 155640, false }, - { 155651, true }, - { 155659, false }, - { 155679, true }, - { 155694, true }, - { 155707, true }, - { 155723, true }, - { 155738, true }, - { 155751, true }, - { 155767, true }, - { 155780, true }, - { 155800, true }, - { 155813, true }, - { 155832, true }, - { 155850, true }, + { 155611, true }, + { 155625, true }, + { 155639, true }, + { 155650, false }, + { 155661, true }, + { 155669, false }, + { 155689, true }, + { 155704, true }, + { 155717, true }, + { 155733, true }, + { 155748, true }, + { 155761, true }, + { 155777, true }, + { 155790, true }, + { 155810, true }, + { 155823, true }, + { 155842, true }, { 155860, true }, - { 155874, true }, - { 155892, true }, - { 155912, true }, - { 155944, true }, - { 155959, true }, - { 155978, true }, - { 155991, true }, - { 156006, true }, - { 156021, true }, - { 156042, true }, - { 156063, true }, - { 156077, true }, - { 156099, true }, - { 156115, true }, - { 156140, true }, - { 156152, true }, - { 156163, true }, - { 156180, true }, - { 156204, true }, - { 156218, true }, - { 156231, true }, - { 156244, true }, - { 156256, true }, - { 156269, true }, - { 156287, true }, - { 156304, true }, - { 156329, true }, - { 156342, true }, - { 156354, true }, - { 156368, true }, - { 156382, true }, - { 156399, true }, - { 156419, true }, - { 156435, true }, - { 156453, true }, - { 156464, true }, - { 156479, true }, - { 156492, true }, - { 156507, true }, - { 156515, false }, - { 156528, true }, - { 156540, true }, - { 156554, true }, - { 156563, true }, - { 156579, true }, - { 156595, true }, - { 156617, true }, - { 156631, true }, + { 155870, true }, + { 155884, true }, + { 155902, true }, + { 155922, true }, + { 155954, true }, + { 155969, true }, + { 155988, true }, + { 156001, true }, + { 156016, true }, + { 156031, true }, + { 156052, true }, + { 156073, true }, + { 156087, true }, + { 156109, true }, + { 156125, true }, + { 156150, true }, + { 156162, true }, + { 156173, true }, + { 156190, true }, + { 156214, true }, + { 156228, true }, + { 156241, true }, + { 156254, true }, + { 156266, true }, + { 156279, true }, + { 156297, true }, + { 156314, true }, + { 156339, true }, + { 156352, true }, + { 156364, true }, + { 156378, true }, + { 156392, true }, + { 156409, true }, + { 156429, true }, + { 156445, true }, + { 156463, true }, + { 156474, true }, + { 156489, true }, + { 156502, true }, + { 156517, true }, + { 156525, false }, + { 156538, true }, + { 156550, true }, + { 156564, true }, + { 156573, true }, + { 156589, true }, + { 156605, true }, + { 156627, true }, { 156641, true }, - { 156655, true }, - { 156663, true }, - { 156675, true }, - { 156686, true }, - { 156702, true }, + { 156651, true }, + { 156665, true }, + { 156673, true }, + { 156685, true }, + { 156696, true }, { 156712, true }, - { 156725, true }, - { 156738, true }, - { 156752, true }, - { 156768, true }, - { 156781, true }, - { 156795, true }, - { 156812, true }, - { 156823, true }, + { 156722, true }, + { 156735, true }, + { 156748, true }, + { 156762, true }, + { 156778, true }, + { 156791, true }, + { 156805, true }, + { 156822, true }, { 156833, true }, - { 156853, true }, - { 156865, true }, - { 156879, true }, - { 156894, true }, - { 156906, true }, - { 156915, true }, - { 156923, true }, - { 156935, true }, - { 156946, true }, - { 156967, true }, - { 156986, true }, - { 157004, true }, - { 157022, true }, - { 157042, true }, - { 157051, true }, - { 157065, true }, - { 157083, true }, - { 157096, true }, - { 157110, true }, - { 157129, true }, - { 157142, true }, - { 157154, true }, - { 157166, true }, - { 157177, true }, - { 157191, true }, - { 157205, false }, - { 157220, true }, - { 157237, true }, - { 157248, true }, - { 157259, true }, - { 157273, true }, - { 157294, true }, - { 157310, true }, - { 157329, true }, - { 157345, true }, - { 157363, true }, - { 157379, true }, - { 157402, true }, - { 157418, true }, - { 157430, true }, - { 157439, true }, - { 157452, true }, - { 157470, true }, - { 157485, true }, - { 157500, true }, - { 157516, true }, - { 157531, true }, - { 157546, true }, - { 157561, true }, - { 157577, true }, - { 157592, true }, - { 157607, true }, - { 157623, true }, - { 157640, true }, + { 156843, true }, + { 156863, true }, + { 156875, true }, + { 156889, true }, + { 156904, true }, + { 156916, true }, + { 156925, true }, + { 156933, true }, + { 156945, true }, + { 156956, true }, + { 156977, true }, + { 156996, true }, + { 157014, true }, + { 157032, true }, + { 157052, true }, + { 157061, true }, + { 157075, true }, + { 157093, true }, + { 157106, true }, + { 157120, true }, + { 157139, true }, + { 157152, true }, + { 157164, true }, + { 157176, true }, + { 157187, true }, + { 157201, true }, + { 157215, false }, + { 157230, true }, + { 157247, true }, + { 157258, true }, + { 157269, true }, + { 157283, true }, + { 157304, true }, + { 157320, true }, + { 157339, true }, + { 157355, true }, + { 157373, true }, + { 157389, true }, + { 157412, true }, + { 157428, true }, + { 157440, true }, + { 157449, true }, + { 157462, true }, + { 157480, true }, + { 157495, true }, + { 157510, true }, + { 157526, true }, + { 157541, true }, + { 157556, true }, + { 157571, true }, + { 157587, true }, + { 157602, true }, + { 157617, true }, + { 157633, true }, { 157650, true }, - { 157663, true }, - { 157676, true }, + { 157660, true }, + { 157673, true }, { 157686, true }, - { 157707, true }, - { 157719, false }, - { 157730, true }, - { 157744, true }, - { 157756, true }, - { 157765, true }, - { 157780, false }, - { 157799, true }, - { 157816, true }, - { 157829, true }, - { 157844, true }, - { 157860, false }, - { 157873, false }, - { 157883, true }, - { 157896, true }, + { 157696, true }, + { 157717, true }, + { 157729, false }, + { 157740, true }, + { 157754, true }, + { 157766, true }, + { 157775, true }, + { 157790, false }, + { 157809, true }, + { 157826, true }, + { 157839, true }, + { 157854, true }, + { 157870, false }, + { 157883, false }, + { 157893, true }, { 157906, true }, - { 157916, false }, - { 157925, false }, - { 157945, true }, - { 157958, true }, - { 157970, false }, - { 157982, true }, - { 157999, true }, - { 158013, true }, - { 158030, true }, - { 158046, true }, - { 158065, true }, - { 158081, false }, - { 158098, true }, - { 158112, true }, - { 158126, true }, - { 158147, true }, - { 158161, true }, - { 158177, true }, - { 158190, false }, - { 158204, true }, - { 158218, true }, - { 158237, true }, - { 158259, true }, - { 158274, true }, - { 158291, true }, - { 158299, true }, - { 158311, true }, - { 158324, true }, - { 158337, true }, - { 158350, false }, - { 158361, true }, - { 158372, true }, - { 158390, true }, - { 158409, true }, - { 158425, true }, - { 158441, true }, - { 158450, false }, - { 158464, true }, - { 158482, true }, - { 158500, true }, - { 158517, true }, - { 158529, true }, - { 158540, false }, - { 158556, false }, - { 158580, true }, - { 158594, true }, - { 158613, true }, - { 158658, true }, - { 158703, true }, - { 158717, true }, - { 158725, true }, - { 158734, true }, - { 158746, true }, - { 158758, true }, - { 158783, true }, - { 158800, true }, - { 158817, true }, - { 158832, true }, - { 158844, true }, - { 158857, true }, - { 158865, true }, - { 158883, true }, - { 158892, false }, - { 158900, true }, - { 158921, true }, - { 158934, true }, - { 158947, true }, - { 158959, true }, - { 158972, false }, - { 158985, true }, - { 159001, true }, - { 159015, true }, - { 159033, true }, - { 159054, true }, - { 159066, true }, - { 159087, true }, - { 159106, true }, - { 159131, true }, - { 159143, true }, - { 159156, true }, - { 159169, true }, - { 159181, true }, - { 159193, true }, - { 159210, true }, - { 159227, true }, - { 159239, false }, - { 159248, true }, - { 159263, true }, - { 159285, true }, - { 159304, true }, - { 159318, true }, - { 159331, true }, - { 159346, true }, - { 159361, true }, - { 159372, true }, - { 159397, true }, - { 159414, true }, - { 159426, true }, - { 159442, false }, - { 159457, true }, - { 159470, false }, - { 159494, true }, - { 159502, false }, - { 159515, true }, - { 159529, true }, - { 159541, true }, - { 159554, true }, - { 159567, true }, - { 159579, true }, - { 159595, true }, - { 159610, true }, - { 159629, true }, - { 159643, true }, - { 159657, true }, - { 159677, true }, - { 159693, true }, - { 159712, true }, - { 159732, true }, - { 159744, true }, - { 159767, true }, - { 159797, true }, - { 159809, true }, - { 159820, true }, - { 159830, true }, - { 159844, true }, - { 159857, true }, - { 159875, false }, - { 159885, true }, - { 159899, true }, - { 159914, true }, - { 159932, true }, - { 159941, true }, - { 159954, false }, - { 159971, true }, - { 159987, true }, - { 159998, true }, - { 160009, true }, - { 160019, true }, - { 160028, true }, - { 160042, true }, - { 160063, true }, - { 160074, true }, - { 160096, true }, - { 160111, true }, - { 160126, true }, - { 160143, true }, - { 160165, true }, - { 160175, true }, - { 160197, true }, - { 160219, true }, - { 160236, true }, - { 160250, true }, - { 160263, true }, - { 160280, true }, - { 160305, true }, - { 160322, true }, - { 160338, true }, - { 160348, true }, - { 160359, true }, - { 160368, false }, - { 160377, true }, - { 160387, true }, - { 160401, true }, - { 160419, true }, - { 160439, true }, - { 160453, true }, - { 160462, true }, - { 160486, true }, - { 160507, true }, - { 160527, true }, - { 160545, true }, - { 160558, true }, - { 160575, true }, - { 160596, true }, - { 160614, true }, - { 160626, true }, - { 160648, false }, - { 160667, true }, - { 160678, true }, - { 160691, true }, - { 160712, true }, - { 160723, true }, - { 160738, true }, - { 160750, true }, - { 160767, true }, - { 160793, true }, - { 160810, false }, - { 160828, true }, - { 160847, false }, - { 160866, true }, - { 160878, true }, - { 160898, true }, - { 160920, true }, - { 160933, true }, - { 160955, true }, - { 160968, true }, - { 160991, true }, - { 161006, true }, - { 161020, true }, - { 161043, true }, - { 161053, true }, - { 161063, true }, - { 161082, true }, - { 161095, true }, - { 161117, true }, - { 161137, true }, - { 161147, true }, - { 161159, true }, - { 161172, true }, - { 161185, true }, - { 161206, true }, - { 161232, true }, - { 161253, true }, - { 161274, true }, - { 161295, true }, - { 161315, true }, - { 161327, true }, - { 161347, true }, - { 161361, true }, - { 161373, true }, - { 161382, true }, - { 161405, true }, - { 161421, true }, - { 161433, true }, - { 161458, true }, - { 161473, true }, - { 161494, true }, - { 161511, true }, - { 161532, false }, - { 161549, false }, - { 161567, true }, - { 161577, true }, - { 161591, true }, - { 161605, true }, - { 161615, true }, - { 161627, true }, - { 161639, true }, - { 161649, true }, - { 161660, true }, - { 161674, true }, - { 161698, true }, - { 161710, true }, - { 161739, true }, - { 161754, true }, - { 161768, true }, - { 161782, true }, - { 161798, true }, - { 161813, true }, - { 161827, true }, - { 161839, true }, - { 161859, true }, - { 161873, true }, - { 161886, true }, - { 161899, true }, - { 161911, true }, - { 161929, true }, - { 161941, true }, - { 161960, true }, - { 161984, true }, - { 162007, true }, - { 162019, true }, - { 162037, true }, - { 162053, true }, - { 162073, false }, - { 162091, true }, - { 162111, true }, - { 162124, true }, - { 162144, true }, - { 162152, true }, - { 162162, true }, - { 162181, true }, - { 162200, true }, - { 162214, true }, - { 162232, true }, - { 162248, false }, - { 162267, true }, - { 162288, true }, - { 162302, true }, - { 162311, true }, - { 162328, true }, - { 162344, true }, - { 162366, true }, - { 162383, true }, - { 162401, true }, - { 162420, true }, - { 162437, true }, - { 162450, true }, - { 162460, true }, - { 162468, true }, - { 162486, true }, - { 162514, true }, - { 162531, true }, - { 162545, true }, - { 162560, false }, - { 162573, true }, - { 162585, false }, - { 162595, false }, - { 162608, false }, - { 162623, true }, - { 162635, true }, - { 162647, true }, - { 162659, true }, - { 162671, true }, - { 162684, true }, - { 162697, true }, - { 162709, true }, - { 162721, true }, - { 162737, true }, - { 162749, true }, - { 162762, true }, - { 162772, true }, - { 162782, true }, - { 162795, true }, - { 162810, true }, - { 162821, true }, - { 162832, true }, - { 162850, true }, - { 162858, true }, - { 162866, true }, - { 162878, true }, - { 162892, true }, - { 162909, true }, - { 162939, true }, - { 162954, true }, - { 162970, true }, - { 162985, true }, - { 163000, true }, - { 163015, true }, - { 163023, true }, - { 163038, true }, - { 163049, true }, - { 163062, true }, - { 163070, false }, - { 163080, true }, - { 163096, true }, - { 163113, true }, - { 163130, true }, - { 163151, true }, - { 163164, true }, - { 163176, true }, - { 163184, true }, - { 163201, true }, - { 163217, true }, - { 163224, true }, - { 163235, true }, - { 163243, false }, - { 163267, true }, - { 163299, true }, - { 163326, true }, - { 163346, true }, - { 163370, true }, - { 163387, false }, - { 163400, true }, - { 163415, true }, - { 163426, true }, - { 163437, true }, - { 163447, true }, - { 163460, true }, - { 163468, true }, - { 163480, true }, - { 163492, false }, - { 163504, false }, - { 163512, false }, - { 163537, true }, - { 163550, true }, - { 163565, true }, - { 163579, true }, - { 163592, true }, - { 163604, true }, - { 163617, true }, - { 163634, true }, - { 163648, true }, - { 163665, true }, - { 163677, true }, - { 163691, true }, - { 163706, true }, - { 163721, true }, - { 163732, true }, - { 163739, true }, - { 163759, true }, - { 163773, true }, - { 163781, true }, - { 163789, false }, - { 163804, true }, - { 163816, true }, - { 163830, true }, - { 163843, true }, - { 163853, true }, - { 163863, true }, - { 163870, true }, - { 163883, true }, - { 163896, true }, - { 163904, true }, - { 163921, true }, - { 163929, true }, - { 163938, true }, + { 157916, true }, + { 157926, false }, + { 157935, false }, + { 157955, true }, + { 157968, true }, + { 157980, false }, + { 157992, true }, + { 158009, true }, + { 158023, true }, + { 158040, true }, + { 158056, true }, + { 158075, true }, + { 158091, true }, + { 158105, true }, + { 158119, true }, + { 158140, true }, + { 158154, true }, + { 158170, true }, + { 158183, false }, + { 158197, true }, + { 158211, true }, + { 158230, true }, + { 158252, true }, + { 158267, true }, + { 158284, true }, + { 158292, true }, + { 158304, true }, + { 158317, true }, + { 158330, true }, + { 158343, false }, + { 158354, true }, + { 158365, true }, + { 158383, true }, + { 158402, true }, + { 158418, true }, + { 158434, true }, + { 158443, false }, + { 158457, true }, + { 158475, true }, + { 158493, true }, + { 158510, true }, + { 158522, true }, + { 158533, false }, + { 158549, false }, + { 158573, true }, + { 158587, true }, + { 158606, true }, + { 158651, true }, + { 158696, true }, + { 158710, true }, + { 158718, true }, + { 158727, true }, + { 158739, true }, + { 158751, true }, + { 158776, true }, + { 158793, true }, + { 158810, true }, + { 158825, true }, + { 158837, true }, + { 158850, true }, + { 158858, true }, + { 158876, true }, + { 158885, false }, + { 158893, true }, + { 158914, true }, + { 158927, true }, + { 158940, true }, + { 158952, true }, + { 158965, false }, + { 158978, true }, + { 158994, true }, + { 159008, true }, + { 159026, true }, + { 159047, true }, + { 159059, true }, + { 159080, true }, + { 159099, true }, + { 159124, true }, + { 159136, true }, + { 159149, true }, + { 159162, true }, + { 159174, true }, + { 159186, true }, + { 159203, true }, + { 159220, true }, + { 159232, false }, + { 159241, true }, + { 159256, true }, + { 159278, true }, + { 159297, true }, + { 159311, true }, + { 159324, true }, + { 159339, true }, + { 159354, true }, + { 159365, true }, + { 159390, true }, + { 159407, true }, + { 159419, true }, + { 159435, false }, + { 159450, true }, + { 159463, false }, + { 159487, true }, + { 159495, false }, + { 159508, true }, + { 159522, true }, + { 159534, true }, + { 159547, true }, + { 159560, true }, + { 159572, true }, + { 159588, true }, + { 159603, true }, + { 159622, true }, + { 159636, true }, + { 159650, true }, + { 159670, true }, + { 159686, true }, + { 159705, true }, + { 159725, true }, + { 159737, true }, + { 159760, true }, + { 159790, true }, + { 159802, true }, + { 159813, true }, + { 159823, true }, + { 159837, true }, + { 159850, true }, + { 159868, false }, + { 159878, true }, + { 159892, true }, + { 159907, true }, + { 159925, true }, + { 159934, true }, + { 159947, false }, + { 159964, true }, + { 159980, true }, + { 159991, true }, + { 160002, true }, + { 160012, true }, + { 160021, true }, + { 160035, true }, + { 160056, true }, + { 160067, true }, + { 160089, true }, + { 160104, true }, + { 160119, true }, + { 160136, true }, + { 160158, true }, + { 160168, true }, + { 160190, true }, + { 160212, true }, + { 160229, true }, + { 160243, true }, + { 160256, true }, + { 160273, true }, + { 160298, true }, + { 160315, true }, + { 160331, true }, + { 160341, true }, + { 160352, true }, + { 160361, false }, + { 160370, true }, + { 160380, true }, + { 160394, true }, + { 160412, true }, + { 160432, true }, + { 160446, true }, + { 160455, true }, + { 160479, true }, + { 160500, true }, + { 160520, true }, + { 160538, true }, + { 160551, true }, + { 160568, true }, + { 160589, true }, + { 160607, true }, + { 160619, true }, + { 160641, false }, + { 160660, true }, + { 160671, true }, + { 160684, true }, + { 160705, true }, + { 160716, true }, + { 160731, true }, + { 160743, true }, + { 160760, true }, + { 160786, true }, + { 160803, false }, + { 160821, true }, + { 160840, false }, + { 160859, true }, + { 160871, true }, + { 160891, true }, + { 160913, true }, + { 160926, true }, + { 160948, true }, + { 160961, true }, + { 160984, true }, + { 160999, true }, + { 161013, true }, + { 161036, true }, + { 161046, true }, + { 161056, true }, + { 161075, true }, + { 161088, true }, + { 161110, true }, + { 161130, true }, + { 161140, true }, + { 161152, true }, + { 161165, true }, + { 161178, true }, + { 161199, true }, + { 161225, true }, + { 161246, true }, + { 161267, true }, + { 161288, true }, + { 161308, true }, + { 161320, true }, + { 161340, true }, + { 161354, true }, + { 161366, true }, + { 161375, true }, + { 161398, true }, + { 161414, true }, + { 161426, true }, + { 161451, true }, + { 161466, true }, + { 161487, true }, + { 161504, true }, + { 161525, false }, + { 161542, false }, + { 161560, true }, + { 161570, true }, + { 161584, true }, + { 161598, true }, + { 161608, true }, + { 161620, true }, + { 161632, true }, + { 161642, true }, + { 161653, true }, + { 161667, true }, + { 161691, true }, + { 161703, true }, + { 161732, true }, + { 161747, true }, + { 161761, true }, + { 161775, true }, + { 161791, true }, + { 161806, true }, + { 161820, true }, + { 161832, true }, + { 161852, true }, + { 161866, true }, + { 161879, true }, + { 161892, true }, + { 161904, true }, + { 161922, true }, + { 161934, true }, + { 161953, true }, + { 161977, true }, + { 162000, true }, + { 162012, true }, + { 162030, true }, + { 162046, true }, + { 162066, false }, + { 162084, true }, + { 162104, true }, + { 162117, true }, + { 162137, true }, + { 162145, true }, + { 162155, true }, + { 162174, true }, + { 162193, true }, + { 162207, true }, + { 162225, true }, + { 162241, false }, + { 162260, true }, + { 162281, true }, + { 162295, true }, + { 162304, true }, + { 162321, true }, + { 162337, true }, + { 162359, true }, + { 162376, true }, + { 162394, true }, + { 162413, true }, + { 162430, true }, + { 162443, true }, + { 162453, true }, + { 162461, true }, + { 162479, true }, + { 162507, true }, + { 162524, true }, + { 162538, true }, + { 162553, false }, + { 162566, true }, + { 162578, false }, + { 162588, false }, + { 162601, false }, + { 162616, true }, + { 162628, true }, + { 162640, true }, + { 162652, true }, + { 162665, true }, + { 162678, true }, + { 162690, true }, + { 162702, true }, + { 162718, true }, + { 162730, true }, + { 162743, true }, + { 162753, true }, + { 162763, true }, + { 162776, true }, + { 162791, true }, + { 162802, true }, + { 162813, true }, + { 162831, true }, + { 162839, true }, + { 162847, true }, + { 162859, true }, + { 162873, true }, + { 162890, true }, + { 162920, true }, + { 162935, true }, + { 162951, true }, + { 162966, true }, + { 162981, true }, + { 162996, true }, + { 163004, true }, + { 163019, true }, + { 163030, true }, + { 163043, true }, + { 163051, false }, + { 163061, true }, + { 163077, true }, + { 163094, true }, + { 163111, true }, + { 163132, true }, + { 163145, true }, + { 163157, true }, + { 163165, true }, + { 163182, true }, + { 163198, true }, + { 163205, true }, + { 163216, true }, + { 163224, false }, + { 163248, true }, + { 163280, true }, + { 163307, true }, + { 163327, true }, + { 163351, true }, + { 163368, false }, + { 163381, true }, + { 163396, true }, + { 163407, true }, + { 163418, true }, + { 163428, true }, + { 163441, true }, + { 163449, true }, + { 163461, true }, + { 163473, false }, + { 163485, false }, + { 163493, false }, + { 163518, true }, + { 163531, true }, + { 163546, true }, + { 163560, true }, + { 163573, true }, + { 163585, true }, + { 163598, true }, + { 163615, true }, + { 163629, true }, + { 163646, true }, + { 163658, true }, + { 163672, true }, + { 163687, true }, + { 163702, true }, + { 163713, true }, + { 163720, true }, + { 163740, true }, + { 163754, true }, + { 163762, true }, + { 163770, false }, + { 163785, true }, + { 163797, true }, + { 163811, true }, + { 163824, true }, + { 163834, true }, + { 163844, true }, + { 163851, true }, + { 163864, true }, + { 163877, true }, + { 163885, true }, + { 163902, true }, + { 163910, true }, + { 163919, true }, + { 163935, true }, { 163954, true }, - { 163973, true }, - { 163984, true }, - { 163996, true }, - { 164006, true }, - { 164023, false }, - { 164034, true }, + { 163965, true }, + { 163977, true }, + { 163987, true }, + { 164004, false }, + { 164015, true }, + { 164023, true }, + { 164033, true }, { 164042, true }, - { 164052, true }, - { 164061, true }, - { 164077, true }, - { 164098, true }, - { 164123, false }, - { 164139, true }, - { 164151, true }, - { 164163, true }, - { 164176, true }, - { 164184, true }, - { 164192, false }, + { 164058, true }, + { 164079, true }, + { 164104, false }, + { 164120, true }, + { 164132, true }, + { 164144, true }, + { 164157, true }, + { 164165, true }, + { 164173, false }, + { 164193, false }, { 164212, false }, { 164231, false }, - { 164250, false }, - { 164270, false }, - { 164290, false }, + { 164251, false }, + { 164271, false }, + { 164291, false }, { 164310, false }, - { 164329, false }, + { 164329, true }, { 164348, true }, - { 164367, true }, + { 164359, true }, + { 164369, true }, { 164378, true }, - { 164388, true }, - { 164397, true }, - { 164410, true }, - { 164425, true }, - { 164435, false }, - { 164446, true }, - { 164457, true }, - { 164466, true }, - { 164474, true }, - { 164487, true }, + { 164391, true }, + { 164406, true }, + { 164416, false }, + { 164427, true }, + { 164438, true }, + { 164447, true }, + { 164455, true }, + { 164468, true }, + { 164476, true }, + { 164486, true }, { 164495, true }, - { 164505, true }, - { 164514, true }, - { 164529, true }, - { 164552, true }, - { 164571, false }, - { 164582, true }, - { 164604, true }, - { 164618, true }, - { 164627, true }, - { 164634, true }, - { 164643, true }, + { 164510, true }, + { 164533, true }, + { 164552, false }, + { 164563, true }, + { 164585, true }, + { 164599, true }, + { 164608, true }, + { 164615, true }, + { 164624, true }, + { 164632, true }, + { 164639, true }, { 164651, true }, - { 164658, true }, - { 164670, true }, - { 164687, true }, + { 164668, true }, + { 164675, true }, + { 164683, true }, { 164694, true }, - { 164702, true }, - { 164713, true }, - { 164727, true }, - { 164739, true }, - { 164751, true }, - { 164760, true }, - { 164769, true }, - { 164781, false }, - { 164792, true }, - { 164805, true }, - { 164831, true }, - { 164854, false }, - { 164874, true }, - { 164891, true }, - { 164906, true }, + { 164708, true }, + { 164720, true }, + { 164732, true }, + { 164741, true }, + { 164750, true }, + { 164762, false }, + { 164773, true }, + { 164786, true }, + { 164812, true }, + { 164835, false }, + { 164855, true }, + { 164872, true }, + { 164887, true }, + { 164901, true }, { 164920, true }, - { 164939, true }, - { 164955, true }, - { 164968, true }, - { 164979, true }, - { 164994, true }, - { 165014, true }, - { 165029, true }, - { 165038, true }, - { 165056, true }, - { 165071, true }, - { 165092, true }, - { 165112, true }, - { 165127, true }, - { 165142, true }, - { 165157, true }, - { 165171, true }, - { 165185, true }, - { 165194, true }, - { 165205, true }, - { 165220, true }, - { 165229, true }, - { 165247, true }, + { 164936, true }, + { 164949, true }, + { 164960, true }, + { 164975, true }, + { 164995, true }, + { 165010, true }, + { 165019, true }, + { 165037, true }, + { 165052, true }, + { 165073, true }, + { 165093, true }, + { 165108, true }, + { 165123, true }, + { 165138, true }, + { 165152, true }, + { 165166, true }, + { 165175, true }, + { 165186, true }, + { 165201, true }, + { 165210, true }, + { 165228, true }, + { 165239, true }, + { 165249, true }, { 165258, true }, - { 165268, true }, - { 165277, true }, + { 165269, true }, + { 165279, true }, { 165288, true }, { 165298, true }, - { 165307, true }, - { 165317, true }, - { 165330, true }, + { 165311, true }, + { 165322, true }, + { 165332, true }, { 165341, true }, - { 165351, true }, - { 165360, true }, - { 165376, true }, - { 165383, true }, - { 165394, true }, - { 165405, true }, - { 165419, true }, + { 165357, true }, + { 165364, true }, + { 165375, true }, + { 165386, true }, + { 165400, true }, + { 165407, true }, + { 165418, true }, { 165426, true }, - { 165437, true }, - { 165445, true }, - { 165463, true }, - { 165476, true }, - { 165488, true }, - { 165496, true }, - { 165516, false }, + { 165444, true }, + { 165457, true }, + { 165469, true }, + { 165477, true }, + { 165497, false }, + { 165513, true }, { 165532, true }, - { 165551, true }, + { 165555, true }, { 165574, true }, - { 165593, true }, - { 165604, true }, - { 165626, true }, - { 165639, true }, - { 165648, true }, - { 165671, true }, - { 165705, true }, - { 165721, true }, - { 165737, true }, - { 165759, true }, - { 165772, true }, - { 165799, true }, - { 165813, true }, - { 165823, true }, - { 165841, true }, + { 165585, true }, + { 165607, true }, + { 165620, true }, + { 165629, true }, + { 165652, true }, + { 165686, true }, + { 165702, true }, + { 165718, true }, + { 165740, true }, + { 165753, true }, + { 165780, true }, + { 165794, true }, + { 165804, true }, + { 165822, true }, + { 165832, true }, { 165851, true }, - { 165870, true }, - { 165884, true }, - { 165898, true }, - { 165914, true }, - { 165925, true }, - { 165936, true }, - { 165959, true }, - { 165974, true }, - { 165997, true }, - { 166006, true }, - { 166024, true }, - { 166041, true }, - { 166051, true }, - { 166076, true }, - { 166094, true }, - { 166109, true }, - { 166119, true }, - { 166131, true }, - { 166144, true }, - { 166155, false }, - { 166167, true }, - { 166184, true }, - { 166194, true }, - { 166211, true }, - { 166232, true }, - { 166254, true }, - { 166272, true }, - { 166283, true }, - { 166296, true }, - { 166307, true }, - { 166321, true }, - { 166334, true }, - { 166345, true }, + { 165865, true }, + { 165879, true }, + { 165895, true }, + { 165906, true }, + { 165917, true }, + { 165940, true }, + { 165955, true }, + { 165978, true }, + { 165987, true }, + { 166005, true }, + { 166022, true }, + { 166032, true }, + { 166057, true }, + { 166075, true }, + { 166090, true }, + { 166100, true }, + { 166112, true }, + { 166125, true }, + { 166136, false }, + { 166148, true }, + { 166165, true }, + { 166175, true }, + { 166192, true }, + { 166213, true }, + { 166235, true }, + { 166253, true }, + { 166264, true }, + { 166277, true }, + { 166288, true }, + { 166302, true }, + { 166315, true }, + { 166326, true }, + { 166340, true }, { 166355, true }, - { 166369, true }, - { 166384, true }, - { 166394, true }, - { 166407, true }, + { 166365, true }, + { 166378, true }, + { 166387, true }, + { 166400, true }, { 166416, true }, - { 166429, true }, - { 166445, true }, - { 166461, false }, - { 166474, false }, - { 166487, false }, - { 166499, true }, - { 166516, true }, - { 166527, true }, - { 166542, true }, - { 166552, true }, - { 166564, true }, - { 166578, true }, - { 166591, true }, - { 166609, true }, - { 166618, true }, - { 166629, true }, - { 166640, true }, - { 166652, true }, - { 166665, true }, - { 166677, true }, - { 166686, true }, - { 166697, true }, - { 166714, true }, - { 166730, true }, - { 166742, true }, + { 166432, false }, + { 166445, false }, + { 166458, false }, + { 166470, true }, + { 166487, true }, + { 166498, true }, + { 166513, true }, + { 166523, true }, + { 166535, true }, + { 166549, true }, + { 166562, true }, + { 166580, true }, + { 166589, true }, + { 166600, true }, + { 166611, true }, + { 166623, true }, + { 166636, true }, + { 166648, true }, + { 166657, true }, + { 166668, true }, + { 166685, true }, + { 166701, true }, + { 166713, true }, + { 166725, true }, + { 166737, true }, { 166754, true }, { 166766, true }, - { 166783, true }, - { 166795, true }, - { 166805, true }, - { 166818, true }, + { 166776, true }, + { 166789, true }, + { 166806, true }, + { 166820, true }, { 166835, true }, - { 166849, true }, - { 166864, true }, - { 166876, true }, - { 166883, true }, - { 166899, true }, - { 166915, true }, - { 166924, true }, - { 166931, true }, - { 166942, true }, - { 166959, true }, - { 166972, true }, - { 166987, true }, - { 166997, true }, - { 167008, true }, - { 167031, true }, - { 167043, false }, - { 167057, true }, - { 167073, true }, - { 167091, true }, - { 167108, true }, - { 167119, true }, - { 167135, false }, - { 167154, true }, - { 167169, true }, - { 167188, true }, - { 167199, true }, - { 167220, true }, - { 167236, true }, - { 167248, true }, - { 167262, true }, - { 167276, true }, - { 167287, true }, - { 167308, true }, - { 167321, true }, - { 167331, true }, - { 167342, true }, - { 167359, true }, - { 167374, true }, - { 167394, true }, - { 167409, true }, - { 167428, false }, - { 167445, true }, - { 167461, true }, - { 167473, true }, - { 167496, true }, - { 167511, true }, - { 167527, true }, - { 167538, true }, - { 167546, true }, - { 167569, true }, - { 167581, true }, - { 167589, true }, - { 167615, true }, - { 167633, true }, + { 166847, true }, + { 166854, true }, + { 166870, true }, + { 166886, true }, + { 166895, true }, + { 166902, true }, + { 166913, true }, + { 166930, true }, + { 166943, true }, + { 166958, true }, + { 166968, true }, + { 166979, true }, + { 167002, true }, + { 167014, false }, + { 167028, true }, + { 167044, true }, + { 167062, true }, + { 167079, true }, + { 167090, true }, + { 167106, false }, + { 167125, true }, + { 167140, true }, + { 167159, true }, + { 167170, true }, + { 167191, true }, + { 167207, true }, + { 167219, true }, + { 167233, true }, + { 167247, true }, + { 167258, true }, + { 167279, true }, + { 167292, true }, + { 167302, true }, + { 167313, true }, + { 167330, true }, + { 167345, true }, + { 167365, true }, + { 167380, true }, + { 167399, false }, + { 167416, true }, + { 167432, true }, + { 167444, true }, + { 167467, true }, + { 167482, true }, + { 167498, true }, + { 167509, true }, + { 167517, true }, + { 167540, true }, + { 167552, true }, + { 167560, true }, + { 167586, true }, + { 167604, true }, + { 167617, true }, + { 167634, true }, { 167646, true }, - { 167663, true }, - { 167675, true }, - { 167702, true }, - { 167733, true }, - { 167744, true }, - { 167754, true }, - { 167769, true }, - { 167780, true }, - { 167791, true }, - { 167807, true }, - { 167819, true }, - { 167828, true }, - { 167841, true }, - { 167869, true }, - { 167883, true }, - { 167905, true }, - { 167922, true }, - { 167932, true }, - { 167944, true }, - { 167960, true }, - { 167974, true }, - { 167985, true }, - { 167999, true }, - { 168017, true }, - { 168034, true }, + { 167673, true }, + { 167704, true }, + { 167715, true }, + { 167725, true }, + { 167740, true }, + { 167751, true }, + { 167762, true }, + { 167778, true }, + { 167790, true }, + { 167799, true }, + { 167812, true }, + { 167840, true }, + { 167854, true }, + { 167876, true }, + { 167893, true }, + { 167903, true }, + { 167915, true }, + { 167931, true }, + { 167945, true }, + { 167956, true }, + { 167970, true }, + { 167988, true }, + { 168005, true }, + { 168025, true }, + { 168036, true }, + { 168047, false }, { 168054, true }, - { 168065, true }, - { 168076, false }, - { 168083, true }, - { 168093, true }, - { 168120, true }, - { 168140, true }, - { 168158, true }, - { 168173, false }, - { 168184, true }, - { 168200, true }, - { 168217, true }, - { 168234, true }, - { 168256, true }, - { 168270, true }, - { 168286, false }, - { 168303, true }, - { 168319, true }, - { 168329, true }, - { 168347, true }, - { 168368, true }, - { 168386, true }, - { 168393, true }, - { 168411, true }, - { 168429, true }, - { 168443, true }, - { 168453, true }, - { 168464, true }, - { 168486, true }, - { 168502, true }, - { 168519, true }, - { 168539, true }, - { 168550, true }, - { 168569, true }, + { 168064, true }, + { 168091, true }, + { 168111, true }, + { 168129, true }, + { 168144, false }, + { 168155, true }, + { 168171, true }, + { 168188, true }, + { 168205, true }, + { 168227, true }, + { 168241, true }, + { 168257, false }, + { 168274, true }, + { 168290, true }, + { 168300, true }, + { 168318, true }, + { 168339, true }, + { 168357, true }, + { 168364, true }, + { 168382, true }, + { 168400, true }, + { 168414, true }, + { 168424, true }, + { 168435, true }, + { 168457, true }, + { 168473, true }, + { 168490, true }, + { 168510, true }, + { 168521, true }, + { 168540, true }, + { 168554, true }, + { 168571, true }, { 168583, true }, { 168600, true }, - { 168612, true }, - { 168629, true }, - { 168650, true }, - { 168666, true }, - { 168678, true }, + { 168621, true }, + { 168637, true }, + { 168649, true }, + { 168672, true }, + { 168690, true }, { 168701, true }, - { 168719, true }, - { 168730, true }, - { 168740, true }, - { 168756, true }, - { 168767, true }, - { 168779, false }, - { 168799, true }, - { 168818, true }, - { 168831, true }, - { 168841, true }, - { 168858, true }, + { 168711, true }, + { 168727, true }, + { 168738, true }, + { 168750, false }, + { 168770, true }, + { 168789, true }, + { 168802, true }, + { 168812, true }, + { 168829, true }, + { 168849, true }, + { 168863, true }, { 168878, true }, { 168892, true }, - { 168907, true }, - { 168921, true }, - { 168935, true }, + { 168906, true }, + { 168924, true }, + { 168938, false }, { 168953, true }, - { 168967, false }, - { 168982, true }, - { 169003, true }, - { 169014, true }, - { 169028, true }, - { 169044, false }, - { 169058, true }, - { 169074, true }, - { 169091, true }, - { 169107, true }, - { 169127, true }, - { 169150, true }, - { 169159, false }, - { 169167, true }, - { 169177, true }, - { 169189, false }, + { 168974, true }, + { 168985, true }, + { 168999, true }, + { 169015, false }, + { 169029, true }, + { 169045, true }, + { 169062, true }, + { 169078, true }, + { 169098, true }, + { 169121, true }, + { 169130, false }, + { 169138, true }, + { 169148, true }, + { 169160, false }, + { 169182, true }, + { 169197, true }, { 169211, true }, - { 169226, true }, - { 169240, true }, - { 169254, true }, - { 169267, true }, - { 169295, true }, - { 169307, true }, - { 169322, true }, - { 169347, true }, - { 169361, true }, + { 169225, true }, + { 169238, true }, + { 169266, true }, + { 169278, true }, + { 169293, true }, + { 169318, true }, + { 169332, true }, + { 169353, true }, + { 169364, true }, + { 169374, true }, { 169382, true }, - { 169393, true }, - { 169403, true }, - { 169411, true }, - { 169423, true }, - { 169448, true }, - { 169458, true }, - { 169483, true }, - { 169493, true }, - { 169506, false }, - { 169531, true }, - { 169545, true }, - { 169562, true }, - { 169575, true }, - { 169586, true }, - { 169594, true }, - { 169603, true }, + { 169394, true }, + { 169419, true }, + { 169429, true }, + { 169454, true }, + { 169464, true }, + { 169477, false }, + { 169502, true }, + { 169516, true }, + { 169533, true }, + { 169546, true }, + { 169557, true }, + { 169565, true }, + { 169574, true }, + { 169588, true }, + { 169601, true }, { 169617, true }, - { 169630, true }, - { 169646, true }, - { 169656, true }, - { 169667, true }, - { 169678, true }, - { 169694, true }, - { 169704, false }, - { 169716, true }, - { 169728, true }, - { 169746, true }, - { 169758, true }, - { 169768, true }, - { 169784, true }, - { 169808, true }, - { 169821, true }, - { 169828, true }, - { 169835, true }, - { 169852, true }, - { 169866, true }, - { 169878, true }, - { 169890, true }, - { 169902, true }, - { 169912, true }, - { 169926, true }, - { 169935, true }, - { 169956, true }, - { 169969, true }, - { 169980, true }, - { 169997, true }, - { 170012, true }, - { 170037, true }, - { 170063, true }, - { 170078, true }, - { 170089, true }, - { 170098, true }, - { 170120, true }, - { 170129, true }, - { 170144, true }, + { 169627, true }, + { 169638, true }, + { 169649, true }, + { 169665, true }, + { 169675, false }, + { 169687, true }, + { 169699, true }, + { 169717, true }, + { 169729, true }, + { 169739, true }, + { 169755, true }, + { 169779, true }, + { 169792, true }, + { 169799, true }, + { 169806, true }, + { 169823, true }, + { 169837, true }, + { 169849, true }, + { 169861, true }, + { 169873, true }, + { 169883, true }, + { 169897, true }, + { 169906, true }, + { 169927, true }, + { 169940, true }, + { 169951, true }, + { 169968, true }, + { 169983, true }, + { 170008, true }, + { 170034, true }, + { 170049, true }, + { 170060, true }, + { 170069, true }, + { 170091, true }, + { 170100, true }, + { 170115, true }, + { 170125, true }, + { 170141, true }, { 170154, true }, - { 170170, true }, - { 170183, true }, - { 170200, true }, - { 170221, true }, - { 170242, true }, - { 170259, true }, - { 170278, true }, + { 170171, true }, + { 170192, true }, + { 170213, true }, + { 170230, true }, + { 170249, true }, + { 170261, true }, + { 170275, true }, { 170290, true }, - { 170304, true }, - { 170319, true }, - { 170335, true }, - { 170349, true }, - { 170361, true }, - { 170375, true }, - { 170387, true }, - { 170406, true }, - { 170422, true }, - { 170438, true }, - { 170454, true }, - { 170472, true }, - { 170482, true }, - { 170499, true }, - { 170516, true }, + { 170306, true }, + { 170320, true }, + { 170332, true }, + { 170346, true }, + { 170358, true }, + { 170377, true }, + { 170393, true }, + { 170409, true }, + { 170425, true }, + { 170443, true }, + { 170453, true }, + { 170470, true }, + { 170487, true }, + { 170505, true }, + { 170520, true }, { 170534, true }, - { 170549, true }, - { 170563, true }, - { 170581, true }, - { 170598, true }, - { 170611, true }, - { 170630, true }, - { 170650, true }, - { 170667, true }, - { 170683, true }, - { 170701, true }, - { 170718, false }, - { 170735, false }, - { 170756, true }, + { 170552, true }, + { 170569, true }, + { 170582, true }, + { 170601, true }, + { 170621, true }, + { 170638, true }, + { 170654, true }, + { 170672, true }, + { 170689, false }, + { 170706, false }, + { 170727, true }, + { 170744, true }, + { 170754, true }, { 170773, true }, - { 170783, true }, - { 170802, true }, - { 170816, true }, - { 170829, true }, - { 170840, true }, - { 170855, true }, + { 170787, true }, + { 170800, true }, + { 170811, true }, + { 170826, true }, + { 170839, true }, + { 170850, true }, { 170868, true }, - { 170879, true }, - { 170897, true }, - { 170909, true }, - { 170922, true }, - { 170946, true }, - { 170955, true }, - { 170979, true }, - { 171006, true }, + { 170880, true }, + { 170893, true }, + { 170917, true }, + { 170926, true }, + { 170950, true }, + { 170977, true }, + { 170995, true }, + { 171005, true }, + { 171014, true }, { 171024, true }, - { 171034, true }, - { 171043, true }, - { 171053, true }, - { 171064, true }, - { 171087, true }, - { 171097, true }, - { 171110, true }, - { 171118, true }, - { 171125, true }, - { 171144, true }, - { 171151, true }, - { 171166, true }, - { 171175, true }, - { 171187, false }, - { 171207, true }, - { 171217, true }, - { 171234, true }, - { 171252, true }, - { 171269, true }, - { 171291, false }, - { 171304, true }, - { 171323, true }, - { 171335, true }, - { 171346, true }, - { 171359, true }, - { 171378, true }, - { 171393, true }, - { 171409, true }, - { 171432, true }, - { 171452, true }, - { 171465, true }, - { 171479, true }, - { 171493, true }, - { 171504, true }, + { 171035, true }, + { 171058, true }, + { 171068, true }, + { 171081, true }, + { 171089, true }, + { 171096, true }, + { 171115, true }, + { 171122, true }, + { 171137, true }, + { 171146, true }, + { 171158, false }, + { 171178, true }, + { 171188, true }, + { 171205, true }, + { 171223, true }, + { 171240, true }, + { 171262, false }, + { 171275, true }, + { 171294, true }, + { 171306, true }, + { 171317, true }, + { 171330, true }, + { 171349, true }, + { 171364, true }, + { 171380, true }, + { 171403, true }, + { 171423, true }, + { 171436, true }, + { 171450, true }, + { 171464, true }, + { 171475, true }, + { 171486, true }, + { 171496, true }, { 171515, true }, - { 171525, true }, + { 171527, true }, { 171544, true }, { 171556, true }, { 171573, true }, - { 171585, true }, - { 171602, true }, - { 171613, true }, - { 171637, true }, - { 171647, true }, - { 171659, true }, - { 171669, true }, - { 171679, true }, - { 171695, true }, - { 171711, true }, - { 171742, true }, - { 171751, true }, - { 171765, true }, + { 171584, true }, + { 171608, true }, + { 171618, true }, + { 171630, true }, + { 171640, true }, + { 171650, true }, + { 171666, true }, + { 171682, true }, + { 171713, true }, + { 171722, true }, + { 171736, true }, + { 171753, true }, + { 171770, true }, { 171782, true }, - { 171799, true }, - { 171811, true }, - { 171830, true }, - { 171846, true }, - { 171863, true }, - { 171876, true }, - { 171886, true }, - { 171900, true }, - { 171914, true }, - { 171923, true }, - { 171933, true }, - { 171948, true }, - { 171958, true }, - { 171972, true }, - { 171988, true }, - { 172005, true }, - { 172018, true }, - { 172028, true }, - { 172046, true }, - { 172063, true }, - { 172079, true }, - { 172096, true }, - { 172118, true }, - { 172130, true }, - { 172148, true }, - { 172162, true }, - { 172175, true }, + { 171801, true }, + { 171817, true }, + { 171834, true }, + { 171847, true }, + { 171857, true }, + { 171871, true }, + { 171885, true }, + { 171894, true }, + { 171904, true }, + { 171919, true }, + { 171929, true }, + { 171943, true }, + { 171959, true }, + { 171976, true }, + { 171989, true }, + { 171999, true }, + { 172017, true }, + { 172034, true }, + { 172050, true }, + { 172067, true }, + { 172089, true }, + { 172101, true }, + { 172119, true }, + { 172133, true }, + { 172146, true }, + { 172158, true }, + { 172165, true }, + { 172177, true }, { 172187, true }, - { 172194, true }, - { 172206, true }, - { 172216, true }, - { 172228, true }, + { 172199, true }, + { 172210, true }, + { 172227, true }, { 172239, true }, - { 172256, true }, - { 172268, true }, - { 172287, true }, - { 172313, true }, + { 172258, true }, + { 172284, true }, + { 172293, true }, + { 172308, true }, { 172322, true }, - { 172337, true }, - { 172351, true }, - { 172367, true }, - { 172382, true }, - { 172404, true }, - { 172429, true }, - { 172445, true }, - { 172463, true }, - { 172477, true }, - { 172487, true }, - { 172497, true }, - { 172508, true }, - { 172523, true }, - { 172533, true }, - { 172545, true }, - { 172563, true }, - { 172579, true }, - { 172594, true }, - { 172609, false }, + { 172338, true }, + { 172353, true }, + { 172375, true }, + { 172400, true }, + { 172416, true }, + { 172434, true }, + { 172448, true }, + { 172458, true }, + { 172468, true }, + { 172479, true }, + { 172494, true }, + { 172504, true }, + { 172516, true }, + { 172534, true }, + { 172550, true }, + { 172565, true }, + { 172580, false }, + { 172603, true }, + { 172619, true }, { 172632, true }, - { 172648, true }, - { 172661, true }, - { 172672, true }, - { 172682, true }, - { 172699, true }, - { 172719, true }, - { 172731, true }, - { 172762, true }, - { 172783, true }, - { 172796, true }, - { 172821, true }, - { 172842, true }, + { 172643, true }, + { 172653, true }, + { 172670, true }, + { 172690, true }, + { 172702, true }, + { 172733, true }, + { 172754, true }, + { 172767, true }, + { 172792, true }, + { 172813, true }, + { 172824, true }, + { 172841, true }, { 172853, true }, - { 172870, true }, - { 172882, true }, - { 172895, true }, - { 172915, true }, + { 172866, true }, + { 172886, true }, + { 172894, true }, + { 172905, true }, + { 172914, true }, { 172923, true }, - { 172934, true }, - { 172943, true }, + { 172930, true }, + { 172938, true }, { 172952, true }, - { 172959, true }, - { 172967, true }, - { 172981, true }, - { 172993, false }, - { 173000, true }, - { 173008, false }, - { 173017, true }, - { 173026, true }, - { 173037, true }, - { 173044, true }, - { 173061, true }, - { 173070, true }, - { 173078, true }, - { 173092, true }, - { 173100, true }, - { 173119, false }, - { 173139, true }, - { 173149, true }, - { 173170, true }, - { 173181, false }, - { 173193, true }, - { 173207, true }, - { 173224, true }, - { 173241, true }, + { 172964, false }, + { 172971, true }, + { 172979, false }, + { 172988, true }, + { 172997, true }, + { 173008, true }, + { 173015, true }, + { 173032, true }, + { 173041, true }, + { 173049, true }, + { 173063, true }, + { 173071, true }, + { 173090, false }, + { 173110, true }, + { 173120, true }, + { 173141, true }, + { 173152, false }, + { 173164, true }, + { 173178, true }, + { 173195, true }, + { 173212, true }, + { 173223, true }, { 173252, true }, - { 173281, true }, - { 173295, true }, - { 173307, true }, + { 173266, true }, + { 173278, true }, + { 173292, true }, + { 173309, true }, { 173321, true }, - { 173338, true }, + { 173336, true }, { 173350, true }, - { 173365, true }, - { 173379, true }, - { 173387, true }, - { 173395, true }, - { 173407, true }, - { 173421, true }, - { 173438, true }, - { 173456, true }, - { 173469, true }, - { 173479, true }, - { 173488, false }, - { 173506, true }, - { 173518, false }, - { 173530, true }, + { 173358, true }, + { 173366, true }, + { 173378, true }, + { 173392, true }, + { 173409, true }, + { 173427, true }, + { 173440, true }, + { 173450, true }, + { 173459, false }, + { 173477, true }, + { 173489, false }, + { 173501, true }, + { 173514, true }, + { 173529, true }, { 173543, true }, - { 173558, true }, - { 173572, true }, - { 173581, true }, - { 173604, true }, + { 173552, true }, + { 173575, true }, + { 173589, true }, + { 173602, true }, { 173618, true }, - { 173631, true }, - { 173647, true }, - { 173664, true }, - { 173677, true }, - { 173695, true }, - { 173707, true }, - { 173726, true }, - { 173748, true }, - { 173770, true }, - { 173790, true }, - { 173808, false }, - { 173824, true }, - { 173847, true }, - { 173856, true }, - { 173864, true }, - { 173879, true }, - { 173898, true }, - { 173914, true }, - { 173928, true }, - { 173944, true }, - { 173964, true }, - { 173974, true }, - { 173992, true }, - { 173999, true }, - { 174011, true }, - { 174024, true }, - { 174034, true }, - { 174050, true }, - { 174058, true }, - { 174066, true }, - { 174073, false }, - { 174096, true }, - { 174115, true }, + { 173635, true }, + { 173648, true }, + { 173666, true }, + { 173678, true }, + { 173697, true }, + { 173719, true }, + { 173741, true }, + { 173761, true }, + { 173779, false }, + { 173795, true }, + { 173818, true }, + { 173827, true }, + { 173835, true }, + { 173850, true }, + { 173869, true }, + { 173885, true }, + { 173899, true }, + { 173915, true }, + { 173935, true }, + { 173945, true }, + { 173963, true }, + { 173970, true }, + { 173982, true }, + { 173995, true }, + { 174005, true }, + { 174021, true }, + { 174029, true }, + { 174037, true }, + { 174044, false }, + { 174067, true }, + { 174086, true }, + { 174111, true }, + { 174128, true }, { 174140, true }, - { 174157, true }, - { 174169, true }, - { 174181, true }, - { 174191, true }, - { 174202, true }, - { 174217, true }, - { 174226, true }, - { 174240, true }, - { 174251, true }, - { 174264, true }, - { 174286, true }, - { 174298, true }, - { 174308, true }, - { 174329, true }, - { 174350, true }, - { 174367, true }, - { 174388, true }, + { 174152, true }, + { 174162, true }, + { 174173, true }, + { 174188, true }, + { 174197, true }, + { 174211, true }, + { 174222, true }, + { 174235, true }, + { 174257, true }, + { 174269, true }, + { 174279, true }, + { 174300, true }, + { 174321, true }, + { 174338, true }, + { 174359, true }, + { 174373, true }, + { 174389, true }, { 174402, true }, - { 174418, true }, - { 174431, true }, - { 174443, true }, - { 174458, true }, - { 174468, true }, - { 174481, true }, - { 174505, true }, - { 174524, true }, - { 174536, true }, - { 174554, true }, - { 174563, false }, - { 174580, true }, - { 174598, true }, - { 174611, true }, - { 174624, false }, + { 174414, true }, + { 174429, true }, + { 174439, true }, + { 174452, true }, + { 174476, true }, + { 174495, true }, + { 174507, true }, + { 174525, true }, + { 174534, false }, + { 174551, true }, + { 174569, true }, + { 174582, true }, + { 174595, false }, + { 174616, true }, + { 174626, true }, { 174645, true }, - { 174655, true }, - { 174674, true }, - { 174687, true }, - { 174707, true }, - { 174732, true }, - { 174743, true }, - { 174755, true }, - { 174770, true }, - { 174783, true }, - { 174798, true }, - { 174813, true }, - { 174833, true }, - { 174846, false }, - { 174855, true }, - { 174874, true }, - { 174891, false }, - { 174906, true }, - { 174920, true }, + { 174658, true }, + { 174678, true }, + { 174703, true }, + { 174714, true }, + { 174726, true }, + { 174741, true }, + { 174754, true }, + { 174769, true }, + { 174784, true }, + { 174804, true }, + { 174817, false }, + { 174826, true }, + { 174845, true }, + { 174862, false }, + { 174877, true }, + { 174891, true }, + { 174901, true }, + { 174914, true }, { 174930, true }, - { 174943, true }, - { 174959, true }, - { 174975, true }, - { 174993, true }, - { 175003, true }, - { 175016, true }, - { 175028, true }, - { 175041, true }, - { 175054, true }, - { 175063, true }, - { 175087, true }, - { 175111, true }, - { 175128, false }, - { 175141, true }, - { 175152, true }, - { 175168, true }, - { 175180, true }, + { 174946, true }, + { 174964, true }, + { 174974, true }, + { 174987, true }, + { 174999, true }, + { 175012, true }, + { 175025, true }, + { 175034, true }, + { 175058, true }, + { 175082, true }, + { 175099, false }, + { 175112, true }, + { 175123, true }, + { 175139, true }, + { 175151, true }, + { 175167, true }, + { 175184, false }, { 175196, true }, - { 175213, false }, - { 175225, true }, - { 175244, false }, - { 175253, true }, - { 175275, true }, - { 175288, false }, - { 175303, true }, + { 175213, true }, + { 175232, false }, + { 175241, true }, + { 175263, true }, + { 175276, false }, + { 175291, true }, + { 175306, true }, { 175318, true }, - { 175330, true }, - { 175349, false }, - { 175372, true }, - { 175388, true }, - { 175404, true }, - { 175422, true }, - { 175440, false }, + { 175337, false }, + { 175360, true }, + { 175376, true }, + { 175392, true }, + { 175410, true }, + { 175428, false }, + { 175448, true }, { 175460, true }, - { 175472, true }, - { 175485, true }, - { 175501, true }, - { 175512, true }, - { 175531, true }, - { 175545, true }, - { 175556, true }, - { 175566, true }, + { 175473, true }, + { 175489, true }, + { 175500, true }, + { 175519, true }, + { 175533, true }, + { 175544, true }, + { 175554, true }, + { 175571, true }, { 175583, true }, { 175595, true }, - { 175607, true }, + { 175614, true }, { 175626, true }, - { 175638, true }, - { 175649, true }, - { 175668, true }, - { 175689, true }, - { 175699, true }, - { 175712, true }, - { 175720, true }, - { 175736, true }, - { 175760, false }, - { 175778, true }, - { 175796, false }, - { 175816, true }, - { 175832, true }, + { 175637, true }, + { 175656, true }, + { 175677, true }, + { 175687, true }, + { 175700, true }, + { 175708, true }, + { 175724, true }, + { 175748, false }, + { 175766, true }, + { 175784, false }, + { 175804, true }, + { 175820, true }, + { 175838, true }, { 175850, true }, - { 175862, true }, - { 175879, true }, - { 175902, true }, - { 175921, true }, - { 175941, true }, + { 175867, true }, + { 175890, true }, + { 175909, true }, + { 175929, true }, + { 175942, true }, { 175954, true }, - { 175966, true }, - { 175974, true }, - { 175994, true }, - { 176002, true }, - { 176018, true }, + { 175962, true }, + { 175982, true }, + { 175990, true }, + { 176006, true }, + { 176020, true }, { 176032, true }, - { 176044, true }, - { 176053, true }, - { 176063, true }, - { 176072, true }, - { 176089, true }, - { 176099, true }, - { 176112, true }, - { 176129, true }, - { 176140, true }, - { 176150, true }, - { 176167, true }, - { 176184, true }, - { 176193, true }, + { 176041, true }, + { 176051, true }, + { 176060, true }, + { 176077, true }, + { 176087, true }, + { 176100, true }, + { 176117, true }, + { 176128, true }, + { 176138, true }, + { 176155, true }, + { 176172, true }, + { 176181, true }, + { 176195, true }, { 176207, true }, - { 176219, true }, - { 176238, true }, - { 176248, true }, - { 176265, true }, - { 176287, true }, - { 176301, true }, - { 176315, true }, - { 176333, true }, - { 176348, true }, - { 176362, true }, + { 176226, true }, + { 176236, true }, + { 176253, true }, + { 176275, true }, + { 176289, true }, + { 176303, true }, + { 176321, true }, + { 176336, true }, + { 176350, true }, + { 176359, true }, { 176371, true }, + { 176377, true }, { 176383, true }, - { 176389, true }, - { 176395, true }, + { 176391, true }, { 176403, true }, - { 176415, true }, - { 176436, true }, - { 176446, true }, - { 176457, true }, - { 176475, true }, - { 176488, true }, - { 176507, true }, - { 176523, true }, - { 176536, true }, - { 176547, true }, - { 176560, true }, - { 176575, true }, - { 176589, false }, - { 176603, true }, - { 176622, true }, - { 176633, true }, - { 176643, true }, - { 176651, true }, - { 176668, true }, + { 176424, true }, + { 176434, true }, + { 176445, true }, + { 176463, true }, + { 176476, true }, + { 176495, true }, + { 176511, true }, + { 176524, true }, + { 176535, true }, + { 176548, true }, + { 176563, true }, + { 176577, false }, + { 176591, true }, + { 176610, true }, + { 176621, true }, + { 176631, true }, + { 176639, true }, + { 176656, true }, + { 176670, true }, { 176682, true }, - { 176694, true }, - { 176711, true }, - { 176725, true }, - { 176739, false }, - { 176752, true }, + { 176699, true }, + { 176713, true }, + { 176727, false }, + { 176740, true }, + { 176758, true }, { 176770, true }, { 176782, true }, - { 176794, true }, - { 176813, true }, - { 176832, true }, + { 176801, true }, + { 176820, true }, + { 176834, true }, { 176846, true }, - { 176858, true }, - { 176871, true }, - { 176887, true }, - { 176900, true }, - { 176913, true }, - { 176928, true }, - { 176956, true }, - { 176967, true }, - { 176980, true }, - { 176995, true }, - { 177014, true }, - { 177027, true }, + { 176859, true }, + { 176875, true }, + { 176888, true }, + { 176901, true }, + { 176916, true }, + { 176944, true }, + { 176955, true }, + { 176968, true }, + { 176983, true }, + { 177002, true }, + { 177015, true }, + { 177040, true }, { 177052, true }, - { 177064, true }, - { 177078, true }, - { 177092, true }, - { 177107, true }, - { 177121, true }, - { 177135, true }, - { 177149, true }, - { 177165, true }, - { 177188, true }, - { 177204, true }, - { 177219, true }, + { 177066, true }, + { 177080, true }, + { 177095, true }, + { 177109, true }, + { 177123, true }, + { 177137, true }, + { 177153, true }, + { 177176, true }, + { 177192, true }, + { 177207, true }, + { 177231, true }, { 177243, true }, - { 177255, true }, - { 177274, true }, - { 177287, true }, - { 177298, true }, + { 177262, true }, + { 177275, true }, + { 177286, true }, + { 177306, true }, { 177318, true }, - { 177330, true }, - { 177348, true }, - { 177365, true }, - { 177380, true }, - { 177399, true }, - { 177412, true }, - { 177428, true }, - { 177446, true }, - { 177470, true }, - { 177486, true }, - { 177499, true }, - { 177519, true }, - { 177532, true }, - { 177554, true }, - { 177571, true }, - { 177586, true }, - { 177607, true }, - { 177627, true }, - { 177640, true }, + { 177336, true }, + { 177353, true }, + { 177368, true }, + { 177387, true }, + { 177400, true }, + { 177416, true }, + { 177434, true }, + { 177458, true }, + { 177474, true }, + { 177487, true }, + { 177507, true }, + { 177520, true }, + { 177542, true }, + { 177559, true }, + { 177574, true }, + { 177595, true }, + { 177615, true }, + { 177628, true }, + { 177643, true }, { 177655, true }, { 177669, true }, { 177687, true }, @@ -28375,3761 +28380,3768 @@ static const nsSTSPreload kSTSPreloadList[] = { { 179045, true }, { 179066, false }, { 179082, true }, - { 179100, true }, + { 179098, true }, { 179116, true }, - { 179131, true }, + { 179132, true }, { 179147, true }, - { 179159, true }, - { 179181, true }, - { 179203, true }, - { 179223, true }, - { 179242, true }, + { 179163, true }, + { 179175, true }, + { 179197, true }, + { 179219, true }, + { 179239, true }, { 179259, true }, - { 179277, false }, + { 179278, true }, { 179295, true }, - { 179315, true }, - { 179334, true }, - { 179353, true }, - { 179374, true }, - { 179401, true }, - { 179413, true }, - { 179427, true }, - { 179442, true }, - { 179454, true }, - { 179465, true }, - { 179484, true }, - { 179498, true }, - { 179507, true }, - { 179522, true }, - { 179532, true }, - { 179545, true }, - { 179565, true }, - { 179574, true }, - { 179584, true }, - { 179605, false }, - { 179622, true }, - { 179642, true }, - { 179651, true }, - { 179664, true }, - { 179681, true }, - { 179695, true }, - { 179709, true }, - { 179721, true }, - { 179738, true }, - { 179753, true }, - { 179770, true }, - { 179786, true }, - { 179803, true }, - { 179819, true }, - { 179831, true }, - { 179842, false }, - { 179858, true }, - { 179869, true }, - { 179885, true }, - { 179900, true }, - { 179916, true }, - { 179929, true }, - { 179938, true }, - { 179951, true }, - { 179968, true }, - { 179980, true }, - { 179992, true }, + { 179313, false }, + { 179331, true }, + { 179351, true }, + { 179370, true }, + { 179389, true }, + { 179410, true }, + { 179437, true }, + { 179449, true }, + { 179463, true }, + { 179478, true }, + { 179490, true }, + { 179501, true }, + { 179520, true }, + { 179534, true }, + { 179543, true }, + { 179558, true }, + { 179568, true }, + { 179581, true }, + { 179601, true }, + { 179610, true }, + { 179620, true }, + { 179641, false }, + { 179658, true }, + { 179678, true }, + { 179687, true }, + { 179700, true }, + { 179717, true }, + { 179731, true }, + { 179745, true }, + { 179757, true }, + { 179774, true }, + { 179789, true }, + { 179806, true }, + { 179822, true }, + { 179839, true }, + { 179855, true }, + { 179867, true }, + { 179878, false }, + { 179894, true }, + { 179905, true }, + { 179921, true }, + { 179936, true }, + { 179952, true }, + { 179965, true }, + { 179974, true }, + { 179987, true }, { 180004, true }, { 180016, true }, - { 180025, true }, - { 180037, true }, + { 180028, true }, + { 180040, true }, { 180052, true }, - { 180066, true }, - { 180078, true }, - { 180095, true }, - { 180107, true }, - { 180117, true }, - { 180133, true }, - { 180154, true }, - { 180172, true }, - { 180188, true }, - { 180204, true }, + { 180061, true }, + { 180073, true }, + { 180088, true }, + { 180102, true }, + { 180114, true }, + { 180131, true }, + { 180143, true }, + { 180153, true }, + { 180169, true }, + { 180190, true }, + { 180208, true }, { 180224, true }, - { 180239, true }, - { 180251, true }, - { 180266, true }, - { 180276, true }, - { 180291, true }, - { 180303, true }, - { 180315, true }, - { 180330, true }, - { 180344, true }, - { 180355, true }, + { 180240, true }, + { 180260, true }, + { 180275, true }, + { 180287, true }, + { 180302, true }, + { 180312, true }, + { 180327, true }, + { 180339, true }, + { 180351, true }, { 180366, true }, - { 180377, true }, - { 180385, true }, - { 180398, true }, - { 180411, true }, - { 180428, true }, - { 180438, true }, - { 180451, true }, - { 180468, true }, - { 180482, true }, - { 180491, true }, - { 180506, true }, - { 180520, true }, - { 180533, true }, - { 180547, true }, - { 180561, true }, + { 180380, true }, + { 180391, true }, + { 180402, true }, + { 180413, true }, + { 180421, true }, + { 180434, true }, + { 180447, true }, + { 180464, true }, + { 180474, true }, + { 180487, true }, + { 180504, true }, + { 180518, true }, + { 180527, true }, + { 180542, true }, + { 180556, true }, { 180569, true }, - { 180586, true }, - { 180601, true }, - { 180616, true }, - { 180630, true }, - { 180646, true }, - { 180662, true }, - { 180676, true }, - { 180692, true }, - { 180714, true }, - { 180731, true }, - { 180744, true }, - { 180758, true }, - { 180774, false }, - { 180792, true }, - { 180807, true }, - { 180824, true }, - { 180839, true }, - { 180856, false }, - { 180882, true }, - { 180897, true }, - { 180915, true }, - { 180928, true }, - { 180941, true }, - { 180953, true }, - { 180972, true }, - { 180982, true }, - { 180998, true }, - { 181010, true }, - { 181032, false }, - { 181043, true }, - { 181060, true }, - { 181091, true }, - { 181101, true }, - { 181112, true }, - { 181124, true }, - { 181138, true }, - { 181150, true }, - { 181158, true }, - { 181166, true }, - { 181177, false }, - { 181197, true }, - { 181215, true }, - { 181235, true }, - { 181250, true }, - { 181265, true }, - { 181282, false }, - { 181296, true }, - { 181316, true }, - { 181327, true }, + { 180583, true }, + { 180597, true }, + { 180605, true }, + { 180622, true }, + { 180637, true }, + { 180652, true }, + { 180666, true }, + { 180682, true }, + { 180698, true }, + { 180712, true }, + { 180728, true }, + { 180750, true }, + { 180767, true }, + { 180780, true }, + { 180794, true }, + { 180810, false }, + { 180828, true }, + { 180843, true }, + { 180860, true }, + { 180875, true }, + { 180892, false }, + { 180918, true }, + { 180933, true }, + { 180951, true }, + { 180964, true }, + { 180977, true }, + { 180989, true }, + { 181008, true }, + { 181018, true }, + { 181034, true }, + { 181046, true }, + { 181068, false }, + { 181079, true }, + { 181096, true }, + { 181127, true }, + { 181137, true }, + { 181148, true }, + { 181160, true }, + { 181174, true }, + { 181186, true }, + { 181194, true }, + { 181202, true }, + { 181213, false }, + { 181233, true }, + { 181251, true }, + { 181271, true }, + { 181286, true }, + { 181301, true }, + { 181318, false }, + { 181332, true }, { 181352, true }, - { 181373, true }, - { 181391, true }, - { 181406, true }, - { 181423, true }, - { 181439, true }, - { 181464, true }, + { 181363, true }, + { 181388, true }, + { 181409, true }, + { 181427, true }, + { 181442, true }, + { 181459, true }, { 181475, true }, - { 181486, true }, { 181500, true }, - { 181513, false }, - { 181541, true }, - { 181553, true }, - { 181566, true }, - { 181579, false }, - { 181587, true }, - { 181597, true }, - { 181612, true }, - { 181624, true }, - { 181643, true }, - { 181655, true }, - { 181668, true }, - { 181681, true }, - { 181696, true }, - { 181709, true }, - { 181731, true }, + { 181511, true }, + { 181522, true }, + { 181536, true }, + { 181549, false }, + { 181577, true }, + { 181589, true }, + { 181602, true }, + { 181615, false }, + { 181623, true }, + { 181633, true }, + { 181648, true }, + { 181660, true }, + { 181679, true }, + { 181691, true }, + { 181704, true }, + { 181717, true }, + { 181732, true }, { 181745, true }, - { 181758, true }, - { 181778, false }, - { 181795, true }, - { 181813, true }, - { 181827, true }, - { 181838, true }, + { 181767, true }, + { 181781, true }, + { 181794, true }, + { 181814, false }, + { 181831, true }, { 181849, true }, - { 181862, true }, - { 181879, true }, - { 181887, true }, - { 181902, true }, + { 181863, true }, + { 181874, true }, + { 181885, true }, + { 181898, true }, { 181915, true }, - { 181929, true }, - { 181944, true }, - { 181969, true }, + { 181923, true }, + { 181938, true }, + { 181951, true }, + { 181965, true }, + { 181980, true }, { 182005, true }, - { 182018, true }, - { 182028, true }, - { 182043, true }, - { 182056, true }, - { 182078, true }, - { 182100, true }, - { 182118, true }, - { 182131, true }, - { 182142, true }, + { 182041, true }, + { 182054, true }, + { 182064, true }, + { 182079, true }, + { 182092, true }, + { 182114, true }, + { 182136, true }, { 182154, true }, - { 182172, true }, - { 182180, true }, - { 182213, true }, - { 182220, true }, - { 182237, true }, - { 182253, true }, - { 182270, true }, - { 182280, true }, - { 182293, true }, - { 182311, false }, + { 182167, true }, + { 182178, true }, + { 182190, true }, + { 182208, true }, + { 182216, true }, + { 182249, true }, + { 182256, true }, + { 182273, true }, + { 182289, true }, + { 182306, true }, + { 182316, true }, { 182329, true }, - { 182347, true }, - { 182359, true }, - { 182371, true }, - { 182382, true }, + { 182347, false }, + { 182365, true }, + { 182383, true }, { 182395, true }, - { 182411, true }, - { 182425, true }, - { 182445, true }, - { 182459, true }, - { 182471, true }, - { 182491, true }, - { 182502, true }, - { 182519, true }, - { 182529, true }, + { 182407, true }, + { 182418, true }, + { 182431, true }, + { 182447, true }, + { 182461, true }, + { 182481, true }, + { 182495, true }, + { 182507, true }, + { 182527, true }, { 182538, true }, - { 182549, true }, - { 182568, true }, + { 182555, true }, + { 182565, true }, + { 182574, true }, { 182585, true }, - { 182599, true }, - { 182613, true }, - { 182636, true }, - { 182656, true }, - { 182670, true }, - { 182684, true }, - { 182696, true }, - { 182708, true }, - { 182724, true }, - { 182738, true }, - { 182752, true }, - { 182761, true }, - { 182773, true }, - { 182785, true }, - { 182796, true }, - { 182805, true }, - { 182814, true }, - { 182825, true }, - { 182839, true }, - { 182845, true }, - { 182857, true }, - { 182870, true }, - { 182885, false }, - { 182912, true }, - { 182932, true }, - { 182942, true }, - { 182955, true }, + { 182604, true }, + { 182621, true }, + { 182635, true }, + { 182649, true }, + { 182672, true }, + { 182692, true }, + { 182706, true }, + { 182720, true }, + { 182732, true }, + { 182744, true }, + { 182760, true }, + { 182774, true }, + { 182788, true }, + { 182797, true }, + { 182809, true }, + { 182821, true }, + { 182832, true }, + { 182841, true }, + { 182850, true }, + { 182861, true }, + { 182875, true }, + { 182881, true }, + { 182893, true }, + { 182906, true }, + { 182921, false }, + { 182948, true }, { 182968, true }, - { 182984, true }, - { 183005, true }, - { 183026, true }, - { 183045, true }, - { 183055, true }, - { 183067, true }, - { 183078, false }, - { 183086, true }, - { 183101, true }, - { 183115, true }, - { 183129, true }, - { 183141, true }, - { 183154, true }, - { 183164, true }, - { 183185, true }, - { 183197, true }, - { 183208, true }, - { 183228, true }, - { 183247, true }, - { 183258, true }, - { 183273, true }, - { 183298, false }, - { 183326, false }, - { 183338, true }, - { 183349, true }, - { 183365, true }, - { 183380, true }, - { 183395, true }, - { 183406, true }, - { 183423, true }, - { 183435, false }, - { 183452, true }, - { 183471, true }, - { 183487, true }, - { 183501, true }, - { 183516, true }, - { 183531, true }, - { 183547, true }, - { 183564, true }, - { 183587, true }, - { 183606, true }, - { 183620, true }, - { 183641, true }, - { 183661, true }, - { 183679, true }, - { 183698, true }, - { 183716, true }, + { 182978, true }, + { 182991, true }, + { 183004, true }, + { 183020, true }, + { 183041, true }, + { 183062, true }, + { 183081, true }, + { 183091, true }, + { 183103, true }, + { 183114, false }, + { 183122, true }, + { 183137, true }, + { 183151, true }, + { 183165, true }, + { 183177, true }, + { 183190, true }, + { 183200, true }, + { 183221, true }, + { 183233, true }, + { 183244, true }, + { 183264, true }, + { 183283, true }, + { 183294, true }, + { 183309, true }, + { 183334, false }, + { 183362, false }, + { 183374, true }, + { 183385, true }, + { 183401, true }, + { 183416, true }, + { 183431, true }, + { 183442, true }, + { 183459, true }, + { 183471, false }, + { 183488, true }, + { 183507, true }, + { 183523, true }, + { 183537, true }, + { 183552, true }, + { 183567, true }, + { 183583, true }, + { 183600, true }, + { 183623, true }, + { 183642, true }, + { 183656, true }, + { 183677, true }, + { 183697, true }, + { 183715, true }, { 183734, true }, - { 183750, true }, - { 183765, false }, - { 183780, false }, - { 183794, true }, - { 183807, true }, - { 183823, true }, - { 183834, true }, - { 183845, true }, - { 183857, true }, - { 183872, true }, - { 183890, true }, + { 183752, true }, + { 183770, true }, + { 183786, true }, + { 183801, false }, + { 183816, false }, + { 183830, true }, + { 183843, true }, + { 183859, true }, + { 183870, true }, + { 183881, true }, + { 183893, true }, { 183908, true }, - { 183930, true }, + { 183926, true }, { 183944, true }, - { 183961, true }, + { 183966, true }, { 183980, true }, - { 183998, true }, - { 184019, true }, - { 184033, false }, - { 184045, true }, - { 184060, true }, - { 184076, true }, - { 184094, true }, - { 184104, true }, - { 184116, false }, - { 184127, true }, - { 184146, false }, - { 184165, true }, - { 184180, true }, - { 184193, false }, - { 184212, true }, - { 184223, true }, - { 184241, true }, - { 184255, true }, - { 184280, true }, - { 184295, true }, - { 184313, true }, - { 184328, true }, - { 184343, true }, - { 184360, true }, - { 184371, true }, - { 184381, true }, - { 184393, true }, + { 183997, true }, + { 184016, true }, + { 184034, true }, + { 184055, true }, + { 184069, false }, + { 184081, true }, + { 184096, true }, + { 184112, true }, + { 184130, true }, + { 184140, true }, + { 184152, false }, + { 184163, true }, + { 184182, false }, + { 184201, true }, + { 184216, true }, + { 184229, false }, + { 184248, true }, + { 184259, true }, + { 184277, true }, + { 184291, true }, + { 184316, true }, + { 184331, true }, + { 184349, true }, + { 184364, true }, + { 184379, true }, + { 184396, true }, { 184407, true }, - { 184422, true }, - { 184431, true }, - { 184448, true }, - { 184463, false }, - { 184476, true }, - { 184488, true }, - { 184509, true }, - { 184522, true }, - { 184539, true }, - { 184559, true }, - { 184582, true }, - { 184601, true }, - { 184613, true }, - { 184624, true }, - { 184634, false }, - { 184646, true }, - { 184661, true }, - { 184675, true }, - { 184689, true }, - { 184709, true }, - { 184732, true }, + { 184417, true }, + { 184429, true }, + { 184443, true }, + { 184458, true }, + { 184467, true }, + { 184484, true }, + { 184499, false }, + { 184512, true }, + { 184524, true }, + { 184545, true }, + { 184558, true }, + { 184575, true }, + { 184595, true }, + { 184618, true }, + { 184637, true }, + { 184649, true }, + { 184660, true }, + { 184670, false }, + { 184682, true }, + { 184697, true }, + { 184711, true }, + { 184725, true }, { 184745, true }, - { 184763, true }, - { 184771, true }, - { 184778, true }, - { 184786, true }, - { 184801, true }, - { 184813, true }, - { 184825, true }, - { 184842, true }, - { 184853, false }, - { 184870, true }, - { 184883, true }, - { 184894, false }, - { 184907, true }, - { 184922, false }, - { 184946, false }, - { 184958, true }, - { 184983, true }, - { 184992, true }, - { 185012, true }, - { 185029, true }, - { 185039, true }, + { 184768, true }, + { 184781, true }, + { 184799, true }, + { 184807, true }, + { 184814, true }, + { 184822, true }, + { 184837, true }, + { 184849, true }, + { 184861, true }, + { 184878, true }, + { 184889, false }, + { 184906, true }, + { 184919, true }, + { 184930, false }, + { 184943, true }, + { 184958, false }, + { 184982, false }, + { 184994, true }, + { 185019, true }, + { 185028, true }, + { 185040, true }, { 185060, true }, - { 185069, true }, - { 185088, true }, - { 185106, true }, - { 185122, true }, - { 185137, true }, - { 185152, true }, + { 185077, true }, + { 185087, true }, + { 185100, true }, + { 185121, true }, + { 185130, true }, + { 185149, true }, { 185167, true }, - { 185187, true }, - { 185200, true }, + { 185183, true }, + { 185198, true }, { 185213, true }, - { 185222, true }, - { 185236, true }, - { 185259, true }, - { 185281, true }, - { 185307, true }, - { 185322, true }, - { 185337, true }, - { 185347, true }, - { 185361, true }, - { 185373, true }, - { 185396, true }, - { 185405, true }, - { 185415, true }, - { 185431, true }, - { 185445, true }, - { 185458, true }, - { 185475, false }, - { 185493, true }, - { 185506, true }, - { 185517, true }, - { 185530, true }, - { 185541, true }, - { 185551, true }, - { 185566, true }, - { 185579, true }, - { 185595, true }, - { 185605, false }, - { 185615, true }, - { 185628, true }, - { 185643, true }, - { 185653, true }, - { 185669, true }, - { 185681, true }, - { 185690, true }, - { 185705, true }, - { 185716, true }, + { 185228, true }, + { 185248, true }, + { 185261, true }, + { 185274, true }, + { 185283, true }, + { 185297, true }, + { 185320, true }, + { 185342, true }, + { 185368, true }, + { 185383, true }, + { 185398, true }, + { 185408, true }, + { 185422, true }, + { 185434, true }, + { 185457, true }, + { 185466, true }, + { 185476, true }, + { 185484, true }, + { 185500, true }, + { 185514, true }, + { 185526, true }, + { 185539, true }, + { 185556, false }, + { 185574, true }, + { 185587, true }, + { 185598, true }, + { 185611, true }, + { 185622, true }, + { 185632, true }, + { 185647, true }, + { 185660, true }, + { 185676, true }, + { 185686, false }, + { 185696, true }, + { 185709, true }, + { 185724, true }, { 185734, true }, - { 185754, true }, - { 185770, true }, - { 185787, true }, - { 185800, true }, - { 185810, true }, - { 185820, true }, - { 185834, true }, - { 185846, true }, - { 185859, true }, - { 185876, true }, + { 185750, true }, + { 185762, true }, + { 185771, true }, + { 185786, true }, + { 185797, true }, + { 185815, true }, + { 185835, true }, + { 185851, true }, + { 185868, true }, + { 185881, true }, { 185891, true }, - { 185908, true }, - { 185920, true }, - { 185937, true }, - { 185951, true }, - { 185960, true }, - { 185976, true }, + { 185901, true }, + { 185915, true }, + { 185927, true }, + { 185940, true }, + { 185957, true }, + { 185972, true }, { 185989, true }, - { 186002, true }, - { 186017, false }, - { 186029, true }, - { 186042, true }, - { 186052, true }, - { 186061, true }, - { 186073, true }, - { 186081, true }, - { 186089, true }, - { 186097, true }, - { 186103, true }, - { 186114, true }, - { 186129, true }, + { 186001, true }, + { 186018, true }, + { 186032, true }, + { 186041, true }, + { 186057, true }, + { 186070, true }, + { 186083, true }, + { 186098, false }, + { 186110, true }, + { 186123, true }, + { 186133, true }, { 186142, true }, - { 186157, true }, - { 186176, true }, - { 186200, true }, - { 186213, true }, - { 186228, true }, - { 186252, true }, - { 186262, true }, - { 186274, true }, - { 186290, true }, - { 186311, true }, - { 186326, false }, - { 186349, true }, - { 186370, true }, - { 186383, true }, - { 186396, true }, - { 186413, true }, - { 186427, true }, - { 186439, true }, - { 186458, true }, - { 186476, true }, - { 186500, false }, - { 186527, true }, - { 186553, true }, - { 186568, true }, - { 186585, true }, - { 186601, true }, - { 186618, true }, - { 186635, true }, - { 186650, true }, - { 186663, true }, - { 186674, true }, - { 186685, true }, - { 186695, true }, - { 186708, true }, - { 186726, true }, - { 186739, true }, - { 186753, true }, - { 186763, true }, - { 186774, true }, - { 186783, true }, - { 186804, true }, - { 186818, true }, - { 186827, true }, + { 186154, true }, + { 186162, true }, + { 186170, true }, + { 186178, true }, + { 186184, true }, + { 186195, true }, + { 186210, true }, + { 186223, true }, + { 186238, true }, + { 186257, true }, + { 186281, true }, + { 186294, true }, + { 186309, true }, + { 186333, true }, + { 186343, true }, + { 186355, true }, + { 186371, true }, + { 186392, true }, + { 186407, false }, + { 186430, true }, + { 186451, true }, + { 186464, true }, + { 186477, true }, + { 186494, true }, + { 186508, true }, + { 186520, true }, + { 186539, true }, + { 186557, true }, + { 186581, false }, + { 186608, true }, + { 186634, true }, + { 186649, true }, + { 186666, true }, + { 186682, true }, + { 186699, true }, + { 186716, true }, + { 186731, true }, + { 186744, true }, + { 186755, true }, + { 186766, true }, + { 186776, true }, + { 186789, true }, + { 186807, true }, + { 186820, true }, { 186834, true }, - { 186841, true }, - { 186849, true }, - { 186872, true }, + { 186844, true }, + { 186855, true }, + { 186864, true }, { 186885, true }, { 186899, true }, - { 186912, true }, - { 186927, true }, - { 186942, true }, - { 186951, true }, - { 186959, true }, - { 186972, true }, + { 186908, true }, + { 186915, true }, + { 186922, true }, + { 186930, true }, + { 186953, true }, + { 186966, true }, { 186980, true }, - { 186998, true }, - { 187010, true }, - { 187021, true }, - { 187042, true }, - { 187058, true }, - { 187067, true }, - { 187080, true }, + { 186993, true }, + { 187008, true }, + { 187023, true }, + { 187032, true }, + { 187040, true }, + { 187053, true }, + { 187061, true }, + { 187079, true }, { 187091, true }, - { 187103, true }, - { 187118, true }, - { 187127, true }, + { 187102, true }, + { 187123, true }, { 187139, true }, - { 187150, true }, - { 187162, true }, - { 187175, true }, - { 187188, true }, - { 187203, true }, - { 187223, true }, - { 187235, true }, - { 187252, true }, - { 187262, true }, + { 187148, true }, + { 187161, true }, + { 187172, true }, + { 187184, true }, + { 187199, true }, + { 187208, true }, + { 187220, true }, + { 187231, true }, + { 187243, true }, + { 187256, true }, { 187269, true }, - { 187279, true }, - { 187291, true }, - { 187307, true }, - { 187322, true }, - { 187331, true }, - { 187345, true }, - { 187365, true }, - { 187377, true }, - { 187390, true }, - { 187404, true }, - { 187422, true }, - { 187429, true }, + { 187284, true }, + { 187304, true }, + { 187316, true }, + { 187333, true }, + { 187343, true }, + { 187350, true }, + { 187360, true }, + { 187372, true }, + { 187388, true }, + { 187403, true }, + { 187412, true }, + { 187426, true }, { 187446, true }, - { 187463, true }, - { 187483, true }, - { 187502, true }, - { 187518, false }, - { 187536, true }, - { 187563, true }, - { 187580, true }, - { 187594, true }, - { 187608, true }, - { 187624, true }, - { 187639, false }, - { 187658, true }, - { 187676, true }, - { 187694, true }, - { 187712, true }, - { 187729, true }, - { 187750, true }, - { 187764, true }, + { 187458, true }, + { 187471, true }, + { 187485, true }, + { 187503, true }, + { 187510, true }, + { 187527, true }, + { 187544, true }, + { 187564, true }, + { 187583, true }, + { 187599, false }, + { 187617, true }, + { 187644, true }, + { 187661, true }, + { 187675, true }, + { 187689, true }, + { 187705, true }, + { 187720, false }, + { 187739, true }, + { 187757, true }, { 187775, true }, - { 187783, true }, { 187793, true }, - { 187808, true }, - { 187823, true }, - { 187834, true }, + { 187810, true }, + { 187831, true }, + { 187845, true }, { 187856, true }, - { 187869, true }, - { 187884, true }, - { 187903, true }, - { 187929, true }, - { 187945, true }, - { 187963, true }, - { 187981, true }, - { 187996, true }, - { 188004, true }, - { 188017, true }, - { 188025, true }, - { 188036, true }, - { 188050, true }, - { 188064, true }, - { 188075, true }, - { 188091, true }, - { 188108, true }, - { 188118, true }, + { 187864, true }, + { 187874, true }, + { 187889, true }, + { 187904, true }, + { 187915, true }, + { 187937, true }, + { 187950, true }, + { 187965, true }, + { 187984, true }, + { 188010, true }, + { 188026, true }, + { 188044, true }, + { 188062, true }, + { 188077, true }, + { 188085, true }, + { 188098, true }, + { 188106, true }, + { 188117, true }, { 188131, true }, - { 188149, true }, - { 188162, true }, - { 188181, false }, - { 188191, true }, - { 188207, true }, - { 188224, true }, - { 188240, true }, - { 188263, true }, + { 188145, true }, + { 188156, true }, + { 188172, true }, + { 188189, true }, + { 188199, true }, + { 188212, true }, + { 188230, true }, + { 188243, true }, + { 188262, false }, + { 188272, true }, { 188288, true }, - { 188301, true }, - { 188312, true }, - { 188327, true }, - { 188339, true }, - { 188357, true }, + { 188305, true }, + { 188321, true }, + { 188344, true }, + { 188369, true }, { 188382, true }, - { 188394, true }, - { 188406, true }, - { 188418, true }, - { 188429, true }, - { 188441, true }, - { 188459, true }, - { 188480, true }, - { 188496, true }, - { 188508, true }, + { 188393, true }, + { 188408, true }, + { 188420, true }, + { 188438, true }, + { 188463, true }, + { 188475, true }, + { 188487, true }, + { 188499, true }, + { 188510, true }, { 188522, true }, - { 188537, true }, - { 188550, true }, - { 188566, true }, - { 188580, false }, + { 188540, true }, + { 188561, true }, + { 188577, true }, { 188589, true }, - { 188607, true }, - { 188621, true }, - { 188631, false }, - { 188642, true }, - { 188650, false }, - { 188662, true }, - { 188679, true }, - { 188689, true }, - { 188700, true }, - { 188707, true }, - { 188718, true }, - { 188735, true }, - { 188752, true }, - { 188772, true }, - { 188783, true }, - { 188792, false }, + { 188603, true }, + { 188618, true }, + { 188631, true }, + { 188647, true }, + { 188661, false }, + { 188670, true }, + { 188688, true }, + { 188702, true }, + { 188712, false }, + { 188723, true }, + { 188731, false }, + { 188743, true }, + { 188760, true }, + { 188770, true }, + { 188781, true }, + { 188788, true }, { 188799, true }, - { 188809, true }, - { 188820, true }, - { 188836, true }, - { 188845, true }, - { 188860, true }, - { 188870, true }, - { 188891, true }, - { 188900, true }, - { 188918, true }, - { 188934, false }, - { 188947, true }, - { 188963, true }, - { 188975, true }, + { 188816, true }, + { 188833, true }, + { 188853, false }, + { 188868, true }, + { 188879, true }, + { 188888, false }, + { 188895, true }, + { 188905, true }, + { 188916, true }, + { 188932, true }, + { 188941, true }, + { 188956, true }, + { 188966, true }, { 188987, true }, - { 189007, true }, - { 189021, true }, - { 189037, true }, - { 189051, true }, - { 189066, true }, - { 189074, true }, - { 189087, true }, - { 189103, true }, - { 189116, true }, - { 189129, true }, - { 189143, true }, - { 189165, true }, - { 189185, true }, - { 189206, true }, - { 189225, true }, - { 189241, true }, - { 189269, true }, - { 189286, true }, - { 189307, true }, - { 189326, true }, - { 189350, true }, - { 189360, true }, - { 189369, true }, - { 189382, true }, - { 189391, true }, - { 189397, true }, - { 189409, true }, - { 189426, true }, - { 189440, true }, - { 189459, true }, - { 189473, true }, - { 189487, false }, - { 189500, true }, - { 189513, true }, - { 189526, true }, - { 189544, true }, - { 189565, true }, - { 189591, false }, - { 189602, true }, - { 189615, true }, - { 189625, true }, - { 189644, true }, - { 189663, true }, - { 189680, true }, - { 189700, true }, - { 189716, true }, - { 189736, true }, - { 189745, true }, - { 189756, true }, - { 189765, true }, - { 189784, false }, - { 189800, false }, - { 189813, false }, - { 189826, true }, - { 189841, true }, + { 188996, true }, + { 189014, false }, + { 189025, true }, + { 189041, false }, + { 189054, true }, + { 189070, true }, + { 189082, true }, + { 189094, true }, + { 189114, true }, + { 189128, true }, + { 189144, true }, + { 189158, true }, + { 189173, true }, + { 189181, true }, + { 189194, true }, + { 189210, true }, + { 189223, true }, + { 189236, true }, + { 189250, true }, + { 189272, true }, + { 189292, true }, + { 189313, true }, + { 189332, true }, + { 189348, true }, + { 189376, true }, + { 189393, true }, + { 189414, true }, + { 189433, true }, + { 189457, true }, + { 189467, true }, + { 189476, true }, + { 189489, true }, + { 189498, true }, + { 189504, true }, + { 189516, true }, + { 189533, true }, + { 189547, true }, + { 189566, true }, + { 189580, true }, + { 189594, false }, + { 189607, true }, + { 189620, true }, + { 189633, true }, + { 189651, true }, + { 189672, true }, + { 189698, false }, + { 189709, true }, + { 189722, true }, + { 189732, true }, + { 189751, true }, + { 189770, true }, + { 189787, true }, + { 189807, true }, + { 189823, true }, + { 189843, true }, { 189852, true }, - { 189871, true }, - { 189884, true }, - { 189896, true }, - { 189909, true }, - { 189918, true }, - { 189931, true }, - { 189946, true }, - { 189962, true }, - { 189976, true }, - { 189993, true }, + { 189863, true }, + { 189872, true }, + { 189891, false }, + { 189907, false }, + { 189920, false }, + { 189933, true }, + { 189944, true }, + { 189959, true }, + { 189970, true }, + { 189989, true }, { 190002, true }, - { 190016, true }, - { 190040, true }, - { 190055, true }, - { 190071, true }, - { 190089, true }, - { 190106, true }, - { 190121, true }, - { 190139, true }, - { 190155, true }, - { 190168, true }, - { 190177, true }, - { 190190, true }, - { 190210, true }, - { 190221, true }, - { 190235, true }, - { 190244, true }, - { 190253, true }, - { 190271, true }, - { 190285, true }, - { 190300, true }, - { 190320, true }, - { 190337, true }, - { 190354, true }, - { 190370, true }, - { 190382, true }, - { 190396, true }, - { 190410, true }, - { 190431, true }, - { 190456, false }, + { 190014, true }, + { 190027, true }, + { 190036, true }, + { 190049, true }, + { 190064, true }, + { 190080, true }, + { 190094, true }, + { 190111, true }, + { 190120, true }, + { 190134, true }, + { 190158, true }, + { 190173, true }, + { 190189, true }, + { 190207, true }, + { 190224, true }, + { 190239, true }, + { 190257, true }, + { 190273, true }, + { 190286, true }, + { 190295, true }, + { 190308, true }, + { 190328, true }, + { 190339, true }, + { 190353, true }, + { 190362, true }, + { 190371, true }, + { 190389, true }, + { 190403, true }, + { 190418, true }, + { 190438, true }, + { 190455, true }, { 190472, true }, - { 190491, true }, - { 190506, true }, - { 190516, true }, - { 190540, true }, - { 190552, true }, - { 190563, true }, - { 190576, true }, + { 190488, true }, + { 190500, true }, + { 190514, true }, + { 190528, true }, + { 190549, true }, + { 190574, false }, { 190590, true }, - { 190599, true }, - { 190628, true }, - { 190653, true }, - { 190678, true }, - { 190707, true }, - { 190719, true }, - { 190735, true }, - { 190744, true }, - { 190756, true }, - { 190770, true }, - { 190784, true }, - { 190798, true }, - { 190811, true }, - { 190830, true }, - { 190843, true }, - { 190860, true }, - { 190869, true }, - { 190884, true }, + { 190609, true }, + { 190624, true }, + { 190634, true }, + { 190658, true }, + { 190670, true }, + { 190681, true }, + { 190694, true }, + { 190708, true }, + { 190717, true }, + { 190746, true }, + { 190771, true }, + { 190796, true }, + { 190825, true }, + { 190837, true }, + { 190853, true }, + { 190862, true }, + { 190874, true }, + { 190888, true }, { 190902, true }, - { 190916, false }, - { 190927, true }, - { 190940, true }, - { 190960, false }, - { 190973, true }, - { 190983, true }, + { 190916, true }, + { 190929, true }, + { 190948, true }, + { 190961, true }, + { 190978, true }, + { 190987, true }, { 191002, true }, - { 191015, true }, - { 191027, true }, - { 191049, true }, - { 191057, true }, - { 191068, true }, - { 191079, true }, - { 191090, true }, - { 191100, true }, - { 191110, true }, - { 191119, true }, - { 191127, true }, - { 191133, false }, - { 191141, true }, - { 191150, true }, - { 191159, true }, + { 191020, true }, + { 191034, false }, + { 191045, true }, + { 191058, true }, + { 191078, false }, + { 191091, true }, + { 191101, true }, + { 191120, true }, + { 191133, true }, + { 191145, true }, { 191167, true }, - { 191177, true }, - { 191185, true }, - { 191204, true }, - { 191211, true }, - { 191236, true }, - { 191243, true }, - { 191256, true }, - { 191270, true }, - { 191280, true }, - { 191290, true }, - { 191309, true }, - { 191321, true }, - { 191336, true }, - { 191347, true }, - { 191359, true }, - { 191367, true }, - { 191380, true }, - { 191392, true }, - { 191411, true }, - { 191422, true }, - { 191449, true }, - { 191460, false }, - { 191471, true }, - { 191486, true }, - { 191502, true }, - { 191524, true }, - { 191538, true }, - { 191551, true }, - { 191564, true }, - { 191583, true }, - { 191612, true }, - { 191628, true }, - { 191641, true }, - { 191661, false }, - { 191688, false }, - { 191704, true }, - { 191720, true }, - { 191735, true }, - { 191751, true }, - { 191769, true }, - { 191788, true }, - { 191797, true }, - { 191810, true }, - { 191827, true }, - { 191846, true }, - { 191859, true }, - { 191877, true }, - { 191898, true }, - { 191911, true }, - { 191930, true }, - { 191957, true }, - { 191974, true }, - { 191988, true }, - { 192006, true }, - { 192024, true }, - { 192040, true }, - { 192058, true }, - { 192071, true }, - { 192087, true }, - { 192108, true }, - { 192118, true }, - { 192131, true }, - { 192140, true }, - { 192151, true }, - { 192161, true }, - { 192174, true }, - { 192187, true }, - { 192203, true }, - { 192216, true }, - { 192230, true }, - { 192245, true }, - { 192259, true }, - { 192274, true }, - { 192286, true }, - { 192303, true }, - { 192319, true }, - { 192338, true }, - { 192354, true }, - { 192367, true }, - { 192382, true }, - { 192391, true }, - { 192401, true }, - { 192413, false }, - { 192430, true }, - { 192448, true }, + { 191175, true }, + { 191186, true }, + { 191197, true }, + { 191208, true }, + { 191218, true }, + { 191228, true }, + { 191237, true }, + { 191245, true }, + { 191251, false }, + { 191259, true }, + { 191268, true }, + { 191277, true }, + { 191285, true }, + { 191295, true }, + { 191303, true }, + { 191322, true }, + { 191329, true }, + { 191354, true }, + { 191361, true }, + { 191374, true }, + { 191388, true }, + { 191398, true }, + { 191408, true }, + { 191427, true }, + { 191439, true }, + { 191454, true }, + { 191465, true }, + { 191477, true }, + { 191485, true }, + { 191498, true }, + { 191510, true }, + { 191529, true }, + { 191540, true }, + { 191567, true }, + { 191578, false }, + { 191589, true }, + { 191604, true }, + { 191620, true }, + { 191642, true }, + { 191656, true }, + { 191669, true }, + { 191682, true }, + { 191701, true }, + { 191730, true }, + { 191746, true }, + { 191759, true }, + { 191779, false }, + { 191806, false }, + { 191822, true }, + { 191838, true }, + { 191853, true }, + { 191869, true }, + { 191887, true }, + { 191906, true }, + { 191915, true }, + { 191928, true }, + { 191945, true }, + { 191964, true }, + { 191977, true }, + { 191995, true }, + { 192016, true }, + { 192029, true }, + { 192048, true }, + { 192075, true }, + { 192092, true }, + { 192106, true }, + { 192124, true }, + { 192142, true }, + { 192158, true }, + { 192176, true }, + { 192189, true }, + { 192205, true }, + { 192226, true }, + { 192236, true }, + { 192249, true }, + { 192258, true }, + { 192269, true }, + { 192279, true }, + { 192292, true }, + { 192305, true }, + { 192321, true }, + { 192334, true }, + { 192348, true }, + { 192363, true }, + { 192377, true }, + { 192392, true }, + { 192404, true }, + { 192421, true }, + { 192437, true }, + { 192456, true }, { 192472, true }, - { 192496, true }, - { 192515, true }, - { 192529, true }, - { 192537, true }, + { 192485, true }, + { 192500, true }, + { 192509, true }, + { 192519, true }, + { 192531, false }, { 192548, true }, - { 192562, true }, - { 192574, true }, - { 192583, true }, - { 192593, true }, - { 192613, true }, - { 192627, true }, - { 192640, true }, - { 192660, true }, - { 192678, true }, - { 192690, true }, - { 192705, true }, - { 192720, true }, + { 192566, true }, + { 192590, true }, + { 192614, true }, + { 192633, true }, + { 192647, true }, + { 192655, true }, + { 192666, true }, + { 192680, true }, + { 192692, true }, + { 192701, true }, + { 192711, true }, { 192731, true }, - { 192756, true }, - { 192771, false }, - { 192788, true }, - { 192800, false }, + { 192745, true }, + { 192758, true }, + { 192778, true }, + { 192796, true }, + { 192808, true }, { 192823, true }, - { 192842, true }, - { 192859, true }, - { 192876, true }, - { 192889, true }, - { 192900, true }, - { 192922, true }, - { 192945, true }, - { 192963, true }, - { 192984, true }, - { 193006, true }, - { 193027, true }, - { 193048, true }, - { 193058, false }, - { 193072, true }, - { 193089, true }, - { 193109, true }, - { 193126, true }, - { 193136, true }, - { 193149, true }, - { 193164, true }, - { 193182, true }, - { 193193, true }, - { 193210, true }, - { 193226, true }, - { 193238, true }, - { 193275, true }, - { 193294, true }, - { 193308, true }, - { 193323, true }, - { 193338, false }, - { 193350, true }, - { 193367, false }, - { 193382, true }, - { 193395, true }, - { 193416, false }, - { 193428, false }, - { 193445, true }, - { 193462, true }, - { 193479, true }, - { 193492, true }, - { 193508, true }, - { 193524, true }, - { 193540, true }, - { 193553, true }, - { 193571, true }, - { 193581, true }, - { 193592, true }, - { 193608, true }, - { 193618, true }, - { 193637, true }, + { 192838, true }, + { 192849, true }, + { 192874, true }, + { 192889, false }, + { 192906, true }, + { 192918, false }, + { 192941, true }, + { 192960, true }, + { 192977, true }, + { 192994, true }, + { 193007, true }, + { 193018, true }, + { 193040, true }, + { 193063, true }, + { 193081, true }, + { 193102, true }, + { 193124, true }, + { 193145, true }, + { 193166, true }, + { 193176, false }, + { 193190, true }, + { 193207, true }, + { 193227, true }, + { 193244, true }, + { 193254, true }, + { 193267, true }, + { 193282, true }, + { 193300, true }, + { 193311, true }, + { 193328, true }, + { 193344, true }, + { 193356, true }, + { 193393, true }, + { 193412, true }, + { 193426, true }, + { 193441, true }, + { 193456, false }, + { 193468, true }, + { 193485, false }, + { 193500, true }, + { 193513, true }, + { 193534, false }, + { 193546, false }, + { 193563, true }, + { 193580, true }, + { 193597, true }, + { 193610, true }, + { 193626, true }, + { 193642, true }, { 193650, true }, - { 193667, true }, - { 193681, true }, - { 193694, true }, - { 193709, true }, - { 193720, true }, - { 193740, true }, - { 193753, true }, - { 193766, true }, - { 193778, true }, - { 193797, true }, - { 193810, true }, - { 193825, true }, - { 193836, true }, - { 193847, true }, - { 193857, true }, - { 193867, true }, - { 193889, true }, - { 193909, true }, - { 193926, true }, - { 193944, true }, - { 193957, true }, - { 193970, true }, - { 193985, true }, - { 193994, true }, - { 194005, true }, - { 194020, true }, - { 194036, true }, - { 194058, true }, - { 194074, true }, - { 194090, true }, - { 194114, true }, - { 194129, true }, - { 194142, true }, - { 194161, true }, - { 194171, true }, - { 194185, true }, - { 194196, true }, - { 194213, true }, - { 194225, true }, - { 194238, true }, + { 193666, true }, + { 193679, true }, + { 193697, true }, + { 193707, true }, + { 193718, true }, + { 193734, true }, + { 193744, true }, + { 193763, true }, + { 193776, true }, + { 193793, true }, + { 193807, true }, + { 193820, true }, + { 193835, true }, + { 193846, true }, + { 193866, true }, + { 193879, true }, + { 193892, true }, + { 193904, true }, + { 193923, true }, + { 193936, true }, + { 193951, true }, + { 193962, true }, + { 193973, true }, + { 193983, true }, + { 193993, true }, + { 194015, true }, + { 194035, true }, + { 194052, true }, + { 194070, true }, + { 194083, true }, + { 194096, true }, + { 194111, true }, + { 194120, true }, + { 194131, true }, + { 194146, true }, + { 194162, true }, + { 194184, true }, + { 194200, true }, + { 194216, true }, + { 194240, true }, { 194255, true }, - { 194267, true }, - { 194284, true }, - { 194293, true }, - { 194313, true }, - { 194330, true }, - { 194345, true }, - { 194371, true }, - { 194389, true }, - { 194399, true }, - { 194416, true }, - { 194428, true }, - { 194445, true }, - { 194460, true }, - { 194479, true }, - { 194496, true }, - { 194513, true }, - { 194524, true }, - { 194536, true }, - { 194548, true }, - { 194558, true }, - { 194567, true }, - { 194580, true }, - { 194595, true }, + { 194268, true }, + { 194287, true }, + { 194297, true }, + { 194311, true }, + { 194322, true }, + { 194339, true }, + { 194351, true }, + { 194364, true }, + { 194381, true }, + { 194393, true }, + { 194410, true }, + { 194419, true }, + { 194439, true }, + { 194456, true }, + { 194471, true }, + { 194497, true }, + { 194515, true }, + { 194525, true }, + { 194542, true }, + { 194554, true }, + { 194571, true }, + { 194586, true }, { 194605, true }, - { 194617, true }, - { 194631, false }, - { 194640, true }, - { 194651, true }, - { 194668, true }, - { 194678, true }, - { 194688, true }, - { 194699, true }, - { 194708, true }, - { 194719, false }, - { 194732, true }, - { 194748, true }, - { 194760, true }, - { 194771, true }, - { 194785, false }, - { 194796, true }, - { 194819, true }, - { 194841, true }, - { 194849, true }, - { 194859, true }, - { 194871, true }, - { 194884, true }, - { 194892, true }, - { 194900, true }, - { 194915, true }, - { 194925, true }, - { 194941, true }, - { 194954, true }, - { 194963, true }, - { 194978, true }, + { 194622, true }, + { 194639, true }, + { 194650, true }, + { 194662, true }, + { 194674, true }, + { 194684, true }, + { 194693, true }, + { 194706, true }, + { 194721, true }, + { 194731, true }, + { 194743, true }, + { 194757, false }, + { 194766, false }, + { 194778, true }, + { 194789, true }, + { 194806, true }, + { 194816, true }, + { 194826, true }, + { 194837, true }, + { 194846, true }, + { 194857, false }, + { 194870, true }, + { 194886, true }, + { 194898, true }, + { 194909, true }, + { 194923, false }, + { 194934, true }, + { 194957, true }, + { 194979, true }, { 194987, true }, - { 194996, true }, - { 195005, true }, - { 195024, true }, - { 195037, true }, - { 195052, true }, - { 195074, true }, - { 195090, false }, - { 195102, true }, - { 195118, true }, - { 195131, true }, - { 195142, true }, - { 195154, true }, + { 194997, true }, + { 195009, true }, + { 195022, true }, + { 195030, true }, + { 195038, true }, + { 195053, true }, + { 195063, true }, + { 195079, true }, + { 195092, true }, + { 195101, true }, + { 195116, true }, + { 195125, true }, + { 195134, true }, + { 195143, true }, { 195162, true }, - { 195176, true }, - { 195193, true }, - { 195206, true }, - { 195222, true }, - { 195243, true }, - { 195262, true }, - { 195279, true }, - { 195295, true }, - { 195308, true }, - { 195319, true }, - { 195333, true }, - { 195353, true }, - { 195377, true }, + { 195175, true }, + { 195190, true }, + { 195212, true }, + { 195228, false }, + { 195240, true }, + { 195256, true }, + { 195269, true }, + { 195280, true }, + { 195292, true }, + { 195300, true }, + { 195314, true }, + { 195331, true }, + { 195344, true }, + { 195360, true }, + { 195381, true }, { 195400, true }, - { 195411, true }, - { 195433, false }, + { 195417, true }, + { 195433, true }, { 195446, true }, - { 195460, true }, - { 195474, false }, - { 195495, true }, - { 195505, true }, - { 195517, true }, - { 195529, true }, - { 195541, true }, - { 195560, true }, - { 195586, true }, - { 195599, true }, - { 195613, true }, - { 195630, true }, - { 195649, true }, - { 195666, true }, - { 195684, true }, - { 195699, true }, - { 195720, true }, - { 195734, true }, - { 195756, true }, - { 195775, true }, + { 195457, true }, + { 195471, true }, + { 195491, true }, + { 195515, true }, + { 195538, true }, + { 195549, true }, + { 195571, false }, + { 195584, true }, + { 195598, true }, + { 195612, false }, + { 195633, true }, + { 195643, true }, + { 195655, true }, + { 195667, true }, + { 195679, true }, + { 195698, true }, + { 195724, true }, + { 195737, true }, + { 195751, true }, + { 195768, true }, { 195787, true }, - { 195800, true }, - { 195812, true }, - { 195836, true }, - { 195846, true }, - { 195861, true }, - { 195878, true }, + { 195804, true }, + { 195822, true }, + { 195837, true }, + { 195858, true }, + { 195872, true }, { 195894, true }, - { 195912, true }, - { 195931, true }, - { 195948, true }, - { 195963, true }, - { 195979, true }, - { 196006, true }, - { 196020, true }, - { 196036, true }, - { 196051, true }, - { 196064, true }, - { 196073, true }, - { 196089, true }, - { 196104, true }, + { 195913, true }, + { 195925, true }, + { 195938, true }, + { 195950, true }, + { 195974, true }, + { 195984, true }, + { 195999, true }, + { 196016, true }, + { 196032, true }, + { 196050, true }, + { 196069, true }, + { 196086, true }, + { 196101, true }, { 196117, true }, - { 196130, true }, - { 196146, true }, + { 196144, true }, { 196158, true }, - { 196175, true }, - { 196190, true }, - { 196201, true }, - { 196213, true }, - { 196229, true }, - { 196252, true }, - { 196267, true }, - { 196277, true }, - { 196291, true }, - { 196300, true }, - { 196307, true }, - { 196321, true }, - { 196341, true }, - { 196352, true }, - { 196366, true }, - { 196379, false }, - { 196393, true }, - { 196401, true }, - { 196412, true }, - { 196430, true }, - { 196440, true }, - { 196457, true }, - { 196467, true }, - { 196478, true }, - { 196503, true }, - { 196517, true }, - { 196528, true }, + { 196174, true }, + { 196189, true }, + { 196202, true }, + { 196211, true }, + { 196227, true }, + { 196242, true }, + { 196255, true }, + { 196268, true }, + { 196284, true }, + { 196296, true }, + { 196313, true }, + { 196328, true }, + { 196339, true }, + { 196351, true }, + { 196367, true }, + { 196390, true }, + { 196405, true }, + { 196415, true }, + { 196429, true }, + { 196438, true }, + { 196445, true }, + { 196459, true }, + { 196479, true }, + { 196490, true }, + { 196504, true }, + { 196517, false }, + { 196531, true }, { 196539, true }, - { 196554, true }, - { 196569, true }, - { 196585, false }, - { 196596, true }, - { 196611, true }, - { 196626, false }, - { 196645, true }, - { 196656, true }, + { 196550, true }, + { 196568, true }, + { 196578, true }, + { 196595, true }, + { 196605, true }, + { 196616, true }, + { 196641, true }, + { 196655, true }, { 196666, true }, { 196677, true }, - { 196697, true }, - { 196708, true }, - { 196715, true }, - { 196727, true }, - { 196740, true }, - { 196758, false }, - { 196768, true }, - { 196777, true }, - { 196787, true }, - { 196798, true }, - { 196809, true }, - { 196821, true }, - { 196832, true }, - { 196840, true }, - { 196850, true }, - { 196867, true }, - { 196884, true }, - { 196893, true }, - { 196900, true }, - { 196919, true }, - { 196930, true }, - { 196949, false }, - { 196960, true }, - { 196977, true }, - { 196994, true }, - { 197007, true }, - { 197023, true }, - { 197034, true }, - { 197044, true }, - { 197055, true }, - { 197072, true }, - { 197089, false }, - { 197097, true }, - { 197106, false }, - { 197119, true }, - { 197130, false }, - { 197137, true }, - { 197147, true }, + { 196692, true }, + { 196707, true }, + { 196723, false }, + { 196734, true }, + { 196749, true }, + { 196764, false }, + { 196783, true }, + { 196794, true }, + { 196804, true }, + { 196815, true }, + { 196835, true }, + { 196846, true }, + { 196853, true }, + { 196865, true }, + { 196878, true }, + { 196896, false }, + { 196906, true }, + { 196915, true }, + { 196925, true }, + { 196936, true }, + { 196947, true }, + { 196959, true }, + { 196970, true }, + { 196978, true }, + { 196988, true }, + { 197005, true }, + { 197022, true }, + { 197031, true }, + { 197038, true }, + { 197057, true }, + { 197068, true }, + { 197087, false }, + { 197098, true }, + { 197115, true }, + { 197132, true }, + { 197145, true }, { 197161, true }, - { 197170, true }, - { 197184, true }, - { 197204, false }, - { 197216, false }, - { 197232, true }, - { 197244, true }, - { 197263, true }, - { 197273, true }, - { 197297, true }, - { 197305, true }, + { 197172, true }, + { 197182, true }, + { 197193, true }, + { 197210, true }, + { 197227, false }, + { 197235, true }, + { 197244, false }, + { 197257, true }, + { 197268, false }, + { 197275, true }, + { 197285, true }, + { 197299, true }, + { 197308, true }, { 197322, true }, - { 197338, true }, - { 197354, true }, - { 197367, true }, - { 197376, true }, - { 197388, true }, + { 197342, false }, + { 197354, false }, + { 197370, true }, + { 197382, true }, { 197401, true }, - { 197416, true }, - { 197430, true }, - { 197446, false }, - { 197461, true }, - { 197470, true }, - { 197490, true }, - { 197498, true }, - { 197512, true }, - { 197525, true }, - { 197536, true }, - { 197546, false }, - { 197556, true }, - { 197570, true }, - { 197582, true }, - { 197592, false }, - { 197605, true }, - { 197621, true }, - { 197643, true }, - { 197660, true }, - { 197673, true }, - { 197682, true }, - { 197691, true }, - { 197706, true }, + { 197411, true }, + { 197435, true }, + { 197443, true }, + { 197460, true }, + { 197476, true }, + { 197492, true }, + { 197505, true }, + { 197514, true }, + { 197526, true }, + { 197539, true }, + { 197554, true }, + { 197568, true }, + { 197584, false }, + { 197599, true }, + { 197608, true }, + { 197628, true }, + { 197636, true }, + { 197650, true }, + { 197663, true }, + { 197674, true }, + { 197684, false }, + { 197694, true }, + { 197708, true }, { 197720, true }, - { 197730, true }, - { 197740, true }, - { 197769, true }, - { 197790, true }, - { 197805, true }, - { 197819, true }, - { 197839, true }, - { 197855, true }, - { 197867, false }, - { 197883, true }, - { 197897, true }, - { 197912, true }, - { 197927, true }, - { 197941, true }, - { 197954, true }, - { 197965, true }, - { 197976, true }, - { 197992, true }, - { 198002, true }, - { 198026, false }, - { 198045, false }, - { 198057, true }, - { 198073, true }, - { 198101, true }, - { 198133, true }, - { 198148, true }, - { 198160, true }, - { 198171, true }, - { 198180, true }, - { 198194, false }, - { 198207, true }, - { 198225, true }, - { 198233, true }, - { 198247, true }, - { 198261, true }, - { 198273, true }, - { 198294, true }, + { 197730, false }, + { 197743, true }, + { 197759, true }, + { 197781, true }, + { 197798, true }, + { 197811, true }, + { 197820, true }, + { 197829, true }, + { 197844, true }, + { 197858, true }, + { 197868, true }, + { 197878, true }, + { 197907, true }, + { 197928, true }, + { 197943, true }, + { 197957, true }, + { 197977, true }, + { 197993, true }, + { 198005, false }, + { 198021, true }, + { 198035, true }, + { 198050, true }, + { 198065, true }, + { 198079, true }, + { 198092, true }, + { 198103, true }, + { 198114, true }, + { 198130, true }, + { 198140, true }, + { 198164, false }, + { 198183, false }, + { 198195, true }, + { 198211, true }, + { 198239, true }, + { 198271, true }, + { 198286, true }, + { 198298, true }, { 198309, true }, - { 198325, false }, - { 198333, false }, + { 198318, true }, + { 198332, false }, { 198345, true }, - { 198354, true }, - { 198364, true }, - { 198375, true }, - { 198387, true }, - { 198403, true }, - { 198419, true }, - { 198429, true }, - { 198440, true }, - { 198451, true }, - { 198463, true }, - { 198473, true }, - { 198482, true }, - { 198501, true }, - { 198529, true }, - { 198543, true }, + { 198363, true }, + { 198371, true }, + { 198385, true }, + { 198399, true }, + { 198411, true }, + { 198432, true }, + { 198447, true }, + { 198463, false }, + { 198471, false }, + { 198483, true }, + { 198492, true }, + { 198502, true }, + { 198513, true }, + { 198525, true }, + { 198541, true }, { 198557, true }, - { 198575, true }, - { 198592, true }, - { 198608, true }, - { 198619, true }, - { 198634, true }, - { 198647, false }, - { 198663, true }, - { 198679, true }, - { 198692, true }, - { 198710, true }, - { 198728, true }, - { 198742, true }, - { 198754, true }, - { 198769, true }, - { 198789, true }, - { 198808, true }, - { 198827, true }, - { 198840, true }, - { 198856, true }, - { 198869, true }, - { 198884, true }, - { 198900, true }, - { 198917, true }, - { 198933, true }, - { 198950, true }, - { 198963, true }, + { 198567, true }, + { 198578, true }, + { 198589, true }, + { 198601, true }, + { 198611, true }, + { 198620, true }, + { 198639, true }, + { 198667, true }, + { 198681, true }, + { 198695, true }, + { 198713, true }, + { 198730, true }, + { 198746, true }, + { 198757, true }, + { 198772, true }, + { 198785, false }, + { 198801, true }, + { 198817, true }, + { 198830, true }, + { 198848, true }, + { 198866, true }, + { 198880, true }, + { 198892, true }, + { 198907, true }, + { 198927, true }, + { 198946, true }, + { 198965, true }, { 198978, true }, - { 198997, true }, - { 199010, true }, - { 199026, true }, - { 199037, true }, - { 199050, true }, - { 199064, true }, - { 199078, false }, - { 199094, true }, - { 199113, true }, - { 199133, true }, - { 199153, true }, - { 199169, true }, - { 199184, true }, - { 199201, true }, - { 199222, true }, - { 199239, true }, - { 199257, false }, - { 199276, true }, - { 199287, true }, - { 199303, true }, - { 199317, true }, - { 199333, true }, - { 199346, true }, + { 198994, true }, + { 199007, true }, + { 199022, true }, + { 199038, true }, + { 199055, true }, + { 199071, true }, + { 199088, true }, + { 199101, true }, + { 199116, true }, + { 199135, true }, + { 199148, true }, + { 199164, true }, + { 199175, true }, + { 199188, true }, + { 199202, true }, + { 199216, false }, + { 199232, true }, + { 199251, true }, + { 199271, true }, + { 199291, true }, + { 199307, true }, + { 199322, true }, + { 199339, true }, { 199360, true }, - { 199373, true }, - { 199386, true }, - { 199402, true }, - { 199413, true }, - { 199422, true }, - { 199432, true }, - { 199443, true }, + { 199377, true }, + { 199395, false }, + { 199414, true }, + { 199425, true }, + { 199441, true }, { 199455, true }, - { 199469, true }, - { 199478, true }, - { 199495, true }, - { 199504, true }, - { 199517, true }, - { 199536, true }, - { 199557, true }, - { 199576, true }, - { 199593, false }, - { 199608, false }, - { 199624, false }, - { 199636, true }, - { 199656, true }, - { 199669, true }, - { 199689, true }, - { 199711, true }, - { 199734, true }, - { 199752, true }, - { 199768, true }, - { 199780, true }, - { 199793, true }, - { 199805, true }, - { 199819, true }, - { 199828, true }, - { 199842, true }, - { 199850, true }, - { 199868, true }, - { 199878, true }, - { 199898, true }, - { 199915, true }, - { 199935, true }, + { 199471, true }, + { 199484, true }, + { 199498, true }, + { 199511, true }, + { 199524, true }, + { 199540, true }, + { 199549, true }, + { 199559, true }, + { 199570, true }, + { 199582, true }, + { 199596, true }, + { 199605, true }, + { 199622, true }, + { 199631, true }, + { 199644, true }, + { 199663, true }, + { 199684, true }, + { 199703, true }, + { 199720, false }, + { 199735, false }, + { 199751, false }, + { 199763, true }, + { 199783, true }, + { 199796, true }, + { 199816, true }, + { 199838, true }, + { 199861, true }, + { 199879, true }, + { 199895, true }, + { 199907, true }, + { 199920, true }, + { 199932, true }, { 199946, true }, - { 199959, true }, - { 199974, true }, - { 199986, true }, - { 200002, true }, - { 200015, true }, - { 200032, true }, - { 200053, true }, - { 200061, true }, - { 200071, true }, - { 200094, true }, - { 200106, true }, - { 200115, true }, - { 200125, true }, - { 200138, true }, - { 200148, true }, - { 200163, true }, - { 200176, false }, - { 200186, true }, - { 200200, true }, - { 200220, true }, + { 199955, true }, + { 199969, true }, + { 199977, true }, + { 199995, true }, + { 200005, true }, + { 200025, true }, + { 200042, true }, + { 200062, true }, + { 200073, true }, + { 200086, true }, + { 200101, true }, + { 200113, true }, + { 200129, true }, + { 200142, true }, + { 200159, true }, + { 200180, true }, + { 200188, true }, + { 200198, true }, + { 200221, true }, { 200233, true }, - { 200253, false }, - { 200276, true }, - { 200289, true }, - { 200300, true }, - { 200311, true }, - { 200321, true }, - { 200346, true }, - { 200356, true }, - { 200370, true }, - { 200384, false }, - { 200399, true }, - { 200413, true }, + { 200242, true }, + { 200252, true }, + { 200265, true }, + { 200275, true }, + { 200290, true }, + { 200303, false }, + { 200313, true }, + { 200327, true }, + { 200347, true }, + { 200360, true }, + { 200380, false }, + { 200403, true }, + { 200416, true }, + { 200427, true }, { 200438, true }, - { 200452, true }, - { 200464, true }, - { 200476, true }, - { 200490, true }, - { 200500, false }, - { 200520, true }, - { 200530, true }, - { 200544, true }, - { 200554, true }, - { 200567, true }, - { 200582, true }, + { 200448, true }, + { 200473, true }, + { 200483, true }, + { 200497, true }, + { 200511, false }, + { 200526, true }, + { 200540, true }, + { 200565, true }, + { 200579, true }, { 200591, true }, - { 200601, true }, - { 200615, true }, - { 200624, false }, - { 200635, true }, - { 200646, true }, + { 200603, true }, + { 200617, true }, + { 200627, false }, + { 200647, true }, { 200657, true }, - { 200668, true }, - { 200678, false }, - { 200698, true }, - { 200713, true }, - { 200725, true }, - { 200737, true }, - { 200749, true }, - { 200768, true }, - { 200788, true }, - { 200798, true }, - { 200812, true }, - { 200827, true }, - { 200844, true }, - { 200859, true }, - { 200867, true }, - { 200888, false }, - { 200906, true }, - { 200918, true }, - { 200940, true }, - { 200956, true }, + { 200671, true }, + { 200681, true }, + { 200694, true }, + { 200709, true }, + { 200718, true }, + { 200728, true }, + { 200742, true }, + { 200751, false }, + { 200762, true }, + { 200773, true }, + { 200784, true }, + { 200795, true }, + { 200805, false }, + { 200825, true }, + { 200840, true }, + { 200852, true }, + { 200864, true }, + { 200876, true }, + { 200895, true }, + { 200915, true }, + { 200925, true }, + { 200939, true }, + { 200954, true }, { 200971, true }, - { 200982, true }, - { 201004, true }, - { 201018, true }, - { 201039, true }, - { 201053, true }, - { 201070, true }, - { 201089, true }, - { 201108, true }, - { 201121, true }, - { 201141, true }, - { 201157, true }, - { 201183, true }, - { 201204, true }, - { 201223, true }, - { 201245, true }, - { 201269, true }, - { 201285, true }, + { 200986, true }, + { 200994, true }, + { 201015, false }, + { 201033, true }, + { 201045, true }, + { 201067, true }, + { 201083, true }, + { 201098, true }, + { 201109, true }, + { 201131, true }, + { 201145, true }, + { 201166, true }, + { 201180, true }, + { 201197, true }, + { 201216, true }, + { 201235, true }, + { 201248, true }, + { 201268, true }, + { 201284, true }, { 201310, true }, - { 201336, true }, - { 201347, true }, - { 201371, true }, - { 201397, true }, - { 201415, true }, - { 201426, true }, - { 201448, true }, - { 201469, true }, - { 201486, true }, - { 201504, true }, - { 201514, true }, - { 201530, true }, - { 201552, true }, - { 201575, true }, - { 201587, true }, - { 201606, true }, - { 201624, true }, - { 201647, true }, - { 201660, true }, - { 201676, true }, - { 201694, true }, - { 201712, true }, - { 201738, true }, - { 201752, true }, + { 201331, true }, + { 201350, true }, + { 201372, true }, + { 201396, true }, + { 201412, true }, + { 201437, true }, + { 201463, true }, + { 201474, true }, + { 201498, true }, + { 201524, true }, + { 201542, true }, + { 201553, true }, + { 201575, false }, + { 201592, true }, + { 201609, true }, + { 201627, true }, + { 201637, true }, + { 201653, true }, + { 201675, true }, + { 201698, true }, + { 201710, true }, + { 201729, true }, + { 201747, true }, { 201770, true }, - { 201785, true }, - { 201802, true }, - { 201816, true }, - { 201843, true }, - { 201857, true }, + { 201783, true }, + { 201799, true }, + { 201817, true }, + { 201835, true }, + { 201861, true }, { 201875, true }, - { 201891, true }, - { 201907, true }, - { 201920, true }, - { 201940, true }, - { 201958, true }, - { 201977, true }, - { 201990, true }, - { 202026, true }, - { 202049, true }, - { 202069, true }, - { 202084, true }, - { 202101, true }, - { 202112, true }, - { 202130, true }, - { 202160, true }, - { 202176, true }, - { 202191, true }, - { 202206, true }, - { 202217, true }, - { 202231, true }, + { 201893, true }, + { 201908, true }, + { 201925, true }, + { 201939, true }, + { 201966, true }, + { 201980, true }, + { 201998, true }, + { 202014, true }, + { 202030, true }, + { 202043, true }, + { 202063, true }, + { 202081, true }, + { 202100, true }, + { 202113, true }, + { 202149, true }, + { 202172, true }, + { 202192, true }, + { 202207, true }, + { 202224, true }, + { 202235, true }, { 202253, true }, - { 202268, true }, { 202283, true }, - { 202296, true }, - { 202311, true }, - { 202324, true }, - { 202347, true }, - { 202356, true }, - { 202378, true }, - { 202388, true }, - { 202407, true }, - { 202431, true }, - { 202457, true }, - { 202475, true }, - { 202486, true }, - { 202503, true }, - { 202521, true }, - { 202537, true }, - { 202551, true }, - { 202564, true }, + { 202299, true }, + { 202314, true }, + { 202329, true }, + { 202340, true }, + { 202354, true }, + { 202376, true }, + { 202391, true }, + { 202406, true }, + { 202419, true }, + { 202434, true }, + { 202447, true }, + { 202470, true }, + { 202479, true }, + { 202501, true }, + { 202511, true }, + { 202530, true }, + { 202554, true }, { 202580, true }, - { 202599, true }, - { 202623, true }, - { 202636, true }, - { 202653, true }, - { 202664, true }, - { 202679, true }, - { 202701, true }, - { 202720, true }, - { 202740, true }, - { 202757, false }, - { 202772, true }, - { 202790, true }, - { 202812, true }, - { 202828, true }, - { 202840, true }, - { 202852, true }, - { 202864, true }, - { 202880, true }, - { 202899, true }, - { 202919, true }, - { 202939, true }, - { 202955, true }, - { 202974, true }, - { 203004, false }, - { 203018, true }, - { 203035, true }, - { 203056, true }, - { 203076, true }, - { 203090, true }, - { 203108, true }, - { 203125, true }, + { 202598, true }, + { 202609, true }, + { 202626, true }, + { 202644, true }, + { 202660, true }, + { 202674, true }, + { 202687, true }, + { 202703, true }, + { 202722, true }, + { 202746, true }, + { 202759, true }, + { 202776, true }, + { 202787, true }, + { 202802, true }, + { 202824, true }, + { 202843, true }, + { 202863, true }, + { 202880, false }, + { 202895, true }, + { 202913, true }, + { 202935, true }, + { 202951, true }, + { 202963, true }, + { 202975, true }, + { 202987, true }, + { 203003, true }, + { 203022, true }, + { 203042, true }, + { 203062, true }, + { 203078, true }, + { 203097, true }, + { 203127, false }, { 203141, true }, - { 203151, true }, - { 203162, true }, - { 203174, true }, - { 203193, true }, - { 203209, true }, - { 203229, true }, - { 203243, true }, - { 203256, true }, - { 203267, true }, - { 203288, true }, + { 203158, true }, + { 203179, true }, + { 203199, true }, + { 203213, true }, + { 203231, true }, + { 203248, true }, + { 203264, true }, + { 203274, true }, + { 203285, true }, + { 203297, true }, { 203316, true }, { 203332, true }, - { 203345, true }, - { 203370, true }, - { 203387, true }, - { 203404, false }, - { 203419, true }, - { 203444, true }, - { 203453, true }, - { 203463, true }, - { 203475, true }, - { 203494, true }, - { 203513, true }, - { 203530, true }, - { 203547, true }, - { 203563, false }, - { 203581, true }, + { 203352, true }, + { 203366, true }, + { 203379, true }, + { 203390, true }, + { 203411, true }, + { 203439, true }, + { 203455, true }, + { 203468, true }, + { 203493, true }, + { 203510, true }, + { 203527, false }, + { 203542, true }, + { 203567, true }, + { 203576, true }, + { 203586, true }, { 203598, true }, - { 203611, true }, - { 203631, true }, - { 203655, true }, - { 203673, true }, - { 203694, true }, - { 203709, true }, - { 203724, true }, - { 203736, true }, - { 203761, true }, - { 203774, true }, + { 203617, true }, + { 203636, true }, + { 203653, true }, + { 203670, true }, + { 203686, false }, + { 203704, true }, + { 203721, true }, + { 203734, true }, + { 203754, true }, + { 203778, true }, { 203796, true }, - { 203806, true }, - { 203823, true }, - { 203842, true }, - { 203855, true }, - { 203869, true }, - { 203882, true }, - { 203906, true }, - { 203928, true }, - { 203961, true }, - { 203976, true }, - { 203990, true }, - { 203999, true }, - { 204008, true }, - { 204022, true }, - { 204032, false }, - { 204046, true }, - { 204055, true }, - { 204066, true }, - { 204080, true }, - { 204091, true }, - { 204109, true }, - { 204124, true }, - { 204137, true }, - { 204147, true }, - { 204160, true }, - { 204179, true }, - { 204199, true }, - { 204222, true }, - { 204229, true }, - { 204245, true }, - { 204263, true }, - { 204284, true }, - { 204296, true }, - { 204326, true }, - { 204339, true }, - { 204349, true }, - { 204361, true }, - { 204375, true }, - { 204389, true }, - { 204400, true }, + { 203817, true }, + { 203832, true }, + { 203847, true }, + { 203859, true }, + { 203884, true }, + { 203897, true }, + { 203919, true }, + { 203929, true }, + { 203946, true }, + { 203965, true }, + { 203978, true }, + { 203992, true }, + { 204005, true }, + { 204029, true }, + { 204051, true }, + { 204084, true }, + { 204099, true }, + { 204113, true }, + { 204122, true }, + { 204131, true }, + { 204145, true }, + { 204155, false }, + { 204169, true }, + { 204178, true }, + { 204189, true }, + { 204203, true }, + { 204214, true }, + { 204232, true }, + { 204247, true }, + { 204260, true }, + { 204270, true }, + { 204283, true }, + { 204302, true }, + { 204322, true }, + { 204345, true }, + { 204352, true }, + { 204368, true }, + { 204386, true }, + { 204407, true }, { 204419, true }, - { 204434, true }, - { 204446, true }, - { 204458, true }, - { 204469, true }, + { 204449, true }, + { 204462, true }, + { 204472, true }, { 204484, true }, - { 204496, true }, + { 204498, true }, { 204512, true }, - { 204527, true }, - { 204543, true }, - { 204552, true }, - { 204566, true }, - { 204577, false }, + { 204523, true }, + { 204542, true }, + { 204557, true }, + { 204569, true }, + { 204581, true }, { 204592, true }, - { 204606, true }, - { 204622, true }, + { 204607, true }, + { 204619, true }, { 204635, true }, - { 204655, true }, - { 204668, false }, - { 204688, true }, - { 204701, true }, + { 204650, true }, + { 204666, true }, + { 204675, true }, + { 204689, true }, + { 204700, false }, { 204715, true }, - { 204726, true }, - { 204743, true }, - { 204757, true }, - { 204769, true }, - { 204783, true }, - { 204795, true }, - { 204807, true }, - { 204819, true }, - { 204831, true }, - { 204841, true }, - { 204854, true }, - { 204871, true }, - { 204898, true }, - { 204911, true }, - { 204929, true }, - { 204937, true }, - { 204949, true }, - { 204962, true }, - { 204989, true }, - { 204998, true }, - { 205007, true }, - { 205025, true }, - { 205032, true }, - { 205059, true }, - { 205067, true }, - { 205077, true }, - { 205086, true }, - { 205094, true }, - { 205107, true }, - { 205116, true }, - { 205128, true }, - { 205141, true }, - { 205150, true }, - { 205160, true }, - { 205170, true }, - { 205180, true }, + { 204729, true }, + { 204745, true }, + { 204758, true }, + { 204778, true }, + { 204791, false }, + { 204811, true }, + { 204824, true }, + { 204838, true }, + { 204849, true }, + { 204866, true }, + { 204880, true }, + { 204892, true }, + { 204906, true }, + { 204918, true }, + { 204930, true }, + { 204942, true }, + { 204954, true }, + { 204964, true }, + { 204977, true }, + { 204994, true }, + { 205021, true }, + { 205034, true }, + { 205052, true }, + { 205060, true }, + { 205072, true }, + { 205085, true }, + { 205112, true }, + { 205121, true }, + { 205130, true }, + { 205148, true }, + { 205155, true }, + { 205182, true }, { 205190, true }, { 205200, true }, { 205209, true }, - { 205216, true }, - { 205232, true }, - { 205249, true }, - { 205256, true }, - { 205270, true }, - { 205287, true }, - { 205299, true }, - { 205316, true }, - { 205324, true }, - { 205331, true }, - { 205340, true }, - { 205349, true }, - { 205361, true }, - { 205375, true }, - { 205392, true }, - { 205408, true }, - { 205424, true }, - { 205443, true }, - { 205461, true }, - { 205476, true }, - { 205494, true }, - { 205511, true }, - { 205521, true }, - { 205533, true }, - { 205551, true }, - { 205568, true }, - { 205583, true }, - { 205598, true }, - { 205610, true }, - { 205624, true }, - { 205632, true }, - { 205642, false }, - { 205667, true }, - { 205680, true }, - { 205690, true }, - { 205705, true }, - { 205717, true }, - { 205731, true }, - { 205740, true }, - { 205749, false }, - { 205761, true }, - { 205774, false }, - { 205807, true }, - { 205822, true }, - { 205833, true }, - { 205856, true }, - { 205869, true }, - { 205880, true }, - { 205894, true }, - { 205914, true }, - { 205927, true }, - { 205941, true }, - { 205954, true }, - { 205968, true }, - { 205986, true }, - { 206000, true }, - { 206016, true }, - { 206031, true }, - { 206053, true }, - { 206063, true }, - { 206075, true }, + { 205217, true }, + { 205230, true }, + { 205239, true }, + { 205251, true }, + { 205264, true }, + { 205273, true }, + { 205283, true }, + { 205293, true }, + { 205303, true }, + { 205313, true }, + { 205323, true }, + { 205332, true }, + { 205339, true }, + { 205355, true }, + { 205372, true }, + { 205379, true }, + { 205393, true }, + { 205410, true }, + { 205422, true }, + { 205439, true }, + { 205447, true }, + { 205454, true }, + { 205463, true }, + { 205472, true }, + { 205484, true }, + { 205498, true }, + { 205515, true }, + { 205531, true }, + { 205547, true }, + { 205566, true }, + { 205584, true }, + { 205599, true }, + { 205617, true }, + { 205634, true }, + { 205644, true }, + { 205656, true }, + { 205674, true }, + { 205691, true }, + { 205706, true }, + { 205721, true }, + { 205733, true }, + { 205747, true }, + { 205755, true }, + { 205765, false }, + { 205790, true }, + { 205803, true }, + { 205813, true }, + { 205828, true }, + { 205840, true }, + { 205854, true }, + { 205863, true }, + { 205872, false }, + { 205884, true }, + { 205897, false }, + { 205930, true }, + { 205945, true }, + { 205956, true }, + { 205979, true }, + { 205992, true }, + { 206003, true }, + { 206017, true }, + { 206037, true }, + { 206050, true }, + { 206064, true }, + { 206077, true }, { 206091, true }, - { 206103, true }, - { 206113, true }, - { 206126, true }, - { 206140, true }, - { 206151, true }, - { 206159, true }, - { 206171, false }, - { 206179, true }, - { 206190, true }, - { 206206, true }, - { 206217, true }, - { 206229, false }, - { 206243, true }, - { 206256, true }, - { 206267, true }, - { 206277, true }, - { 206291, true }, - { 206310, true }, - { 206321, true }, - { 206335, true }, - { 206346, true }, - { 206357, true }, - { 206368, true }, + { 206109, true }, + { 206123, true }, + { 206139, true }, + { 206154, true }, + { 206176, true }, + { 206186, true }, + { 206198, true }, + { 206214, true }, + { 206226, true }, + { 206236, true }, + { 206249, true }, + { 206263, true }, + { 206274, true }, + { 206282, true }, + { 206294, false }, + { 206302, true }, + { 206313, true }, + { 206329, true }, + { 206340, true }, + { 206352, false }, + { 206366, true }, { 206379, true }, - { 206390, true }, - { 206404, true }, - { 206416, true }, - { 206431, true }, - { 206445, true }, - { 206460, true }, - { 206473, true }, - { 206489, true }, - { 206498, true }, - { 206507, true }, - { 206521, true }, - { 206532, false }, - { 206548, true }, - { 206559, true }, - { 206570, true }, - { 206580, true }, - { 206596, false }, + { 206389, true }, + { 206403, true }, + { 206422, true }, + { 206433, true }, + { 206447, true }, + { 206458, true }, + { 206469, true }, + { 206480, true }, + { 206491, true }, + { 206502, true }, + { 206516, true }, + { 206528, true }, + { 206543, true }, + { 206557, true }, + { 206572, true }, + { 206585, true }, + { 206601, true }, { 206610, true }, - { 206623, true }, - { 206632, true }, - { 206642, true }, - { 206655, true }, - { 206665, true }, - { 206679, true }, - { 206689, true }, - { 206702, true }, - { 206716, true }, - { 206728, true }, - { 206742, true }, - { 206763, true }, - { 206778, true }, - { 206792, true }, - { 206804, true }, - { 206819, false }, - { 206838, true }, - { 206848, true }, - { 206860, true }, - { 206870, true }, - { 206882, true }, - { 206899, true }, - { 206918, true }, - { 206927, false }, - { 206942, true }, + { 206619, true }, + { 206633, true }, + { 206644, false }, + { 206660, true }, + { 206671, true }, + { 206682, true }, + { 206692, true }, + { 206708, false }, + { 206722, true }, + { 206735, true }, + { 206744, true }, + { 206754, true }, + { 206767, true }, + { 206777, true }, + { 206791, true }, + { 206801, true }, + { 206814, true }, + { 206828, true }, + { 206840, true }, + { 206854, true }, + { 206875, true }, + { 206890, true }, + { 206904, true }, + { 206916, true }, + { 206931, false }, + { 206950, true }, { 206960, true }, - { 206976, false }, - { 206988, true }, - { 207014, true }, - { 207025, true }, - { 207046, true }, - { 207061, true }, - { 207079, true }, - { 207096, true }, - { 207109, true }, - { 207125, true }, - { 207140, true }, - { 207160, true }, - { 207171, true }, - { 207186, true }, - { 207198, true }, - { 207209, true }, - { 207222, true }, - { 207240, true }, - { 207260, true }, - { 207279, true }, - { 207307, true }, + { 206972, true }, + { 206982, true }, + { 206994, true }, + { 207011, true }, + { 207030, true }, + { 207039, false }, + { 207054, true }, + { 207072, true }, + { 207088, false }, + { 207100, true }, + { 207126, true }, + { 207137, true }, + { 207158, true }, + { 207173, true }, + { 207191, true }, + { 207208, true }, + { 207221, true }, + { 207237, true }, + { 207252, true }, + { 207272, true }, + { 207283, true }, + { 207298, true }, + { 207310, true }, { 207321, true }, - { 207340, true }, - { 207361, true }, - { 207370, true }, - { 207394, false }, - { 207413, true }, - { 207427, true }, - { 207445, true }, - { 207460, true }, - { 207477, true }, - { 207497, true }, - { 207511, true }, - { 207521, true }, + { 207334, true }, + { 207352, true }, + { 207372, true }, + { 207391, true }, + { 207419, true }, + { 207433, true }, + { 207452, true }, + { 207473, true }, + { 207482, true }, + { 207506, false }, + { 207525, true }, { 207539, true }, - { 207552, true }, - { 207573, true }, - { 207585, true }, - { 207596, true }, - { 207611, true }, - { 207632, true }, + { 207557, true }, + { 207572, true }, + { 207589, true }, + { 207609, true }, + { 207623, true }, + { 207633, true }, { 207651, true }, - { 207658, true }, - { 207670, true }, + { 207664, true }, { 207685, true }, - { 207701, true }, - { 207718, true }, - { 207740, true }, - { 207750, true }, - { 207762, true }, - { 207774, true }, - { 207791, true }, - { 207800, false }, - { 207813, false }, - { 207833, true }, - { 207843, true }, - { 207855, true }, - { 207872, true }, - { 207888, true }, + { 207697, true }, + { 207708, true }, + { 207723, true }, + { 207744, true }, + { 207763, true }, + { 207770, true }, + { 207782, true }, + { 207797, true }, + { 207813, true }, + { 207830, true }, + { 207852, true }, + { 207862, true }, + { 207874, true }, + { 207886, true }, { 207903, true }, - { 207921, true }, - { 207934, true }, - { 207949, true }, - { 207962, true }, - { 207978, true }, - { 207996, true }, - { 208008, true }, - { 208027, true }, - { 208041, true }, - { 208054, true }, - { 208065, true }, - { 208085, true }, - { 208096, true }, - { 208115, true }, - { 208134, true }, - { 208144, true }, - { 208156, true }, - { 208176, true }, - { 208193, true }, - { 208206, true }, - { 208219, true }, - { 208232, true }, - { 208245, true }, - { 208258, true }, - { 208269, true }, - { 208281, true }, - { 208296, true }, - { 208306, true }, - { 208319, true }, - { 208337, true }, - { 208355, true }, - { 208374, true }, - { 208386, true }, - { 208399, true }, - { 208417, true }, - { 208439, true }, - { 208452, true }, - { 208469, true }, - { 208485, true }, - { 208513, true }, - { 208538, true }, - { 208570, true }, - { 208589, true }, - { 208609, true }, - { 208624, true }, - { 208644, true }, - { 208657, true }, - { 208673, true }, - { 208690, true }, - { 208707, true }, - { 208719, true }, - { 208732, true }, - { 208745, true }, - { 208770, true }, - { 208788, true }, + { 207912, false }, + { 207925, false }, + { 207945, true }, + { 207955, true }, + { 207967, true }, + { 207984, true }, + { 208000, true }, + { 208015, true }, + { 208033, true }, + { 208046, true }, + { 208061, true }, + { 208074, true }, + { 208090, true }, + { 208108, true }, + { 208120, true }, + { 208139, true }, + { 208153, true }, + { 208166, true }, + { 208177, true }, + { 208197, true }, + { 208208, true }, + { 208227, true }, + { 208246, true }, + { 208256, true }, + { 208268, true }, + { 208288, true }, + { 208305, true }, + { 208318, true }, + { 208331, true }, + { 208344, true }, + { 208357, true }, + { 208370, true }, + { 208381, true }, + { 208393, true }, + { 208408, true }, + { 208418, true }, + { 208431, true }, + { 208449, true }, + { 208467, true }, + { 208486, true }, + { 208498, true }, + { 208511, true }, + { 208529, true }, + { 208551, true }, + { 208564, true }, + { 208581, true }, + { 208597, true }, + { 208625, true }, + { 208650, true }, + { 208682, true }, + { 208701, true }, + { 208721, true }, + { 208736, true }, + { 208756, true }, + { 208769, true }, + { 208785, true }, { 208802, true }, - { 208823, true }, - { 208835, true }, - { 208850, true }, - { 208867, true }, - { 208879, true }, - { 208894, true }, - { 208905, true }, - { 208919, true }, - { 208938, true }, - { 208955, true }, - { 208970, true }, - { 208980, true }, - { 208992, true }, - { 209012, true }, - { 209026, true }, - { 209036, true }, - { 209049, true }, - { 209068, true }, + { 208819, true }, + { 208831, true }, + { 208844, true }, + { 208857, true }, + { 208882, true }, + { 208900, true }, + { 208914, true }, + { 208935, true }, + { 208947, true }, + { 208962, true }, + { 208979, true }, + { 208991, true }, + { 209006, true }, + { 209017, true }, + { 209031, true }, + { 209050, true }, + { 209067, true }, { 209082, true }, - { 209096, true }, - { 209110, true }, - { 209120, true }, - { 209132, true }, - { 209150, false }, - { 209158, true }, - { 209174, true }, - { 209186, true }, - { 209198, true }, - { 209209, true }, - { 209221, true }, - { 209230, true }, - { 209240, true }, - { 209254, true }, - { 209268, true }, - { 209282, true }, - { 209300, true }, - { 209311, true }, - { 209319, true }, - { 209335, true }, - { 209350, true }, - { 209368, true }, - { 209388, true }, - { 209401, true }, - { 209409, true }, - { 209430, true }, - { 209441, true }, - { 209456, false }, - { 209474, false }, - { 209495, true }, - { 209504, true }, - { 209527, true }, - { 209550, true }, - { 209567, true }, - { 209579, true }, - { 209600, true }, - { 209626, true }, - { 209643, true }, - { 209660, true }, - { 209680, true }, - { 209693, true }, - { 209707, true }, - { 209729, true }, - { 209746, true }, - { 209766, true }, - { 209791, true }, - { 209816, true }, - { 209842, true }, + { 209092, true }, + { 209104, true }, + { 209124, true }, + { 209138, true }, + { 209148, true }, + { 209161, true }, + { 209180, true }, + { 209194, true }, + { 209208, true }, + { 209222, true }, + { 209232, true }, + { 209244, true }, + { 209262, false }, + { 209270, true }, + { 209286, true }, + { 209298, true }, + { 209310, true }, + { 209321, true }, + { 209333, true }, + { 209342, true }, + { 209352, true }, + { 209366, true }, + { 209380, true }, + { 209394, true }, + { 209412, true }, + { 209423, true }, + { 209431, true }, + { 209447, true }, + { 209462, true }, + { 209480, true }, + { 209500, true }, + { 209513, true }, + { 209521, true }, + { 209542, true }, + { 209553, true }, + { 209568, false }, + { 209586, false }, + { 209607, true }, + { 209616, true }, + { 209639, true }, + { 209662, true }, + { 209679, true }, + { 209691, true }, + { 209712, true }, + { 209738, true }, + { 209755, true }, + { 209772, true }, + { 209792, true }, + { 209805, true }, + { 209819, true }, + { 209841, true }, { 209858, true }, - { 209869, true }, - { 209884, true }, - { 209893, true }, - { 209904, true }, - { 209918, true }, - { 209927, true }, - { 209940, true }, - { 209962, true }, - { 209974, true }, - { 209982, true }, + { 209878, true }, + { 209903, true }, + { 209928, true }, + { 209954, true }, + { 209970, true }, + { 209981, true }, { 209996, true }, - { 210004, true }, - { 210015, true }, - { 210025, true }, - { 210035, true }, - { 210042, true }, - { 210053, true }, - { 210065, true }, - { 210075, true }, - { 210082, true }, + { 210005, true }, + { 210016, true }, + { 210030, true }, + { 210039, true }, + { 210052, true }, + { 210074, true }, + { 210086, true }, { 210094, true }, - { 210107, true }, + { 210108, true }, { 210116, true }, - { 210126, true }, - { 210136, true }, + { 210127, true }, + { 210137, true }, { 210147, true }, - { 210158, true }, - { 210166, true }, - { 210179, true }, - { 210191, true }, - { 210202, true }, - { 210216, true }, - { 210242, false }, - { 210256, true }, - { 210272, true }, - { 210288, true }, - { 210301, true }, - { 210313, true }, - { 210326, true }, - { 210338, true }, - { 210359, true }, - { 210371, true }, - { 210381, true }, - { 210403, true }, - { 210434, true }, - { 210451, true }, - { 210464, true }, - { 210475, false }, - { 210486, true }, - { 210496, true }, - { 210508, true }, - { 210520, true }, - { 210534, true }, - { 210545, false }, - { 210558, false }, - { 210578, true }, - { 210588, true }, - { 210596, false }, - { 210605, true }, - { 210618, true }, - { 210676, true }, - { 210722, true }, - { 210776, true }, - { 210823, true }, - { 210872, true }, - { 210917, true }, - { 210967, true }, - { 211021, true }, - { 211067, true }, - { 211114, true }, - { 211168, true }, - { 211195, true }, - { 211228, true }, - { 211241, true }, - { 211254, true }, - { 211270, true }, - { 211293, true }, - { 211309, true }, - { 211322, true }, - { 211338, true }, - { 211348, true }, - { 211359, false }, - { 211371, true }, - { 211388, true }, + { 210154, true }, + { 210165, true }, + { 210177, true }, + { 210187, true }, + { 210194, true }, + { 210206, true }, + { 210219, true }, + { 210228, true }, + { 210238, true }, + { 210248, true }, + { 210259, true }, + { 210270, true }, + { 210278, true }, + { 210291, true }, + { 210303, true }, + { 210314, true }, + { 210328, true }, + { 210354, false }, + { 210368, true }, + { 210384, true }, + { 210400, true }, + { 210413, true }, + { 210425, true }, + { 210438, true }, + { 210450, true }, + { 210471, true }, + { 210483, true }, + { 210493, true }, + { 210515, true }, + { 210546, true }, + { 210563, true }, + { 210576, true }, + { 210587, false }, + { 210598, true }, + { 210608, true }, + { 210620, true }, + { 210632, true }, + { 210646, true }, + { 210657, false }, + { 210670, false }, + { 210690, true }, + { 210700, true }, + { 210708, false }, + { 210717, true }, + { 210730, true }, + { 210788, true }, + { 210834, true }, + { 210888, true }, + { 210935, true }, + { 210984, true }, + { 211029, true }, + { 211079, true }, + { 211133, true }, + { 211179, true }, + { 211226, true }, + { 211280, true }, + { 211307, true }, + { 211340, true }, + { 211353, true }, + { 211366, true }, + { 211382, true }, { 211405, true }, - { 211423, true }, - { 211437, true }, - { 211455, true }, - { 211471, true }, - { 211482, true }, - { 211493, true }, - { 211501, true }, - { 211511, true }, - { 211518, true }, - { 211527, true }, + { 211421, true }, + { 211434, true }, + { 211450, true }, + { 211460, true }, + { 211471, false }, + { 211483, true }, + { 211500, true }, + { 211517, true }, { 211535, true }, - { 211545, true }, - { 211552, true }, - { 211561, true }, - { 211579, true }, - { 211595, true }, - { 211614, true }, - { 211627, true }, - { 211641, true }, - { 211653, true }, - { 211667, true }, - { 211682, true }, - { 211694, true }, + { 211549, true }, + { 211567, true }, + { 211583, true }, + { 211594, true }, + { 211605, true }, + { 211613, true }, + { 211623, true }, + { 211630, true }, + { 211639, true }, + { 211647, true }, + { 211657, true }, + { 211664, true }, + { 211673, true }, + { 211691, true }, { 211707, true }, - { 211718, true }, + { 211726, true }, { 211739, true }, - { 211749, true }, - { 211758, true }, - { 211767, true }, - { 211774, true }, - { 211781, true }, - { 211805, true }, + { 211753, true }, + { 211765, true }, + { 211779, true }, + { 211794, true }, + { 211806, true }, { 211819, true }, - { 211829, true }, - { 211846, false }, + { 211830, true }, + { 211851, true }, { 211861, true }, - { 211875, true }, - { 211887, true }, - { 211901, true }, - { 211918, true }, - { 211929, true }, + { 211870, true }, + { 211879, true }, + { 211886, true }, + { 211893, true }, + { 211917, true }, + { 211931, true }, { 211941, true }, - { 211953, true }, - { 211964, true }, - { 211979, true }, - { 211989, true }, - { 212008, true }, - { 212020, true }, - { 212027, true }, - { 212043, true }, - { 212054, true }, - { 212069, true }, - { 212092, true }, - { 212099, true }, - { 212109, true }, + { 211958, false }, + { 211973, true }, + { 211987, true }, + { 211999, true }, + { 212013, true }, + { 212030, true }, + { 212041, true }, + { 212053, true }, + { 212065, true }, + { 212076, true }, + { 212091, true }, + { 212101, true }, { 212120, true }, - { 212130, true }, - { 212142, true }, - { 212158, true }, - { 212165, true }, - { 212172, true }, - { 212184, true }, - { 212195, true }, - { 212205, true }, - { 212217, true }, - { 212227, false }, - { 212247, true }, + { 212132, true }, + { 212139, true }, + { 212155, true }, + { 212166, true }, + { 212181, true }, + { 212204, true }, + { 212211, true }, + { 212221, true }, + { 212232, true }, + { 212242, true }, + { 212254, true }, { 212270, true }, - { 212294, true }, - { 212304, false }, - { 212311, true }, - { 212324, true }, - { 212338, true }, - { 212352, true }, - { 212365, true }, - { 212376, true }, - { 212392, false }, - { 212413, true }, + { 212277, true }, + { 212284, true }, + { 212296, true }, + { 212307, true }, + { 212317, true }, + { 212329, true }, + { 212339, false }, + { 212359, true }, + { 212382, true }, + { 212406, true }, + { 212416, false }, { 212423, true }, - { 212434, true }, - { 212449, true }, - { 212463, true }, - { 212474, true }, + { 212436, true }, + { 212450, true }, + { 212464, true }, + { 212477, true }, { 212488, true }, - { 212502, true }, - { 212511, true }, - { 212522, true }, - { 212537, true }, - { 212550, true }, - { 212565, true }, - { 212581, true }, - { 212595, true }, - { 212610, true }, - { 212624, true }, - { 212640, true }, - { 212656, true }, - { 212670, true }, - { 212684, true }, - { 212700, true }, - { 212716, true }, - { 212734, true }, + { 212504, false }, + { 212525, true }, + { 212535, true }, + { 212546, true }, + { 212561, true }, + { 212575, true }, + { 212586, true }, + { 212600, true }, + { 212614, true }, + { 212623, true }, + { 212634, true }, + { 212649, true }, + { 212662, true }, + { 212677, true }, + { 212693, true }, + { 212707, true }, + { 212722, true }, + { 212736, true }, { 212752, true }, - { 212772, true }, - { 212791, true }, - { 212807, true }, - { 212822, true }, - { 212836, true }, - { 212856, true }, - { 212872, true }, - { 212887, true }, - { 212901, true }, - { 212932, true }, + { 212768, true }, + { 212782, true }, + { 212796, true }, + { 212812, true }, + { 212828, true }, + { 212846, true }, + { 212864, true }, + { 212884, true }, + { 212903, true }, + { 212919, true }, + { 212934, true }, { 212948, true }, - { 212959, true }, - { 212969, false }, - { 212993, true }, - { 213007, true }, - { 213021, true }, - { 213031, true }, - { 213048, true }, - { 213061, true }, - { 213074, true }, - { 213091, true }, - { 213108, false }, - { 213125, true }, - { 213138, true }, - { 213155, true }, - { 213176, true }, - { 213189, true }, - { 213202, true }, - { 213222, true }, - { 213240, true }, + { 212968, true }, + { 212984, true }, + { 212999, true }, + { 213013, true }, + { 213044, true }, + { 213060, true }, + { 213071, true }, + { 213081, false }, + { 213105, true }, + { 213119, true }, + { 213133, true }, + { 213143, true }, + { 213160, true }, + { 213173, true }, + { 213186, true }, + { 213203, true }, + { 213220, false }, + { 213237, true }, { 213250, true }, - { 213263, true }, - { 213277, true }, - { 213291, false }, - { 213302, true }, - { 213319, true }, - { 213333, true }, + { 213267, true }, + { 213288, true }, + { 213301, true }, + { 213314, true }, + { 213334, true }, { 213352, true }, + { 213362, true }, { 213375, true }, - { 213403, true }, - { 213419, true }, + { 213389, true }, + { 213403, false }, + { 213414, true }, { 213431, true }, - { 213445, false }, - { 213458, true }, - { 213472, true }, - { 213482, true }, - { 213491, true }, - { 213503, true }, - { 213516, true }, - { 213532, true }, - { 213542, true }, - { 213557, true }, - { 213565, true }, - { 213576, true }, - { 213591, true }, - { 213608, true }, + { 213445, true }, + { 213464, true }, + { 213487, true }, + { 213515, true }, + { 213531, true }, + { 213543, true }, + { 213557, false }, + { 213570, true }, + { 213584, true }, + { 213594, true }, + { 213603, true }, { 213615, true }, - { 213625, true }, - { 213635, true }, - { 213656, true }, - { 213672, true }, - { 213691, true }, - { 213711, true }, - { 213726, true }, - { 213734, true }, - { 213753, true }, - { 213764, true }, - { 213780, false }, - { 213788, true }, - { 213803, true }, - { 213811, true }, + { 213628, true }, + { 213644, true }, + { 213654, true }, + { 213669, true }, + { 213677, true }, + { 213688, true }, + { 213703, true }, + { 213720, true }, + { 213727, true }, + { 213737, true }, + { 213747, true }, + { 213768, true }, + { 213787, true }, + { 213807, true }, { 213822, true }, - { 213835, true }, - { 213846, true }, - { 213861, false }, - { 213881, true }, - { 213896, true }, + { 213830, true }, + { 213849, true }, + { 213860, true }, + { 213876, false }, + { 213884, true }, + { 213899, true }, + { 213907, true }, { 213918, true }, - { 213928, true }, - { 213943, true }, - { 213956, true }, - { 213967, true }, + { 213931, true }, + { 213942, true }, + { 213957, false }, { 213977, true }, - { 213989, true }, - { 214013, true }, - { 214026, true }, + { 213992, true }, + { 214014, true }, + { 214024, true }, { 214039, true }, - { 214051, true }, - { 214064, true }, - { 214078, true }, - { 214094, true }, - { 214110, true }, - { 214126, true }, - { 214145, true }, - { 214165, true }, - { 214176, true }, - { 214186, true }, - { 214197, true }, - { 214205, true }, - { 214218, true }, - { 214228, true }, - { 214242, true }, - { 214257, true }, - { 214267, true }, - { 214285, true }, - { 214299, true }, - { 214311, true }, - { 214338, false }, - { 214347, true }, - { 214360, false }, - { 214383, true }, - { 214405, true }, - { 214416, true }, - { 214429, true }, - { 214436, true }, + { 214052, true }, + { 214063, true }, + { 214073, true }, + { 214085, true }, + { 214109, true }, + { 214122, true }, + { 214135, true }, + { 214147, true }, + { 214160, true }, + { 214174, true }, + { 214190, true }, + { 214206, true }, + { 214222, true }, + { 214241, true }, + { 214261, true }, + { 214272, true }, + { 214282, true }, + { 214293, true }, + { 214301, true }, + { 214314, true }, + { 214324, true }, + { 214338, true }, + { 214353, true }, + { 214363, true }, + { 214381, true }, + { 214395, true }, + { 214407, true }, + { 214434, false }, { 214443, true }, - { 214454, true }, - { 214470, true }, - { 214482, true }, - { 214495, true }, - { 214507, true }, - { 214517, true }, - { 214534, true }, - { 214549, true }, - { 214558, true }, - { 214569, true }, - { 214580, true }, - { 214598, true }, - { 214612, true }, - { 214624, false }, - { 214633, true }, - { 214643, true }, - { 214655, true }, - { 214667, true }, - { 214680, true }, - { 214696, true }, - { 214715, true }, - { 214734, true }, - { 214753, true }, - { 214768, true }, - { 214778, true }, - { 214796, true }, - { 214808, true }, - { 214827, false }, - { 214842, true }, - { 214854, true }, - { 214869, true }, - { 214878, true }, - { 214889, false }, - { 214899, true }, - { 214905, true }, - { 214914, true }, - { 214923, true }, - { 214931, true }, - { 214950, true }, + { 214456, false }, + { 214479, true }, + { 214501, true }, + { 214512, true }, + { 214525, true }, + { 214532, true }, + { 214539, true }, + { 214550, true }, + { 214566, true }, + { 214578, true }, + { 214591, true }, + { 214603, true }, + { 214613, true }, + { 214630, true }, + { 214645, true }, + { 214654, true }, + { 214665, true }, + { 214683, true }, + { 214697, true }, + { 214709, false }, + { 214718, true }, + { 214728, true }, + { 214740, true }, + { 214752, true }, + { 214765, true }, + { 214781, true }, + { 214800, true }, + { 214819, true }, + { 214838, true }, + { 214853, true }, + { 214863, true }, + { 214881, true }, + { 214893, true }, + { 214912, false }, + { 214927, true }, + { 214939, true }, + { 214954, true }, { 214963, true }, - { 214972, true }, - { 214986, true }, - { 215004, true }, + { 214974, false }, + { 214984, true }, + { 214990, true }, + { 214999, true }, + { 215008, true }, { 215016, true }, - { 215026, true }, - { 215050, true }, - { 215073, true }, - { 215093, true }, - { 215106, true }, - { 215122, true }, - { 215134, true }, - { 215148, true }, - { 215167, true }, - { 215177, true }, - { 215199, true }, - { 215212, true }, - { 215221, true }, - { 215232, true }, - { 215245, true }, - { 215256, true }, - { 215270, true }, - { 215285, true }, - { 215299, true }, - { 215314, true }, - { 215337, false }, - { 215350, true }, - { 215362, true }, - { 215377, true }, - { 215389, true }, + { 215035, true }, + { 215048, true }, + { 215057, true }, + { 215071, true }, + { 215089, true }, + { 215101, true }, + { 215111, true }, + { 215135, true }, + { 215158, true }, + { 215178, true }, + { 215191, true }, + { 215207, true }, + { 215219, true }, + { 215233, true }, + { 215252, true }, + { 215262, true }, + { 215284, true }, + { 215297, true }, + { 215306, true }, + { 215317, true }, + { 215330, true }, + { 215341, true }, + { 215355, true }, + { 215370, true }, + { 215384, true }, { 215399, true }, - { 215413, true }, - { 215426, true }, - { 215439, true }, - { 215458, true }, - { 215470, true }, - { 215482, true }, + { 215422, false }, + { 215435, true }, + { 215447, true }, + { 215462, true }, + { 215474, true }, + { 215484, true }, { 215498, true }, - { 215516, true }, - { 215542, true }, - { 215560, false }, - { 215573, true }, - { 215591, true }, + { 215511, true }, + { 215524, true }, + { 215543, true }, + { 215555, true }, + { 215567, true }, + { 215583, true }, { 215601, true }, - { 215611, true }, - { 215622, true }, - { 215637, true }, - { 215649, true }, - { 215665, true }, - { 215673, true }, - { 215683, true }, - { 215693, true }, - { 215703, true }, - { 215715, true }, - { 215725, true }, - { 215735, true }, - { 215746, true }, - { 215766, true }, - { 215774, false }, - { 215795, true }, - { 215808, true }, - { 215817, true }, + { 215627, true }, + { 215645, false }, + { 215658, true }, + { 215676, true }, + { 215686, true }, + { 215696, true }, + { 215707, true }, + { 215722, true }, + { 215734, true }, + { 215750, true }, + { 215758, true }, + { 215768, true }, + { 215778, true }, + { 215788, true }, + { 215800, true }, + { 215810, true }, + { 215820, true }, { 215831, true }, - { 215841, true }, - { 215854, true }, - { 215864, true }, - { 215873, true }, - { 215889, false }, - { 215909, true }, - { 215919, true }, + { 215851, true }, + { 215859, false }, + { 215880, true }, + { 215893, true }, + { 215902, true }, + { 215916, true }, { 215926, true }, - { 215936, true }, - { 215946, true }, - { 215961, true }, - { 215975, true }, - { 215992, true }, - { 216009, true }, - { 216029, true }, - { 216042, true }, - { 216058, true }, - { 216088, true }, + { 215939, true }, + { 215949, true }, + { 215958, true }, + { 215974, false }, + { 215994, true }, + { 216004, true }, + { 216011, true }, + { 216021, true }, + { 216031, true }, + { 216046, true }, + { 216060, true }, + { 216077, true }, + { 216094, true }, { 216114, true }, - { 216122, true }, - { 216141, true }, - { 216155, true }, - { 216164, true }, - { 216183, true }, - { 216193, true }, - { 216214, true }, - { 216229, true }, - { 216242, true }, - { 216258, true }, - { 216270, true }, - { 216287, true }, - { 216298, true }, - { 216315, true }, - { 216333, true }, - { 216349, true }, - { 216369, true }, - { 216391, true }, - { 216404, true }, - { 216414, true }, - { 216436, true }, - { 216457, true }, - { 216478, true }, - { 216491, true }, - { 216515, true }, - { 216526, true }, - { 216538, true }, - { 216550, true }, - { 216560, true }, - { 216578, true }, - { 216590, false }, - { 216607, true }, - { 216639, true }, - { 216650, true }, - { 216660, true }, - { 216673, true }, - { 216682, true }, - { 216695, true }, - { 216706, true }, - { 216717, true }, - { 216727, true }, - { 216734, true }, - { 216746, true }, - { 216759, false }, - { 216771, true }, + { 216127, true }, + { 216143, true }, + { 216173, true }, + { 216199, true }, + { 216207, true }, + { 216226, true }, + { 216240, true }, + { 216249, true }, + { 216268, true }, + { 216278, true }, + { 216299, true }, + { 216314, true }, + { 216327, true }, + { 216343, true }, + { 216355, true }, + { 216372, true }, + { 216383, true }, + { 216400, true }, + { 216418, true }, + { 216434, true }, + { 216454, true }, + { 216476, true }, + { 216489, true }, + { 216499, true }, + { 216521, true }, + { 216542, true }, + { 216563, true }, + { 216576, true }, + { 216600, true }, + { 216611, true }, + { 216623, true }, + { 216635, true }, + { 216645, true }, + { 216663, true }, + { 216675, false }, + { 216692, true }, + { 216724, true }, + { 216735, true }, + { 216745, true }, + { 216758, true }, + { 216767, true }, + { 216780, true }, { 216791, true }, - { 216804, true }, - { 216814, true }, - { 216827, true }, - { 216848, true }, - { 216865, true }, - { 216879, true }, - { 216896, true }, - { 216914, true }, - { 216921, true }, - { 216939, false }, - { 216957, false }, - { 216975, false }, - { 216992, true }, - { 217014, true }, - { 217027, true }, - { 217040, false }, - { 217055, false }, - { 217065, false }, - { 217079, true }, - { 217094, true }, - { 217106, true }, - { 217127, true }, - { 217145, true }, - { 217160, true }, - { 217188, true }, - { 217213, true }, - { 217231, true }, - { 217247, true }, - { 217257, true }, - { 217285, true }, - { 217300, true }, - { 217311, true }, - { 217321, true }, - { 217344, false }, - { 217362, true }, - { 217377, true }, - { 217389, true }, - { 217402, true }, - { 217431, true }, - { 217449, true }, - { 217468, true }, - { 217485, true }, - { 217495, true }, - { 217506, true }, - { 217517, false }, - { 217532, true }, - { 217547, true }, - { 217565, true }, - { 217579, true }, - { 217594, true }, - { 217606, true }, - { 217629, true }, - { 217643, true }, - { 217668, true }, - { 217684, true }, - { 217708, true }, - { 217722, true }, - { 217733, true }, - { 217751, true }, - { 217784, false }, + { 216802, true }, + { 216812, true }, + { 216819, true }, + { 216831, true }, + { 216844, false }, + { 216856, true }, + { 216876, true }, + { 216889, true }, + { 216899, true }, + { 216912, true }, + { 216933, true }, + { 216950, true }, + { 216964, true }, + { 216981, true }, + { 216999, true }, + { 217006, true }, + { 217024, false }, + { 217042, false }, + { 217060, false }, + { 217077, true }, + { 217099, true }, + { 217112, true }, + { 217125, false }, + { 217140, false }, + { 217150, false }, + { 217164, true }, + { 217179, true }, + { 217191, true }, + { 217212, true }, + { 217230, true }, + { 217245, true }, + { 217273, true }, + { 217298, true }, + { 217316, true }, + { 217332, true }, + { 217342, true }, + { 217370, true }, + { 217385, true }, + { 217396, true }, + { 217406, true }, + { 217429, false }, + { 217447, true }, + { 217462, true }, + { 217474, true }, + { 217487, true }, + { 217516, true }, + { 217534, true }, + { 217553, true }, + { 217570, true }, + { 217580, true }, + { 217591, true }, + { 217602, false }, + { 217617, true }, + { 217632, true }, + { 217650, true }, + { 217664, true }, + { 217679, true }, + { 217691, true }, + { 217714, true }, + { 217728, true }, + { 217753, true }, + { 217769, true }, + { 217793, true }, { 217807, true }, - { 217827, true }, - { 217844, true }, - { 217862, true }, - { 217882, true }, + { 217818, true }, + { 217836, true }, + { 217869, false }, { 217892, true }, - { 217905, true }, - { 217918, true }, - { 217935, true }, - { 217946, true }, - { 217957, true }, - { 217979, true }, - { 217997, false }, - { 218011, true }, - { 218025, true }, - { 218043, true }, - { 218063, true }, - { 218077, true }, - { 218086, true }, - { 218102, true }, - { 218115, true }, - { 218133, true }, - { 218145, true }, - { 218160, true }, - { 218173, true }, - { 218185, true }, - { 218197, true }, - { 218208, true }, - { 218219, true }, - { 218228, true }, - { 218241, true }, - { 218255, true }, - { 218266, true }, - { 218280, true }, - { 218291, true }, + { 217912, true }, + { 217929, true }, + { 217947, true }, + { 217967, true }, + { 217977, true }, + { 217990, true }, + { 218003, true }, + { 218020, true }, + { 218031, true }, + { 218042, true }, + { 218064, true }, + { 218082, false }, + { 218096, true }, + { 218110, true }, + { 218128, true }, + { 218148, true }, + { 218162, true }, + { 218171, true }, + { 218187, true }, + { 218200, true }, + { 218218, true }, + { 218230, true }, + { 218245, true }, + { 218258, true }, + { 218270, true }, + { 218282, true }, + { 218293, true }, { 218304, true }, - { 218318, true }, - { 218328, false }, - { 218341, true }, - { 218350, true }, - { 218367, true }, - { 218377, true }, - { 218387, true }, - { 218400, true }, - { 218409, true }, - { 218419, true }, - { 218430, true }, - { 218440, true }, - { 218448, true }, - { 218456, false }, - { 218470, true }, - { 218478, false }, - { 218498, true }, - { 218508, true }, - { 218522, true }, - { 218536, true }, - { 218546, true }, - { 218557, true }, - { 218569, true }, - { 218580, true }, - { 218592, true }, - { 218602, true }, - { 218611, true }, - { 218624, true }, - { 218636, true }, - { 218648, true }, - { 218659, true }, - { 218673, false }, - { 218689, true }, - { 218701, true }, - { 218717, true }, - { 218732, true }, - { 218746, true }, - { 218755, true }, - { 218767, true }, - { 218777, true }, - { 218793, true }, - { 218808, true }, - { 218823, true }, - { 218839, true }, - { 218854, true }, - { 218876, true }, - { 218888, true }, - { 218895, true }, - { 218910, true }, - { 218921, true }, - { 218931, true }, - { 218946, true }, - { 218957, true }, - { 218971, true }, - { 218985, true }, - { 218996, true }, - { 219009, true }, - { 219020, false }, - { 219035, true }, - { 219051, true }, - { 219060, true }, + { 218313, true }, + { 218326, true }, + { 218340, true }, + { 218351, true }, + { 218365, true }, + { 218376, true }, + { 218389, true }, + { 218403, true }, + { 218413, false }, + { 218426, true }, + { 218435, true }, + { 218452, true }, + { 218462, true }, + { 218472, true }, + { 218485, true }, + { 218494, true }, + { 218504, true }, + { 218515, true }, + { 218525, true }, + { 218533, true }, + { 218541, false }, + { 218555, true }, + { 218563, false }, + { 218583, true }, + { 218593, true }, + { 218607, true }, + { 218621, true }, + { 218631, true }, + { 218642, true }, + { 218654, true }, + { 218665, true }, + { 218677, true }, + { 218687, true }, + { 218696, true }, + { 218709, true }, + { 218721, true }, + { 218733, true }, + { 218744, true }, + { 218758, false }, + { 218774, true }, + { 218786, true }, + { 218802, true }, + { 218817, true }, + { 218831, true }, + { 218840, true }, + { 218852, true }, + { 218862, true }, + { 218878, true }, + { 218893, true }, + { 218908, true }, + { 218924, true }, + { 218939, true }, + { 218961, true }, + { 218973, true }, + { 218980, true }, + { 218995, true }, + { 219006, true }, + { 219016, true }, + { 219031, true }, + { 219042, true }, + { 219056, true }, { 219070, true }, - { 219077, true }, - { 219088, true }, - { 219100, true }, - { 219122, true }, - { 219134, true }, - { 219148, true }, - { 219171, true }, - { 219206, true }, - { 219242, true }, - { 219275, true }, - { 219313, true }, - { 219348, true }, - { 219383, true }, - { 219423, true }, - { 219459, true }, - { 219502, true }, - { 219528, true }, - { 219541, true }, - { 219550, true }, - { 219560, true }, - { 219570, true }, - { 219597, true }, - { 219606, true }, - { 219615, true }, - { 219632, true }, - { 219649, true }, - { 219661, true }, - { 219674, true }, - { 219687, true }, - { 219714, true }, - { 219721, true }, - { 219732, true }, - { 219749, true }, - { 219765, true }, - { 219776, true }, - { 219788, true }, - { 219801, true }, - { 219825, true }, - { 219837, true }, - { 219844, true }, - { 219855, true }, - { 219863, true }, + { 219081, true }, + { 219094, true }, + { 219105, false }, + { 219120, true }, + { 219136, true }, + { 219145, true }, + { 219155, true }, + { 219162, true }, + { 219173, true }, + { 219185, true }, + { 219207, true }, + { 219219, true }, + { 219233, true }, + { 219256, true }, + { 219291, true }, + { 219327, true }, + { 219360, true }, + { 219398, true }, + { 219433, true }, + { 219468, true }, + { 219508, true }, + { 219544, true }, + { 219587, true }, + { 219613, true }, + { 219626, true }, + { 219635, true }, + { 219645, true }, + { 219655, true }, + { 219682, true }, + { 219691, true }, + { 219700, true }, + { 219717, true }, + { 219734, true }, + { 219746, true }, + { 219759, true }, + { 219772, true }, + { 219799, true }, + { 219806, true }, + { 219817, true }, + { 219834, true }, + { 219850, true }, + { 219861, true }, { 219873, true }, - { 219880, true }, - { 219900, true }, - { 219912, true }, - { 219933, true }, - { 219944, true }, - { 219956, true }, - { 219966, true }, - { 219978, true }, - { 220000, true }, - { 220009, true }, - { 220017, true }, - { 220026, true }, - { 220035, true }, - { 220054, true }, - { 220068, true }, - { 220089, true }, + { 219886, true }, + { 219910, true }, + { 219922, true }, + { 219929, true }, + { 219940, true }, + { 219948, true }, + { 219958, true }, + { 219965, true }, + { 219985, true }, + { 219997, true }, + { 220018, true }, + { 220029, true }, + { 220041, true }, + { 220051, true }, + { 220063, true }, + { 220085, true }, + { 220094, true }, { 220102, true }, - { 220114, true }, - { 220138, true }, - { 220150, true }, - { 220168, true }, - { 220186, false }, - { 220200, true }, - { 220215, true }, - { 220230, true }, - { 220239, false }, - { 220256, true }, - { 220266, true }, - { 220280, true }, - { 220288, true }, - { 220299, true }, - { 220314, true }, - { 220330, true }, - { 220353, true }, - { 220363, true }, - { 220374, true }, + { 220111, true }, + { 220120, true }, + { 220139, true }, + { 220153, true }, + { 220174, true }, + { 220187, true }, + { 220199, true }, + { 220223, true }, + { 220235, true }, + { 220253, true }, + { 220271, false }, + { 220285, true }, + { 220300, true }, + { 220315, true }, + { 220324, false }, + { 220341, true }, + { 220351, true }, + { 220365, true }, + { 220373, true }, { 220384, true }, - { 220400, true }, - { 220411, true }, - { 220422, true }, - { 220434, true }, - { 220445, true }, + { 220399, true }, + { 220415, true }, + { 220438, true }, + { 220448, true }, { 220459, true }, - { 220476, false }, - { 220492, true }, - { 220508, true }, - { 220520, false }, - { 220539, true }, - { 220549, true }, - { 220567, true }, - { 220582, true }, - { 220605, true }, - { 220616, true }, - { 220633, true }, - { 220643, true }, - { 220659, true }, - { 220678, true }, - { 220693, true }, - { 220709, true }, - { 220726, true }, - { 220746, true }, - { 220758, true }, - { 220773, true }, - { 220792, true }, - { 220801, true }, - { 220817, true }, - { 220834, true }, - { 220846, true }, + { 220469, true }, + { 220485, true }, + { 220496, true }, + { 220507, true }, + { 220519, true }, + { 220530, true }, + { 220544, true }, + { 220561, false }, + { 220577, true }, + { 220593, true }, + { 220605, false }, + { 220624, true }, + { 220634, true }, + { 220652, true }, + { 220667, true }, + { 220690, true }, + { 220701, true }, + { 220718, true }, + { 220728, true }, + { 220744, true }, + { 220763, true }, + { 220778, true }, + { 220794, true }, + { 220811, true }, + { 220831, true }, + { 220843, true }, { 220858, true }, - { 220867, true }, { 220877, true }, - { 220894, true }, - { 220912, true }, - { 220923, true }, + { 220886, true }, + { 220902, true }, + { 220919, true }, { 220931, true }, - { 220941, true }, - { 220956, true }, - { 220966, true }, - { 220976, false }, - { 220983, true }, - { 220993, true }, - { 221014, true }, - { 221034, true }, - { 221057, true }, - { 221077, true }, - { 221093, true }, - { 221108, true }, - { 221126, true }, - { 221137, false }, - { 221161, true }, - { 221180, true }, + { 220943, true }, + { 220952, true }, + { 220962, true }, + { 220979, true }, + { 220997, true }, + { 221008, true }, + { 221016, true }, + { 221026, true }, + { 221041, true }, + { 221051, true }, + { 221061, false }, + { 221068, true }, + { 221078, true }, + { 221099, true }, + { 221119, true }, + { 221142, true }, + { 221162, true }, + { 221178, true }, { 221193, true }, - { 221209, true }, - { 221225, true }, - { 221239, true }, - { 221251, false }, - { 221265, false }, + { 221211, true }, + { 221222, false }, + { 221246, true }, + { 221265, true }, { 221278, true }, - { 221292, true }, + { 221294, true }, { 221310, true }, - { 221333, true }, - { 221356, true }, - { 221369, true }, - { 221381, true }, - { 221392, true }, - { 221403, true }, + { 221324, true }, + { 221336, false }, + { 221350, false }, + { 221363, true }, + { 221377, true }, + { 221395, true }, { 221418, true }, - { 221443, true }, - { 221476, true }, - { 221502, true }, - { 221536, true }, - { 221559, true }, - { 221572, true }, - { 221588, true }, - { 221600, true }, - { 221612, true }, - { 221628, false }, - { 221648, true }, - { 221661, false }, - { 221679, false }, - { 221702, true }, - { 221722, true }, - { 221738, true }, - { 221752, true }, - { 221773, true }, - { 221788, false }, - { 221801, true }, - { 221818, true }, - { 221832, true }, - { 221845, true }, - { 221857, true }, - { 221869, true }, - { 221885, true }, - { 221900, false }, - { 221922, true }, + { 221441, true }, + { 221454, true }, + { 221466, true }, + { 221477, true }, + { 221488, true }, + { 221503, true }, + { 221528, true }, + { 221561, true }, + { 221587, true }, + { 221621, true }, + { 221644, true }, + { 221657, true }, + { 221673, true }, + { 221685, true }, + { 221697, true }, + { 221713, false }, + { 221733, true }, + { 221746, false }, + { 221764, false }, + { 221787, true }, + { 221807, true }, + { 221823, true }, + { 221837, true }, + { 221858, true }, + { 221873, false }, + { 221886, true }, + { 221903, true }, + { 221917, true }, + { 221930, true }, { 221942, true }, { 221954, true }, - { 221975, true }, - { 221991, false }, - { 222003, true }, - { 222019, true }, - { 222037, true }, - { 222049, true }, - { 222063, true }, - { 222077, true }, - { 222094, true }, - { 222108, true }, - { 222118, false }, - { 222132, true }, - { 222142, true }, - { 222163, true }, - { 222176, true }, - { 222194, true }, - { 222210, true }, - { 222223, true }, - { 222234, true }, - { 222247, true }, - { 222268, true }, + { 221970, true }, + { 221985, false }, + { 222007, true }, + { 222027, true }, + { 222039, true }, + { 222060, true }, + { 222076, false }, + { 222088, true }, + { 222104, true }, + { 222122, true }, + { 222134, true }, + { 222148, true }, + { 222162, true }, + { 222179, true }, + { 222193, true }, + { 222203, false }, + { 222217, true }, + { 222227, true }, + { 222248, true }, + { 222261, true }, { 222279, true }, - { 222299, true }, - { 222316, true }, - { 222330, true }, - { 222340, true }, - { 222357, true }, - { 222367, true }, - { 222376, true }, - { 222394, true }, - { 222402, true }, - { 222418, true }, - { 222434, true }, - { 222450, true }, - { 222471, true }, - { 222482, true }, - { 222495, true }, - { 222520, true }, - { 222535, true }, - { 222555, true }, - { 222569, true }, - { 222584, true }, - { 222606, true }, - { 222626, true }, - { 222641, true }, - { 222651, true }, - { 222664, true }, - { 222682, true }, - { 222697, true }, - { 222713, true }, - { 222729, true }, - { 222745, true }, - { 222756, true }, - { 222765, false }, - { 222775, true }, - { 222787, true }, - { 222804, true }, - { 222816, true }, - { 222832, true }, - { 222848, true }, - { 222865, true }, - { 222886, true }, - { 222898, true }, - { 222910, true }, - { 222929, false }, - { 222941, true }, - { 222953, true }, - { 222963, true }, - { 222978, true }, - { 222990, true }, - { 223004, true }, - { 223028, true }, - { 223040, true }, - { 223072, true }, - { 223093, true }, - { 223124, true }, - { 223149, true }, - { 223172, true }, - { 223183, true }, - { 223195, true }, - { 223210, true }, - { 223223, true }, - { 223236, true }, - { 223249, true }, - { 223259, true }, - { 223288, true }, - { 223311, true }, - { 223335, true }, - { 223362, true }, - { 223376, true }, - { 223399, true }, - { 223425, true }, - { 223453, true }, - { 223484, true }, - { 223509, true }, - { 223517, true }, - { 223524, true }, - { 223536, true }, - { 223544, true }, - { 223556, true }, - { 223578, true }, - { 223591, true }, - { 223612, true }, - { 223625, true }, - { 223646, true }, - { 223665, true }, - { 223686, true }, - { 223705, true }, - { 223716, true }, - { 223729, true }, - { 223745, false }, - { 223761, true }, - { 223769, true }, - { 223784, true }, - { 223801, false }, - { 223816, true }, - { 223832, true }, - { 223842, true }, - { 223854, true }, - { 223870, true }, - { 223884, false }, - { 223893, true }, - { 223905, true }, - { 223918, true }, - { 223936, true }, + { 222295, true }, + { 222308, true }, + { 222319, true }, + { 222332, true }, + { 222353, true }, + { 222364, true }, + { 222384, true }, + { 222401, true }, + { 222413, true }, + { 222427, true }, + { 222437, true }, + { 222454, true }, + { 222464, true }, + { 222473, true }, + { 222491, true }, + { 222499, true }, + { 222515, true }, + { 222531, true }, + { 222547, true }, + { 222568, true }, + { 222579, true }, + { 222592, true }, + { 222617, true }, + { 222632, true }, + { 222652, true }, + { 222666, true }, + { 222681, true }, + { 222703, true }, + { 222723, true }, + { 222738, true }, + { 222748, true }, + { 222761, true }, + { 222779, true }, + { 222794, true }, + { 222810, true }, + { 222826, true }, + { 222842, true }, + { 222853, true }, + { 222862, false }, + { 222872, true }, + { 222884, true }, + { 222901, true }, + { 222913, true }, + { 222929, true }, + { 222945, true }, + { 222962, true }, + { 222983, true }, + { 222995, true }, + { 223007, true }, + { 223026, false }, + { 223038, true }, + { 223050, true }, + { 223060, true }, + { 223075, true }, + { 223087, true }, + { 223101, true }, + { 223125, true }, + { 223137, true }, + { 223169, true }, + { 223190, true }, + { 223221, true }, + { 223246, true }, + { 223269, true }, + { 223280, true }, + { 223292, true }, + { 223307, true }, + { 223320, true }, + { 223333, true }, + { 223346, true }, + { 223356, true }, + { 223385, true }, + { 223408, true }, + { 223432, true }, + { 223459, true }, + { 223473, true }, + { 223496, true }, + { 223522, true }, + { 223550, true }, + { 223581, true }, + { 223606, true }, + { 223614, true }, + { 223621, true }, + { 223633, true }, + { 223641, true }, + { 223653, true }, + { 223675, true }, + { 223688, true }, + { 223709, true }, + { 223722, true }, + { 223743, true }, + { 223762, true }, + { 223783, true }, + { 223802, true }, + { 223813, true }, + { 223826, true }, + { 223842, false }, + { 223858, true }, + { 223866, true }, + { 223881, true }, + { 223898, false }, + { 223913, true }, + { 223929, true }, + { 223939, true }, { 223951, true }, - { 223973, true }, + { 223967, true }, + { 223981, false }, { 223990, true }, - { 224012, true }, - { 224034, true }, + { 224002, true }, + { 224015, true }, + { 224033, true }, { 224048, true }, - { 224062, true }, - { 224069, true }, - { 224082, true }, - { 224095, true }, - { 224121, true }, - { 224133, true }, - { 224144, true }, - { 224170, true }, - { 224180, true }, - { 224190, false }, - { 224207, true }, - { 224219, true }, - { 224234, true }, - { 224243, true }, - { 224256, true }, - { 224266, true }, - { 224280, true }, - { 224297, true }, - { 224310, true }, - { 224322, true }, - { 224333, true }, - { 224343, true }, - { 224356, false }, - { 224372, true }, - { 224388, true }, - { 224402, false }, - { 224417, true }, - { 224430, false }, - { 224447, true }, - { 224461, true }, - { 224475, true }, - { 224489, true }, - { 224513, true }, - { 224526, true }, - { 224539, true }, - { 224553, true }, - { 224567, true }, - { 224582, true }, - { 224598, true }, - { 224613, true }, - { 224628, true }, - { 224646, true }, - { 224669, true }, - { 224681, true }, - { 224693, true }, - { 224712, true }, - { 224728, true }, + { 224070, true }, + { 224087, true }, + { 224109, true }, + { 224131, true }, + { 224145, true }, + { 224159, true }, + { 224166, true }, + { 224179, true }, + { 224192, true }, + { 224218, true }, + { 224230, true }, + { 224241, true }, + { 224267, true }, + { 224277, true }, + { 224287, false }, + { 224304, true }, + { 224316, true }, + { 224331, true }, + { 224340, true }, + { 224353, true }, + { 224363, true }, + { 224377, true }, + { 224394, true }, + { 224407, true }, + { 224419, true }, + { 224430, true }, + { 224440, true }, + { 224453, false }, + { 224469, true }, + { 224485, true }, + { 224499, false }, + { 224514, true }, + { 224527, false }, + { 224544, true }, + { 224558, true }, + { 224572, true }, + { 224586, true }, + { 224610, true }, + { 224623, true }, + { 224636, true }, + { 224650, true }, + { 224664, true }, + { 224679, true }, + { 224695, true }, + { 224710, true }, + { 224725, true }, { 224743, true }, - { 224767, true }, - { 224784, true }, - { 224802, true }, - { 224821, true }, - { 224841, true }, - { 224856, true }, - { 224868, true }, - { 224885, true }, + { 224766, true }, + { 224778, true }, + { 224790, true }, + { 224809, true }, + { 224825, true }, + { 224840, true }, + { 224864, true }, + { 224881, true }, { 224899, true }, - { 224916, true }, - { 224925, true }, + { 224918, true }, { 224938, true }, - { 224952, true }, - { 224967, true }, - { 224979, false }, - { 224992, true }, + { 224953, true }, + { 224965, true }, + { 224982, true }, + { 224996, true }, { 225013, true }, - { 225027, true }, - { 225040, true }, - { 225052, true }, - { 225064, false }, - { 225083, true }, - { 225105, true }, - { 225120, true }, - { 225139, true }, - { 225153, false }, - { 225164, true }, - { 225179, true }, - { 225195, true }, - { 225209, true }, - { 225221, true }, - { 225238, true }, - { 225256, true }, - { 225267, true }, - { 225274, true }, - { 225286, true }, - { 225294, true }, - { 225304, true }, - { 225314, true }, - { 225329, true }, - { 225348, true }, - { 225364, false }, - { 225374, true }, - { 225381, false }, - { 225393, true }, - { 225402, true }, - { 225416, true }, - { 225428, true }, - { 225436, true }, - { 225443, true }, - { 225453, true }, - { 225465, true }, - { 225476, true }, - { 225495, true }, - { 225503, true }, - { 225511, false }, - { 225523, true }, - { 225536, true }, - { 225551, true }, + { 225022, true }, + { 225035, true }, + { 225049, true }, + { 225064, true }, + { 225076, false }, + { 225089, true }, + { 225110, true }, + { 225124, true }, + { 225137, true }, + { 225149, true }, + { 225161, false }, + { 225180, true }, + { 225202, true }, + { 225217, true }, + { 225236, true }, + { 225250, false }, + { 225261, true }, + { 225276, true }, + { 225292, true }, + { 225306, true }, + { 225318, true }, + { 225335, true }, + { 225353, true }, + { 225364, true }, + { 225371, true }, + { 225383, true }, + { 225391, true }, + { 225401, true }, + { 225411, true }, + { 225426, true }, + { 225445, true }, + { 225461, false }, + { 225471, true }, + { 225478, false }, + { 225490, true }, + { 225499, true }, + { 225513, true }, + { 225525, true }, + { 225533, true }, + { 225540, true }, + { 225550, true }, + { 225562, true }, { 225573, true }, - { 225585, true }, - { 225603, true }, - { 225619, true }, - { 225628, false }, - { 225645, true }, - { 225666, true }, - { 225687, true }, - { 225699, true }, - { 225715, true }, - { 225740, true }, - { 225766, true }, - { 225792, true }, - { 225803, true }, - { 225815, true }, - { 225828, true }, - { 225841, true }, - { 225851, true }, - { 225860, true }, - { 225874, true }, - { 225894, true }, - { 225909, true }, + { 225592, true }, + { 225600, true }, + { 225608, false }, + { 225620, true }, + { 225633, true }, + { 225648, true }, + { 225670, true }, + { 225682, true }, + { 225700, true }, + { 225716, true }, + { 225725, false }, + { 225742, true }, + { 225763, true }, + { 225784, true }, + { 225796, true }, + { 225812, true }, + { 225837, true }, + { 225863, true }, + { 225889, true }, + { 225900, true }, + { 225912, true }, { 225925, true }, - { 225935, true }, - { 225947, true }, - { 225967, true }, - { 225989, true }, - { 226002, true }, - { 226021, true }, - { 226035, true }, - { 226047, true }, - { 226071, true }, - { 226088, false }, - { 226102, true }, - { 226115, true }, - { 226128, true }, - { 226147, true }, - { 226169, true }, - { 226187, true }, + { 225938, true }, + { 225948, true }, + { 225957, true }, + { 225971, true }, + { 225991, true }, + { 226006, true }, + { 226022, true }, + { 226032, true }, + { 226044, true }, + { 226064, true }, + { 226086, true }, + { 226099, true }, + { 226118, true }, + { 226132, true }, + { 226144, true }, + { 226168, true }, + { 226185, false }, { 226199, true }, - { 226214, true }, - { 226229, true }, - { 226250, true }, - { 226275, true }, - { 226300, true }, - { 226316, true }, - { 226342, true }, - { 226362, true }, - { 226375, true }, - { 226391, true }, - { 226404, true }, - { 226416, true }, - { 226434, true }, - { 226448, true }, - { 226467, true }, - { 226478, true }, - { 226490, true }, - { 226500, true }, - { 226509, true }, - { 226523, true }, - { 226540, true }, - { 226551, true }, - { 226562, true }, - { 226570, true }, - { 226582, true }, - { 226595, true }, - { 226609, true }, - { 226626, true }, - { 226637, false }, - { 226649, true }, - { 226668, true }, - { 226681, true }, + { 226212, true }, + { 226225, true }, + { 226244, true }, + { 226266, true }, + { 226284, true }, + { 226296, true }, + { 226311, true }, + { 226326, true }, + { 226347, true }, + { 226372, true }, + { 226397, true }, + { 226413, true }, + { 226439, true }, + { 226459, true }, + { 226472, true }, + { 226488, true }, + { 226501, true }, + { 226513, true }, + { 226531, true }, + { 226545, true }, + { 226564, true }, + { 226575, true }, + { 226587, true }, + { 226597, true }, + { 226606, true }, + { 226620, true }, + { 226637, true }, + { 226648, true }, + { 226659, true }, + { 226667, true }, + { 226679, true }, { 226692, true }, - { 226703, true }, - { 226714, true }, - { 226727, true }, - { 226738, true }, - { 226750, true }, - { 226760, true }, - { 226766, true }, - { 226776, true }, - { 226796, true }, - { 226806, true }, - { 226829, true }, - { 226841, true }, - { 226860, true }, - { 226868, true }, - { 226876, true }, - { 226890, true }, - { 226902, true }, - { 226917, false }, - { 226930, true }, - { 226943, true }, - { 226954, true }, + { 226706, true }, + { 226723, true }, + { 226734, false }, + { 226746, true }, + { 226765, true }, + { 226778, true }, + { 226789, true }, + { 226800, true }, + { 226811, true }, + { 226824, true }, + { 226835, true }, + { 226847, true }, + { 226857, true }, + { 226863, true }, + { 226873, true }, + { 226893, true }, + { 226903, true }, + { 226926, true }, + { 226938, true }, + { 226957, true }, { 226965, true }, - { 226981, true }, - { 226995, true }, - { 227005, true }, - { 227019, true }, - { 227026, true }, - { 227039, true }, - { 227056, true }, - { 227066, true }, + { 226973, true }, + { 226987, true }, + { 226999, true }, + { 227014, false }, + { 227027, true }, + { 227040, true }, + { 227051, true }, + { 227062, true }, { 227078, true }, - { 227094, true }, - { 227109, true }, - { 227119, true }, - { 227144, true }, - { 227152, true }, - { 227164, false }, - { 227175, false }, - { 227193, false }, + { 227092, true }, + { 227102, true }, + { 227116, true }, + { 227123, true }, + { 227136, true }, + { 227153, true }, + { 227163, true }, + { 227178, true }, + { 227190, true }, { 227206, true }, { 227221, true }, - { 227235, true }, - { 227249, true }, - { 227266, true }, - { 227283, true }, - { 227298, true }, - { 227316, true }, - { 227334, true }, - { 227352, true }, - { 227366, true }, - { 227380, true }, - { 227394, true }, - { 227408, true }, - { 227422, false }, - { 227440, false }, - { 227463, false }, - { 227484, false }, - { 227503, true }, - { 227519, false }, - { 227535, false }, - { 227551, true }, - { 227573, true }, - { 227586, false }, - { 227603, false }, - { 227620, true }, - { 227637, false }, - { 227654, false }, - { 227668, false }, - { 227687, false }, + { 227231, true }, + { 227256, true }, + { 227264, true }, + { 227276, false }, + { 227287, false }, + { 227305, false }, + { 227318, true }, + { 227333, true }, + { 227347, true }, + { 227361, true }, + { 227378, true }, + { 227395, true }, + { 227410, true }, + { 227428, true }, + { 227446, true }, + { 227464, true }, + { 227478, true }, + { 227492, true }, + { 227506, true }, + { 227520, true }, + { 227534, false }, + { 227552, false }, + { 227575, false }, + { 227596, false }, + { 227615, true }, + { 227631, false }, + { 227647, false }, + { 227663, true }, + { 227685, true }, { 227698, false }, - { 227710, false }, - { 227722, false }, - { 227741, true }, - { 227759, false }, - { 227773, true }, - { 227789, false }, - { 227806, false }, - { 227823, false }, - { 227838, false }, - { 227854, true }, - { 227875, false }, - { 227894, false }, - { 227912, false }, - { 227932, true }, - { 227948, false }, - { 227963, true }, - { 227978, false }, - { 228002, true }, - { 228009, true }, - { 228028, false }, - { 228046, false }, - { 228061, true }, - { 228081, true }, - { 228102, false }, - { 228126, false }, - { 228145, false }, - { 228161, false }, - { 228176, false }, - { 228189, true }, - { 228205, false }, - { 228220, false }, - { 228234, false }, - { 228252, true }, - { 228263, true }, - { 228274, true }, - { 228282, true }, - { 228290, true }, - { 228305, true }, - { 228315, true }, - { 228328, true }, - { 228345, true }, - { 228361, true }, - { 228369, true }, - { 228380, true }, - { 228390, true }, - { 228400, true }, - { 228416, true }, - { 228421, true }, - { 228426, true }, - { 228436, true }, - { 228444, true }, - { 228453, true }, - { 228461, true }, + { 227715, false }, + { 227732, true }, + { 227749, false }, + { 227766, false }, + { 227780, false }, + { 227799, false }, + { 227810, false }, + { 227822, false }, + { 227834, false }, + { 227853, true }, + { 227871, false }, + { 227885, true }, + { 227901, false }, + { 227918, false }, + { 227935, false }, + { 227950, false }, + { 227966, true }, + { 227987, false }, + { 228006, false }, + { 228024, false }, + { 228044, true }, + { 228060, false }, + { 228075, true }, + { 228090, false }, + { 228114, true }, + { 228121, true }, + { 228140, false }, + { 228158, false }, + { 228173, true }, + { 228193, true }, + { 228214, false }, + { 228238, false }, + { 228257, false }, + { 228273, false }, + { 228288, false }, + { 228301, true }, + { 228317, false }, + { 228332, false }, + { 228346, false }, + { 228364, true }, + { 228375, true }, + { 228386, true }, + { 228394, true }, + { 228402, true }, + { 228417, true }, + { 228427, true }, + { 228440, true }, + { 228457, true }, + { 228473, true }, { 228481, true }, - { 228488, true }, - { 228507, true }, - { 228514, true }, - { 228521, true }, + { 228492, true }, + { 228502, true }, + { 228512, true }, { 228528, true }, - { 228537, true }, - { 228558, true }, - { 228578, true }, - { 228602, true }, - { 228609, true }, + { 228533, true }, + { 228538, true }, + { 228548, true }, + { 228556, true }, + { 228565, true }, + { 228573, true }, + { 228593, true }, + { 228600, true }, { 228619, true }, - { 228632, true }, + { 228626, true }, + { 228633, true }, + { 228640, true }, { 228649, true }, - { 228669, true }, - { 228675, true }, - { 228682, true }, - { 228694, true }, - { 228707, true }, - { 228722, false }, - { 228733, true }, + { 228670, true }, + { 228690, true }, + { 228714, true }, + { 228721, true }, + { 228731, true }, { 228744, true }, - { 228752, false }, - { 228771, true }, - { 228782, true }, - { 228793, true }, - { 228800, true }, - { 228811, true }, - { 228823, true }, - { 228842, true }, - { 228858, true }, - { 228870, true }, - { 228881, true }, + { 228761, true }, + { 228781, true }, + { 228787, true }, + { 228794, true }, + { 228806, true }, + { 228819, true }, + { 228834, false }, + { 228845, false }, + { 228856, true }, + { 228864, false }, + { 228883, true }, { 228894, true }, - { 228910, true }, - { 228924, true }, - { 228939, true }, + { 228905, true }, + { 228912, true }, + { 228923, true }, + { 228935, true }, { 228954, true }, - { 228964, true }, - { 228974, true }, - { 228985, false }, - { 228995, true }, - { 229005, true }, - { 229016, true }, - { 229024, true }, - { 229032, true }, - { 229042, true }, - { 229051, false }, - { 229065, true }, - { 229075, true }, + { 228970, true }, + { 228982, true }, + { 228993, true }, + { 229006, true }, + { 229022, true }, + { 229036, true }, + { 229051, true }, + { 229066, true }, + { 229076, true }, { 229086, true }, - { 229094, true }, - { 229106, true }, + { 229097, false }, + { 229107, true }, { 229117, true }, { 229128, true }, - { 229140, true }, - { 229150, true }, - { 229158, true }, - { 229165, true }, - { 229172, true }, - { 229179, true }, - { 229197, true }, - { 229223, true }, - { 229249, true }, - { 229272, true }, - { 229303, true }, - { 229314, true }, - { 229330, true }, - { 229342, true }, + { 229136, true }, + { 229144, true }, + { 229154, true }, + { 229163, false }, + { 229177, true }, + { 229187, true }, + { 229198, true }, + { 229206, true }, + { 229218, true }, + { 229229, true }, + { 229240, true }, + { 229252, true }, + { 229262, true }, + { 229270, true }, + { 229277, true }, + { 229284, true }, + { 229291, true }, + { 229309, true }, + { 229335, true }, { 229361, true }, - { 229385, true }, - { 229411, true }, - { 229434, true }, - { 229453, true }, - { 229478, true }, - { 229503, true }, - { 229527, true }, - { 229567, true }, - { 229597, true }, - { 229608, true }, - { 229627, true }, - { 229658, true }, - { 229669, false }, - { 229690, true }, - { 229708, true }, - { 229726, true }, - { 229744, true }, - { 229781, true }, - { 229804, true }, + { 229384, true }, + { 229415, true }, + { 229426, true }, + { 229442, true }, + { 229454, true }, + { 229473, true }, + { 229497, true }, + { 229523, true }, + { 229546, true }, + { 229565, true }, + { 229590, true }, + { 229615, true }, + { 229655, true }, + { 229685, true }, + { 229696, true }, + { 229715, true }, + { 229746, true }, + { 229757, false }, + { 229778, true }, + { 229796, true }, + { 229814, true }, { 229832, true }, - { 229847, true }, - { 229874, true }, - { 229888, true }, - { 229910, true }, + { 229869, true }, + { 229892, true }, + { 229920, true }, { 229935, true }, - { 229977, true }, - { 229996, true }, - { 230019, true }, - { 230035, true }, - { 230069, true }, - { 230093, true }, - { 230100, false }, + { 229962, true }, + { 229976, true }, + { 229998, true }, + { 230023, true }, + { 230065, true }, + { 230084, true }, { 230107, true }, - { 230113, true }, - { 230124, true }, - { 230134, true }, - { 230144, true }, - { 230151, true }, - { 230158, true }, - { 230171, true }, - { 230178, true }, - { 230187, true }, + { 230123, true }, + { 230157, true }, + { 230181, true }, + { 230188, false }, + { 230195, true }, { 230201, true }, - { 230211, true }, - { 230221, true }, - { 230234, true }, - { 230247, true }, - { 230254, true }, - { 230261, true }, - { 230270, true }, - { 230277, true }, - { 230288, true }, - { 230297, true }, - { 230308, true }, - { 230324, true }, - { 230333, true }, - { 230346, true }, - { 230353, true }, - { 230363, true }, - { 230371, true }, - { 230382, true }, - { 230391, true }, - { 230401, true }, - { 230416, true }, - { 230426, true }, - { 230435, true }, - { 230455, true }, - { 230466, true }, - { 230477, true }, - { 230491, true }, - { 230500, true }, - { 230516, true }, + { 230212, true }, + { 230222, true }, + { 230232, true }, + { 230239, true }, + { 230246, true }, + { 230259, true }, + { 230266, true }, + { 230275, true }, + { 230289, true }, + { 230299, true }, + { 230309, true }, + { 230322, true }, + { 230335, true }, + { 230342, true }, + { 230349, true }, + { 230358, true }, + { 230365, true }, + { 230376, true }, + { 230385, true }, + { 230396, true }, + { 230412, true }, + { 230421, true }, + { 230434, true }, + { 230441, true }, + { 230451, true }, + { 230459, true }, + { 230470, true }, + { 230479, true }, + { 230489, true }, + { 230504, true }, + { 230514, true }, { 230523, true }, - { 230535, true }, - { 230545, true }, - { 230552, true }, - { 230564, false }, - { 230575, true }, - { 230585, false }, - { 230597, true }, + { 230543, true }, + { 230554, true }, + { 230565, true }, + { 230579, true }, + { 230588, true }, + { 230604, true }, { 230611, true }, - { 230624, true }, + { 230623, true }, + { 230633, true }, { 230640, true }, - { 230655, true }, - { 230667, true }, - { 230680, false }, - { 230690, true }, - { 230703, true }, - { 230725, true }, - { 230737, true }, - { 230749, true }, - { 230757, true }, - { 230766, true }, + { 230652, false }, + { 230663, true }, + { 230673, false }, + { 230685, true }, + { 230699, true }, + { 230712, true }, + { 230728, true }, + { 230743, true }, + { 230755, true }, + { 230768, false }, { 230778, true }, - { 230788, false }, - { 230796, true }, - { 230806, true }, - { 230815, true }, - { 230835, true }, - { 230850, true }, - { 230866, false }, - { 230881, false }, + { 230791, true }, + { 230813, true }, + { 230825, true }, + { 230837, true }, + { 230845, true }, + { 230854, true }, + { 230866, true }, + { 230876, false }, + { 230884, true }, { 230894, true }, - { 230908, true }, - { 230918, false }, - { 230927, true }, - { 230934, true }, - { 230950, true }, - { 230957, true }, - { 230967, true }, - { 230976, true }, - { 230984, true }, - { 230993, true }, - { 231004, true }, - { 231018, true }, - { 231029, true }, - { 231051, true }, - { 231066, true }, - { 231073, true }, - { 231084, true }, + { 230903, true }, + { 230923, true }, + { 230938, true }, + { 230954, false }, + { 230969, false }, + { 230982, true }, + { 230996, true }, + { 231006, false }, + { 231015, true }, + { 231022, true }, + { 231038, true }, + { 231045, true }, + { 231055, true }, + { 231064, true }, + { 231072, true }, + { 231081, true }, { 231092, true }, - { 231102, true }, - { 231115, true }, - { 231133, true }, - { 231145, false }, + { 231106, true }, + { 231117, true }, + { 231139, true }, { 231154, true }, - { 231168, true }, - { 231184, true }, - { 231208, true }, - { 231226, true }, - { 231237, true }, - { 231249, false }, - { 231264, true }, - { 231274, true }, - { 231286, true }, - { 231306, false }, - { 231316, true }, - { 231340, true }, - { 231351, true }, - { 231361, true }, - { 231373, true }, - { 231386, true }, - { 231403, true }, - { 231418, true }, - { 231431, true }, - { 231445, true }, - { 231460, true }, - { 231475, true }, - { 231487, true }, - { 231499, true }, - { 231513, true }, - { 231525, true }, - { 231536, true }, - { 231546, true }, - { 231558, true }, - { 231571, true }, - { 231591, true }, - { 231609, true }, - { 231622, true }, - { 231637, true }, - { 231652, true }, - { 231664, true }, - { 231673, true }, - { 231684, true }, - { 231706, true }, - { 231722, true }, - { 231742, true }, - { 231751, true }, - { 231759, true }, - { 231767, true }, - { 231780, true }, - { 231792, true }, - { 231800, true }, - { 231815, true }, - { 231825, true }, - { 231836, true }, - { 231852, true }, - { 231861, true }, - { 231870, true }, - { 231879, true }, - { 231894, true }, - { 231913, true }, - { 231926, true }, - { 231939, true }, - { 231948, true }, - { 231959, true }, - { 231973, true }, - { 231985, true }, - { 232003, true }, - { 232016, true }, + { 231161, true }, + { 231172, true }, + { 231180, true }, + { 231190, true }, + { 231203, true }, + { 231221, true }, + { 231233, false }, + { 231242, true }, + { 231256, true }, + { 231272, true }, + { 231296, true }, + { 231314, true }, + { 231325, true }, + { 231337, false }, + { 231352, true }, + { 231362, true }, + { 231374, true }, + { 231394, false }, + { 231404, true }, + { 231428, true }, + { 231439, true }, + { 231449, true }, + { 231461, true }, + { 231474, true }, + { 231491, true }, + { 231506, true }, + { 231519, true }, + { 231533, true }, + { 231548, true }, + { 231563, true }, + { 231575, true }, + { 231587, true }, + { 231601, true }, + { 231613, true }, + { 231624, true }, + { 231634, true }, + { 231646, true }, + { 231659, true }, + { 231679, true }, + { 231697, true }, + { 231710, true }, + { 231725, true }, + { 231740, true }, + { 231752, true }, + { 231761, true }, + { 231772, true }, + { 231794, true }, + { 231810, true }, + { 231830, true }, + { 231839, true }, + { 231847, true }, + { 231855, true }, + { 231868, true }, + { 231876, true }, + { 231891, true }, + { 231901, true }, + { 231912, true }, + { 231928, true }, + { 231937, true }, + { 231946, true }, + { 231955, true }, + { 231970, true }, + { 231989, true }, + { 232002, true }, + { 232015, true }, { 232024, true }, - { 232038, true }, - { 232050, true }, - { 232060, true }, - { 232067, true }, - { 232075, true }, - { 232083, true }, - { 232093, true }, - { 232102, true }, - { 232125, true }, - { 232138, true }, + { 232035, true }, + { 232049, true }, + { 232061, true }, + { 232079, true }, + { 232092, true }, + { 232100, true }, + { 232114, true }, + { 232126, true }, + { 232136, true }, { 232143, true }, - { 232153, true }, - { 232160, true }, - { 232167, true }, - { 232179, false }, - { 232198, true }, - { 232209, true }, - { 232225, true }, - { 232240, true }, - { 232255, true }, - { 232268, true }, - { 232281, true }, - { 232289, true }, - { 232299, true }, - { 232309, true }, - { 232324, true }, - { 232338, true }, - { 232366, true }, - { 232379, true }, - { 232392, true }, - { 232409, true }, - { 232417, true }, - { 232426, true }, - { 232439, true }, - { 232451, true }, - { 232458, true }, - { 232488, true }, - { 232499, true }, - { 232517, true }, - { 232525, true }, - { 232549, true }, - { 232559, true }, - { 232571, true }, - { 232582, true }, - { 232594, true }, - { 232612, true }, - { 232621, true }, - { 232632, true }, - { 232644, true }, - { 232652, true }, - { 232659, true }, - { 232667, true }, - { 232678, true }, + { 232151, true }, + { 232159, true }, + { 232169, true }, + { 232178, true }, + { 232201, true }, + { 232214, true }, + { 232219, true }, + { 232229, true }, + { 232236, true }, + { 232243, true }, + { 232255, false }, + { 232274, true }, + { 232285, true }, + { 232301, true }, + { 232316, true }, + { 232331, true }, + { 232344, true }, + { 232357, true }, + { 232365, true }, + { 232375, true }, + { 232385, true }, + { 232400, true }, + { 232414, true }, + { 232442, true }, + { 232455, true }, + { 232468, true }, + { 232485, true }, + { 232493, true }, + { 232502, true }, + { 232515, true }, + { 232527, true }, + { 232534, true }, + { 232564, true }, + { 232575, true }, + { 232593, true }, + { 232601, true }, + { 232625, true }, + { 232635, true }, + { 232647, true }, + { 232658, true }, + { 232670, true }, { 232688, true }, { 232697, true }, - { 232723, true }, + { 232708, true }, + { 232720, true }, + { 232728, true }, { 232735, true }, - { 232744, true }, - { 232769, true }, - { 232789, true }, + { 232743, true }, + { 232754, true }, + { 232764, true }, + { 232773, true }, + { 232799, true }, { 232811, true }, - { 232822, true }, - { 232833, true }, + { 232820, true }, { 232845, true }, - { 232858, true }, - { 232873, true }, - { 232891, true }, - { 232904, true }, - { 232919, true }, - { 232935, true }, - { 232953, true }, + { 232865, true }, + { 232887, true }, + { 232898, true }, + { 232909, true }, + { 232921, true }, + { 232934, true }, + { 232949, true }, { 232967, true }, - { 232977, true }, - { 232989, true }, - { 232997, true }, - { 233009, true }, - { 233021, true }, - { 233032, true }, - { 233044, true }, - { 233057, true }, - { 233068, true }, - { 233081, true }, - { 233093, true }, - { 233105, false }, - { 233115, true }, - { 233126, true }, - { 233141, true }, - { 233154, true }, - { 233165, true }, - { 233175, true }, - { 233182, true }, - { 233196, true }, - { 233208, true }, - { 233220, true }, - { 233236, true }, + { 232980, true }, + { 232995, true }, + { 233011, true }, + { 233029, true }, + { 233043, true }, + { 233053, true }, + { 233065, true }, + { 233073, true }, + { 233085, true }, + { 233097, true }, + { 233108, true }, + { 233120, true }, + { 233133, true }, + { 233144, true }, + { 233157, true }, + { 233169, true }, + { 233181, false }, + { 233191, true }, + { 233202, true }, + { 233217, true }, + { 233230, true }, + { 233241, true }, { 233251, true }, - { 233264, true }, - { 233276, true }, - { 233289, true }, - { 233304, true }, - { 233311, true }, - { 233326, false }, - { 233339, true }, - { 233351, true }, - { 233360, true }, - { 233372, true }, + { 233258, true }, + { 233272, true }, + { 233284, true }, + { 233296, true }, + { 233312, true }, + { 233327, true }, + { 233340, true }, + { 233352, true }, + { 233365, true }, { 233380, true }, - { 233395, true }, - { 233410, true }, - { 233419, false }, + { 233387, true }, + { 233402, false }, + { 233415, true }, { 233427, true }, - { 233438, true }, - { 233446, true }, - { 233457, true }, - { 233468, true }, - { 233483, true }, - { 233500, true }, - { 233514, false }, - { 233526, true }, - { 233545, true }, - { 233563, true }, - { 233574, true }, - { 233594, true }, - { 233610, true }, - { 233625, true }, - { 233637, true }, - { 233647, true }, - { 233654, true }, - { 233665, true }, - { 233675, true }, - { 233681, true }, - { 233691, true }, - { 233706, true }, - { 233718, true }, + { 233436, true }, + { 233448, true }, + { 233456, true }, + { 233471, true }, + { 233486, true }, + { 233495, false }, + { 233503, true }, + { 233514, true }, + { 233522, true }, + { 233533, true }, + { 233544, true }, + { 233559, true }, + { 233576, true }, + { 233590, false }, + { 233602, true }, + { 233621, true }, + { 233639, true }, + { 233650, true }, + { 233670, true }, + { 233686, true }, + { 233701, true }, + { 233713, true }, + { 233723, true }, { 233730, true }, - { 233745, true }, - { 233756, true }, - { 233769, true }, - { 233776, true }, - { 233787, true }, - { 233798, true }, - { 233809, true }, - { 233820, true }, - { 233835, true }, - { 233859, true }, - { 233877, true }, - { 233890, true }, - { 233901, true }, - { 233916, true }, - { 233932, true }, - { 233941, true }, - { 233952, true }, - { 233976, true }, - { 233991, true }, - { 234002, true }, - { 234012, true }, - { 234020, true }, - { 234037, true }, - { 234056, true }, + { 233741, true }, + { 233751, true }, + { 233757, true }, + { 233767, true }, + { 233782, true }, + { 233794, true }, + { 233806, true }, + { 233821, true }, + { 233832, true }, + { 233845, true }, + { 233852, true }, + { 233863, true }, + { 233874, true }, + { 233885, true }, + { 233896, true }, + { 233911, true }, + { 233935, true }, + { 233953, true }, + { 233966, true }, + { 233977, true }, + { 233992, true }, + { 234008, true }, + { 234017, true }, + { 234028, true }, + { 234052, true }, { 234067, true }, - { 234077, true }, - { 234087, true }, - { 234098, true }, - { 234106, true }, - { 234120, false }, - { 234127, true }, - { 234139, true }, - { 234148, true }, - { 234162, true }, - { 234170, true }, - { 234183, true }, - { 234197, true }, - { 234218, true }, - { 234232, true }, - { 234239, true }, - { 234250, true }, - { 234260, true }, - { 234270, true }, - { 234283, true }, - { 234291, true }, - { 234300, true }, - { 234313, true }, + { 234078, true }, + { 234088, true }, + { 234096, true }, + { 234113, true }, + { 234132, true }, + { 234143, true }, + { 234153, true }, + { 234163, true }, + { 234174, true }, + { 234182, true }, + { 234196, false }, + { 234203, true }, + { 234215, true }, + { 234224, true }, + { 234238, true }, + { 234246, true }, + { 234259, true }, + { 234273, true }, + { 234294, true }, + { 234308, true }, + { 234315, true }, { 234326, true }, - { 234339, true }, - { 234349, true }, - { 234360, true }, - { 234370, true }, - { 234379, true }, + { 234336, true }, + { 234346, true }, + { 234359, true }, + { 234367, true }, + { 234376, true }, { 234389, true }, + { 234402, true }, + { 234415, true }, + { 234425, true }, + { 234436, true }, + { 234446, true }, + { 234455, true }, + { 234465, true }, }; diff --git a/testing/marionette/interaction.js b/testing/marionette/interaction.js index 52e2d755c731..2c4478bc3a21 100644 --- a/testing/marionette/interaction.js +++ b/testing/marionette/interaction.js @@ -231,7 +231,7 @@ interaction.selectOption = function (el) { * @param {string} path * Full path to file. */ -interaction.uploadFile = function (el, path) { +interaction.uploadFile = function* (el, path) { let file = yield File.createFromFileName(path).then(file => { return file; }, () => { diff --git a/testing/profiles/prefs_general.js b/testing/profiles/prefs_general.js index 0f48bcbdd7b5..c93bd0ecbdda 100644 --- a/testing/profiles/prefs_general.js +++ b/testing/profiles/prefs_general.js @@ -357,3 +357,6 @@ user_pref("media.openUnsupportedTypeWithExternalApp", false); // Disable password capture, so that mochitests that include forms aren't // influenced by the presence of the persistent doorhanger notification. user_pref("signon.rememberSignons", false); + +// Enable form autofill feature testing. +user_pref("browser.formautofill.experimental", true); diff --git a/toolkit/components/extensions/ExtensionAPI.jsm b/toolkit/components/extensions/ExtensionAPI.jsm index 54dab8e3b6fd..ee8842c2d060 100644 --- a/toolkit/components/extensions/ExtensionAPI.jsm +++ b/toolkit/components/extensions/ExtensionAPI.jsm @@ -61,7 +61,9 @@ var ExtensionAPIs = { Services.scriptloader.loadSubScript(script, api.sandbox, "UTF-8"); api.loadPromise = Schemas.load(schema).then(() => { - return Cu.evalInSandbox("API", api.sandbox); + let API = Cu.evalInSandbox("API", api.sandbox); + API.prototype.namespace = apiName; + return API; }); return api.loadPromise; diff --git a/toolkit/components/extensions/Schemas.jsm b/toolkit/components/extensions/Schemas.jsm index f5abda72a2ff..70113ea8c3de 100644 --- a/toolkit/components/extensions/Schemas.jsm +++ b/toolkit/components/extensions/Schemas.jsm @@ -13,6 +13,7 @@ const global = this; Cu.importGlobalProperties(["URL"]); +Cu.import("resource://gre/modules/AppConstants.jsm"); Cu.import("resource://gre/modules/NetUtil.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); @@ -23,22 +24,14 @@ var { instanceOf, } = ExtensionUtils; -class DeepMap extends DefaultMap { - constructor() { - super(() => new DeepMap()); - } - - getPath(...keys) { - return keys.reduce((map, prop) => map.get(prop), this); - } -} - XPCOMUtils.defineLazyServiceGetter(this, "contentPolicyService", "@mozilla.org/addons/content-policy;1", "nsIAddonContentPolicy"); this.EXPORTED_SYMBOLS = ["Schemas"]; +const {DEBUG} = AppConstants; + /* globals Schemas, URL */ function readJSON(url) { @@ -120,6 +113,66 @@ function exportLazyGetter(object, prop, getter) { }); } +/** + * Defines a lazily-instantiated property descriptor on the given + * object. Any security wrappers are waived on the object before the + * property is defined. + * + * The given getter function is guaranteed to be called only once, even + * if the target scope retrieves the wrapped getter from the property + * descriptor and calls it directly. + * + * @param {object} object + * The object on which to define the getter. + * @param {string|Symbol} prop + * The property name for which to define the getter. + * @param {function} getter + * The function to call in order to generate the final property + * descriptor object. This will be called, and the property + * descriptor installed on the object, the first time the + * property is written or read. The function may return + * undefined, which will cause the property to be deleted. + */ +function exportLazyProperty(object, prop, getter) { + object = Cu.waiveXrays(object); + + let redefine = obj => { + let desc = getter.call(obj); + if (desc === undefined) { + delete object[prop]; + } else { + let defaults = { + configurable: true, + enumerable: true, + }; + + if (!desc.set && !desc.get) { + defaults.writable = true; + } + + Object.defineProperty(object, prop, + Object.assign(defaults, desc)); + } + + getter = null; + }; + + Object.defineProperty(object, prop, { + enumerable: true, + configurable: true, + + get: Cu.exportFunction(function() { + redefine(this); + return object[prop]; + }, object), + + set: Cu.exportFunction(function(value) { + redefine(this); + object[prop] = value; + }, object), + }); +} + const POSTPROCESSORS = { convertImageDataToURL(imageData, context) { let document = context.cloneScope.document; @@ -638,17 +691,16 @@ class Entry { } /** - * Injects JS values for the entry into the extension API - * namespace. The default implementation is to do nothing. - * `context` is used to call the actual implementation - * of a given function or event. + * Returns a property descriptor for use when injecting this entry + * into an API object. * * @param {Array} path The API path, e.g. `["storage", "local"]`. - * @param {string} name The method name, e.g. "get". - * @param {object} dest The object where `path`.`name` should be stored. * @param {InjectionContext} context + * + * @returns {object|undefined} */ - inject(path, name, dest, context) { + getDescriptor(path, context) { + return undefined; } } @@ -709,11 +761,15 @@ class Type extends Entry { * schema object. */ static checkSchemaProperties(schema, path, extra = []) { - let allowedSet = new Set([...this.EXTRA_PROPERTIES, ...extra]); + if (DEBUG) { + let allowedSet = new Set([...this.EXTRA_PROPERTIES, ...extra]); - for (let prop of Object.keys(schema)) { - if (!allowedSet.has(prop)) { - throw new Error(`Internal error: Namespace ${path.join(".")} has invalid type property "${prop}" in type "${schema.id || JSON.stringify(schema)}"`); + for (let prop of Object.keys(schema)) { + if (!allowedSet.has(prop)) { + throw new Error(`Internal error: Namespace ${path.join(".")} has ` + + `invalid type property "${prop}" ` + + `in type "${schema.id || JSON.stringify(schema)}"`); + } } } } @@ -853,7 +909,7 @@ class RefType extends Type { } get targetType() { - let ns = Schemas.namespaces.get(this.namespaceName); + let ns = Schemas.getNamespace(this.namespaceName); let type = ns.get(this.reference); if (!type) { throw new Error(`Internal error: Type ${this.reference} not found`); @@ -909,15 +965,18 @@ class StringType extends Type { } format = FORMATS[schema.format]; } - return new this(schema, enumeration, + return new this(schema, + schema.id, + enumeration, schema.minLength || 0, schema.maxLength || Infinity, pattern, format); } - constructor(schema, enumeration, minLength, maxLength, pattern, format) { + constructor(schema, name, enumeration, minLength, maxLength, pattern, format) { super(schema); + this.name = name; this.enumeration = enumeration; this.minLength = minLength; this.maxLength = maxLength; @@ -972,20 +1031,22 @@ class StringType extends Type { return baseType == "string"; } - inject(path, name, dest, context) { + getDescriptor(path, context) { if (this.enumeration) { - exportLazyGetter(dest, name, () => { - let obj = Cu.createObjectIn(dest); - for (let e of this.enumeration) { - obj[e.toUpperCase()] = e; - } - return obj; - }); + let obj = Cu.createObjectIn(context.cloneScope); + + for (let e of this.enumeration) { + obj[e.toUpperCase()] = e; + } + + return {value: obj}; } } } +let FunctionEntry; let SubModuleType; + class ObjectType extends Type { static get EXTRA_PROPERTIES() { return ["properties", "patternProperties", ...super.EXTRA_PROPERTIES]; @@ -996,7 +1057,7 @@ class ObjectType extends Type { return SubModuleType.parseSchema(schema, path, extraProperties); } - if (!("$extend" in schema)) { + if (DEBUG && !("$extend" in schema)) { // Only allow extending "properties" and "patternProperties". extraProperties = ["additionalProperties", "isInstanceOf", ...extraProperties]; } @@ -1005,7 +1066,7 @@ class ObjectType extends Type { let parseProperty = (schema, extraProps = []) => { return { type: Schemas.parseSchema(schema, path, - ["unsupported", "onError", "permissions", ...extraProps]), + DEBUG && ["unsupported", "onError", "permissions", ...extraProps]), optional: schema.optional || false, unsupported: schema.unsupported || false, onError: schema.onError || null, @@ -1166,10 +1227,13 @@ class ObjectType extends Type { value = v.value; if (this.isInstanceOf) { - if (Object.keys(this.properties).length || - this.patternProperties.length || - !(this.additionalProperties instanceof AnyType)) { - throw new Error("InternalError: isInstanceOf can only be used with objects that are otherwise unrestricted"); + if (DEBUG) { + if (Object.keys(this.properties).length || + this.patternProperties.length || + !(this.additionalProperties instanceof AnyType)) { + throw new Error("InternalError: isInstanceOf can only be used " + + "with objects that are otherwise unrestricted"); + } } if (!instanceOf(value, this.isInstanceOf)) { @@ -1240,7 +1304,7 @@ SubModuleType = class SubModuleType extends Type { // The path we pass in here is only used for error messages. path = [...path, schema.id]; - let functions = schema.functions.map(fun => Schemas.parseFunction(path, fun)); + let functions = schema.functions.map(fun => FunctionEntry.parseSchema(fun, path)); return new this(functions); } @@ -1411,24 +1475,30 @@ class FunctionType extends Type { }); } } - if (isExpectingCallback) { - throw new Error(`Internal error: Expected a callback parameter with name ${schema.async}`); - } - let hasAsyncCallback = false; if (isAsync) { hasAsyncCallback = (parameters && parameters.length && parameters[parameters.length - 1].name == schema.async); + } - if (schema.returns) { - throw new Error("Internal error: Async functions must not have return values."); + if (DEBUG) { + if (isExpectingCallback) { + throw new Error(`Internal error: Expected a callback parameter ` + + `with name ${schema.async}`); } - if (schema.allowAmbiguousOptionalArguments && !hasAsyncCallback) { - throw new Error("Internal error: Async functions with ambiguous arguments must declare the callback as the last parameter"); + + if (isAsync && schema.returns) { + throw new Error("Internal error: Async functions must not " + + "have return values."); + } + if (isAsync && schema.allowAmbiguousOptionalArguments && !hasAsyncCallback) { + throw new Error("Internal error: Async functions with ambiguous " + + "arguments must declare the callback as the last parameter"); } } + return new this(schema, parameters, isAsync, hasAsyncCallback); } @@ -1457,32 +1527,32 @@ class ValueProperty extends Entry { this.value = value; } - inject(path, name, dest, context) { - dest[name] = this.value; + getDescriptor(path, context) { + return {value: this.value}; } } // Represents a "property" defined in a schema namespace that is not a // constant. class TypeProperty extends Entry { - constructor(schema, namespaceName, name, type, writable) { + constructor(schema, path, name, type, writable) { super(schema); - this.namespaceName = namespaceName; + this.path = path; this.name = name; this.type = type; this.writable = writable; } throwError(context, msg) { - throw context.makeError(`${msg} for ${this.namespaceName}.${this.name}.`); + throw context.makeError(`${msg} for ${this.path.join(".")}.${this.name}.`); } - inject(path, name, dest, context) { + getDescriptor(path, context) { if (this.unsupported) { return; } - let apiImpl = context.getImplementation(path.join("."), name); + let apiImpl = context.getImplementation(path.join("."), this.name); let getStub = () => { this.checkDeprecated(context); @@ -1490,10 +1560,7 @@ class TypeProperty extends Entry { }; let desc = { - configurable: false, - enumerable: true, - - get: Cu.exportFunction(getStub, dest), + get: Cu.exportFunction(getStub, context.cloneScope), }; if (this.writable) { @@ -1506,10 +1573,10 @@ class TypeProperty extends Entry { apiImpl.setProperty(normalized.value); }; - desc.set = Cu.exportFunction(setStub, dest); + desc.set = Cu.exportFunction(setStub, context.cloneScope); } - Object.defineProperty(dest, name, desc); + return desc; } } @@ -1524,43 +1591,47 @@ class SubModuleProperty extends Entry { // namespaceName: Namespace in which the property lives. // reference: Name of the type defining the functions to add to the property. // properties: Additional properties to add to the module (unsupported). - constructor(schema, name, namespaceName, reference, properties) { + constructor(schema, path, name, reference, properties) { super(schema); this.name = name; - this.namespaceName = namespaceName; + this.path = path; + this.namespaceName = path.join("."); this.reference = reference; this.properties = properties; } - inject(path, name, dest, context) { - exportLazyGetter(dest, name, () => { - let obj = Cu.createObjectIn(dest); + getDescriptor(path, context) { + let obj = Cu.createObjectIn(context.cloneScope); - let ns = Schemas.namespaces.get(this.namespaceName); - let type = ns.get(this.reference); - if (!type && this.reference.includes(".")) { - let [namespaceName, ref] = this.reference.split("."); - ns = Schemas.namespaces.get(namespaceName); - type = ns.get(ref); - } + let ns = Schemas.getNamespace(this.namespaceName); + let type = ns.get(this.reference); + if (!type && this.reference.includes(".")) { + let [namespaceName, ref] = this.reference.split("."); + ns = Schemas.getNamespace(namespaceName); + type = ns.get(ref); + } + + if (DEBUG) { if (!type || !(type instanceof SubModuleType)) { - throw new Error(`Internal error: ${this.namespaceName}.${this.reference} is not a sub-module`); + throw new Error(`Internal error: ${this.namespaceName}.${this.reference} ` + + `is not a sub-module`); } + } + let subpath = [path, this.name]; + let namespace = subpath.join("."); - let functions = type.functions; - for (let fun of functions) { - let subpath = path.concat(name); - let namespace = subpath.join("."); - let allowedContexts = fun.allowedContexts.length ? fun.allowedContexts : ns.defaultContexts; - if (context.shouldInject(namespace, fun.name, allowedContexts)) { - fun.inject(subpath, fun.name, obj, context); - } + let functions = type.functions; + for (let fun of functions) { + let allowedContexts = fun.allowedContexts.length ? fun.allowedContexts : ns.defaultContexts; + if (context.shouldInject(namespace, fun.name, allowedContexts)) { + exportLazyProperty(obj, fun.name, + () => fun.getDescriptor(subpath, context)); } + } - // TODO: Inject this.properties. + // TODO: Inject this.properties. - return obj; - }); + return {value: obj}; } } @@ -1655,7 +1726,19 @@ class CallEntry extends Entry { } // Represents a "function" defined in a schema namespace. -class FunctionEntry extends CallEntry { +FunctionEntry = class FunctionEntry extends CallEntry { + static parseSchema(schema, path) { + return new this(schema, path, schema.name, + Schemas.parseSchema(schema, path, + ["name", "unsupported", "returns", + "permissions", + "allowAmbiguousOptionalArguments"]), + schema.unsupported || false, + schema.allowAmbiguousOptionalArguments || false, + schema.returns || null, + schema.permissions || null); + } + constructor(schema, path, name, type, unsupported, allowAmbiguousOptionalArguments, returns, permissions) { super(schema, path, name, type.parameters, allowAmbiguousOptionalArguments); this.unsupported = unsupported; @@ -1666,7 +1749,7 @@ class FunctionEntry extends CallEntry { this.hasAsyncCallback = type.hasAsyncCallback; } - inject(path, name, dest, context) { + getDescriptor(path, context) { if (this.unsupported) { return; } @@ -1675,46 +1758,64 @@ class FunctionEntry extends CallEntry { return; } - exportLazyGetter(dest, name, () => { - let apiImpl = context.getImplementation(path.join("."), name); + let apiImpl = context.getImplementation(path.join("."), this.name); - let stub; - if (this.isAsync) { - stub = (...args) => { - this.checkDeprecated(context); - let actuals = this.checkParameters(args, context); - let callback = null; - if (this.hasAsyncCallback) { - callback = actuals.pop(); - } - if (callback === null && context.isChromeCompat) { - // We pass an empty stub function as a default callback for - // the `chrome` API, so promise objects are not returned, - // and lastError values are reported immediately. - callback = () => {}; - } - return apiImpl.callAsyncFunction(actuals, callback); - }; - } else if (!this.returns) { - stub = (...args) => { - this.checkDeprecated(context); - let actuals = this.checkParameters(args, context); - return apiImpl.callFunctionNoReturn(actuals); - }; - } else { - stub = (...args) => { - this.checkDeprecated(context); - let actuals = this.checkParameters(args, context); - return apiImpl.callFunction(actuals); - }; - } - return Cu.exportFunction(stub, dest); - }); + let stub; + if (this.isAsync) { + stub = (...args) => { + this.checkDeprecated(context); + let actuals = this.checkParameters(args, context); + let callback = null; + if (this.hasAsyncCallback) { + callback = actuals.pop(); + } + if (callback === null && context.isChromeCompat) { + // We pass an empty stub function as a default callback for + // the `chrome` API, so promise objects are not returned, + // and lastError values are reported immediately. + callback = () => {}; + } + return apiImpl.callAsyncFunction(actuals, callback); + }; + } else if (!this.returns) { + stub = (...args) => { + this.checkDeprecated(context); + let actuals = this.checkParameters(args, context); + return apiImpl.callFunctionNoReturn(actuals); + }; + } else { + stub = (...args) => { + this.checkDeprecated(context); + let actuals = this.checkParameters(args, context); + return apiImpl.callFunction(actuals); + }; + } + + return {value: Cu.exportFunction(stub, context.cloneScope)}; } -} +}; // Represents an "event" defined in a schema namespace. class Event extends CallEntry { + static parseSchema(event, path) { + let extraParameters = Array.from(event.extraParameters || [], param => ({ + type: Schemas.parseSchema(param, path, ["name", "optional", "default"]), + name: param.name, + optional: param.optional || false, + default: param.default == undefined ? null : param.default, + })); + + let extraProperties = ["name", "unsupported", "permissions", "extraParameters", + // We ignore these properties for now. + "returns", "filters"]; + + return new this(event, path, event.name, + Schemas.parseSchema(event, path, extraProperties), + extraParameters, + event.unsupported || false, + event.permissions || null); + } + constructor(schema, path, name, type, extraParameters, unsupported, permissions) { super(schema, path, name, extraParameters); this.type = type; @@ -1730,7 +1831,7 @@ class Event extends CallEntry { return r.value; } - inject(path, name, dest, context) { + getDescriptor(path, context) { if (this.unsupported) { return; } @@ -1739,33 +1840,31 @@ class Event extends CallEntry { return; } - exportLazyGetter(dest, name, () => { - let apiImpl = context.getImplementation(path.join("."), name); + let apiImpl = context.getImplementation(path.join("."), this.name); - let addStub = (listener, ...args) => { - listener = this.checkListener(listener, context); - let actuals = this.checkParameters(args, context); - apiImpl.addListener(listener, actuals); - }; + let addStub = (listener, ...args) => { + listener = this.checkListener(listener, context); + let actuals = this.checkParameters(args, context); + apiImpl.addListener(listener, actuals); + }; - let removeStub = (listener) => { - listener = this.checkListener(listener, context); - apiImpl.removeListener(listener); - }; + let removeStub = (listener) => { + listener = this.checkListener(listener, context); + apiImpl.removeListener(listener); + }; - let hasStub = (listener) => { - listener = this.checkListener(listener, context); - return apiImpl.hasListener(listener); - }; + let hasStub = (listener) => { + listener = this.checkListener(listener, context); + return apiImpl.hasListener(listener); + }; - let obj = Cu.createObjectIn(dest); + let obj = Cu.createObjectIn(context.cloneScope); - Cu.exportFunction(addStub, obj, {defineAs: "addListener"}); - Cu.exportFunction(removeStub, obj, {defineAs: "removeListener"}); - Cu.exportFunction(hasStub, obj, {defineAs: "hasListener"}); + Cu.exportFunction(addStub, obj, {defineAs: "addListener"}); + Cu.exportFunction(removeStub, obj, {defineAs: "removeListener"}); + Cu.exportFunction(hasStub, obj, {defineAs: "hasListener"}); - return obj; - }); + return {value: obj}; } } @@ -1780,6 +1879,281 @@ const TYPES = Object.freeze(Object.assign(Object.create(null), { string: StringType, })); +const LOADERS = { + events: "loadEvent", + functions: "loadFunction", + properties: "loadProperty", + types: "loadType", +}; + +class Namespace extends Map { + constructor(name, path) { + super(); + + this._lazySchemas = []; + + this.name = name; + this.path = name ? [...path, name] : [...path]; + + this.permissions = null; + this.allowedContexts = []; + this.defaultContexts = []; + } + + /** + * Adds a JSON Schema object to the set of schemas that represent this + * namespace. + * + * @param {object} schema + * A JSON schema object which partially describes this + * namespace. + */ + addSchema(schema) { + this._lazySchemas.push(schema); + + for (let prop of ["permissions", "allowedContexts", "defaultContexts"]) { + if (schema[prop]) { + this[prop] = schema[prop]; + } + } + } + + /** + * Initializes the keys of this namespace based on the schema objects + * added via previous `addSchema` calls. + */ + init() { + if (!this._lazySchemas) { + return; + } + + for (let type of Object.keys(LOADERS)) { + this[type] = new DefaultMap(() => []); + } + + for (let schema of this._lazySchemas) { + for (let type of schema.types || []) { + this.types.get(type.$extend || type.id).push(type); + } + + for (let [name, prop] of Object.entries(schema.properties || {})) { + if (!prop.unsupported) { + this.properties.get(name).push(prop); + } + } + + for (let fun of schema.functions || []) { + this.functions.get(fun.name).push(fun); + } + + for (let event of schema.events || []) { + this.events.get(event.name).push(event); + } + } + + // For each type of top-level property in the schema object, iterate + // over all properties of that type, and create a temporary key for + // each property pointing to its type. Those temporary properties + // are later used to instantiate an Entry object based on the actual + // schema object. + for (let type of Object.keys(LOADERS)) { + for (let key of this[type].keys()) { + this.set(key, type); + } + } + + this._lazySchemas = null; + + if (DEBUG) { + for (let key of this.keys()) { + this.get(key); + } + } + } + + /** + * Initializes the value of a given key, by parsing the schema object + * associated with it and replacing its temporary value with an `Entry` + * instance. + * + * @param {string} key + * The name of the property to initialize. + * @param {string} type + * The type of property the key represents. Must have a + * corresponding entry in the `LOADERS` object, pointing to the + * initialization method for that type. + * + * @returns {Entry} + */ + initKey(key, type) { + let loader = LOADERS[type]; + + for (let schema of this[type].get(key)) { + this.set(key, this[loader](key, schema)); + } + + return this.get(key); + } + + loadType(name, type) { + if ("$extend" in type) { + return this.extendType(type); + } + return Schemas.parseSchema(type, this.path, ["id"]); + } + + extendType(type) { + let targetType = this.get(type.$extend); + + // Only allow extending object and choices types for now. + if (targetType instanceof ObjectType) { + type.type = "object"; + } else if (DEBUG) { + if (!targetType) { + throw new Error(`Internal error: Attempt to extend a nonexistant type ${type.$extend}`); + } else if (!(targetType instanceof ChoiceType)) { + throw new Error(`Internal error: Attempt to extend a non-extensible type ${type.$extend}`); + } + } + + let parsed = Schemas.parseSchema(type, this.path, ["$extend"]); + + if (DEBUG && parsed.constructor !== targetType.constructor) { + throw new Error(`Internal error: Bad attempt to extend ${type.$extend}`); + } + + targetType.extend(parsed); + + return targetType; + } + + loadProperty(name, prop) { + if ("$ref" in prop) { + if (!prop.unsupported) { + return new SubModuleProperty(prop, this.path, name, + prop.$ref, prop.properties || {}); + } + } else if ("value" in prop) { + return new ValueProperty(prop, name, prop.value); + } else { + // We ignore the "optional" attribute on properties since we + // don't inject anything here anyway. + let type = Schemas.parseSchema(prop, [this.name], ["optional", "writable"]); + return new TypeProperty(prop, this.path, name, type, prop.writable || false); + } + } + + loadFunction(name, fun) { + return FunctionEntry.parseSchema(fun, this.path); + } + + loadEvent(name, event) { + return Event.parseSchema(event, this.path); + } + + /** + * Injects the properties of this namespace into the given object. + * + * @param {object} dest + * The object into which to inject the namespace properties. + * @param {InjectionContext} context + * The injection context with which to inject the properties. + */ + injectInto(dest, context) { + for (let name of this.keys()) { + exportLazyProperty(dest, name, () => { + let entry = this.get(name); + + if (entry.permissions && !entry.permissions.some(perm => context.hasPermission(perm))) { + return; + } + + let allowedContexts = entry.allowedContexts; + if (!allowedContexts.length) { + allowedContexts = this.defaultContexts; + } + + if (context.shouldInject(this.path.join("."), name, allowedContexts)) { + return entry.getDescriptor(this.path, context); + } + }); + } + } + + getDescriptor(path, context) { + let obj = Cu.createObjectIn(context.cloneScope); + + this.injectInto(obj, context); + + // Only inject the namespace object if it isn't empty. + if (Object.keys(obj).length) { + return {value: obj}; + } + } + + keys() { + this.init(); + return super.keys(); + } + + * entries() { + for (let key of this.keys()) { + yield [key, this.get(key)]; + } + } + + get(key) { + this.init(); + let value = super.get(key); + + // The initial values of lazily-initialized schema properties are + // strings, pointing to the type of property, corresponding to one + // of the entries in the `LOADERS` object. + if (typeof value === "string") { + value = this.initKey(key, value); + } + + return value; + } + + /** + * Returns a Namespace object for the given namespace name. If a + * namespace object with this name does not already exist, it is + * created. If the name contains any '.' characters, namespaces are + * recursively created, for each dot-separated component. + * + * @param {string} name + * The name of the sub-namespace to retrieve. + * + * @returns {Namespace} + */ + getNamespace(name) { + let subName; + + let idx = name.indexOf("."); + if (idx > 0) { + subName = name.slice(idx + 1); + name = name.slice(0, idx); + } + + let ns = super.get(name); + if (!ns) { + ns = new Namespace(name, this.path); + this.set(name, ns); + } + + if (subName) { + return ns.getNamespace(subName); + } + return ns; + } + + has(key) { + this.init(); + return super.has(key); + } +} + this.Schemas = { initialized: false, @@ -1789,23 +2163,14 @@ this.Schemas = { // Map[ -> Map[ -> Entry]] // This keeps track of all the schemas that have been loaded so far. - namespaces: new Map(), + rootNamespace: new Namespace("", []), - register(namespaceName, symbol, value) { - let ns = this.namespaces.get(namespaceName); - if (!ns) { - ns = new Map(); - ns.name = namespaceName; - ns.permissions = null; - ns.allowedContexts = []; - ns.defaultContexts = []; - this.namespaces.set(namespaceName, ns); - } - ns.set(symbol, value); + getNamespace(name) { + return this.rootNamespace.getNamespace(name); }, parseSchema(schema, path, extraProperties = []) { - let allowedProperties = new Set(extraProperties); + let allowedProperties = DEBUG && new Set(extraProperties); if ("choices" in schema) { return ChoiceType.parseSchema(schema, path, allowedProperties); @@ -1813,107 +2178,21 @@ this.Schemas = { return RefType.parseSchema(schema, path, allowedProperties); } - if (!("type" in schema)) { - throw new Error(`Unexpected value for type: ${JSON.stringify(schema)}`); - } - - allowedProperties.add("type"); - let type = TYPES[schema.type]; - if (!type) { - throw new Error(`Unexpected type ${schema.type}`); - } - return type.parseSchema(schema, path, allowedProperties); - }, - parseFunction(path, fun) { - let f = new FunctionEntry(fun, path, fun.name, - this.parseSchema(fun, path, - ["name", "unsupported", "returns", - "permissions", - "allowAmbiguousOptionalArguments"]), - fun.unsupported || false, - fun.allowAmbiguousOptionalArguments || false, - fun.returns || null, - fun.permissions || null); - return f; - }, + if (DEBUG) { + allowedProperties.add("type"); - loadType(namespaceName, type) { - if ("$extend" in type) { - this.extendType(namespaceName, type); - } else { - this.register(namespaceName, type.id, this.parseSchema(type, [namespaceName], ["id"])); - } - }, - - extendType(namespaceName, type) { - let ns = Schemas.namespaces.get(namespaceName); - let targetType = ns && ns.get(type.$extend); - - // Only allow extending object and choices types for now. - if (targetType instanceof ObjectType) { - type.type = "object"; - } else if (!targetType) { - throw new Error(`Internal error: Attempt to extend a nonexistant type ${type.$extend}`); - } else if (!(targetType instanceof ChoiceType)) { - throw new Error(`Internal error: Attempt to extend a non-extensible type ${type.$extend}`); - } - - let parsed = this.parseSchema(type, [namespaceName], ["$extend"]); - if (parsed.constructor !== targetType.constructor) { - throw new Error(`Internal error: Bad attempt to extend ${type.$extend}`); - } - - targetType.extend(parsed); - }, - - loadProperty(namespaceName, name, prop) { - if ("$ref" in prop) { - if (!prop.unsupported) { - this.register(namespaceName, name, new SubModuleProperty(prop, name, namespaceName, prop.$ref, - prop.properties || {})); + if (!("type" in schema)) { + throw new Error(`Unexpected value for type: ${JSON.stringify(schema)}`); + } + + if (!type) { + throw new Error(`Unexpected type ${schema.type}`); } - } else if ("value" in prop) { - this.register(namespaceName, name, new ValueProperty(prop, name, prop.value)); - } else { - // We ignore the "optional" attribute on properties since we - // don't inject anything here anyway. - let type = this.parseSchema(prop, [namespaceName], ["optional", "writable"]); - this.register(namespaceName, name, new TypeProperty(prop, namespaceName, name, type, prop.writable || false)); } - }, - loadFunction(namespaceName, fun) { - let f = this.parseFunction([namespaceName], fun); - this.register(namespaceName, fun.name, f); - }, - - loadEvent(namespaceName, event) { - let extras = event.extraParameters || []; - extras = extras.map(param => { - return { - type: this.parseSchema(param, [namespaceName], ["name", "optional", "default"]), - name: param.name, - optional: param.optional || false, - default: param.default == undefined ? null : param.default, - }; - }); - - // We ignore these properties for now. - /* eslint-disable no-unused-vars */ - let returns = event.returns; - let filters = event.filters; - /* eslint-enable no-unused-vars */ - - let type = this.parseSchema(event, [namespaceName], - ["name", "unsupported", "permissions", - "extraParameters", "returns", "filters"]); - - let e = new Event(event, [namespaceName], event.name, type, extras, - event.unsupported || false, - event.permissions || null); - this.register(namespaceName, event.name, e); + return type.parseSchema(schema, path, allowedProperties); }, init() { @@ -1949,15 +2228,15 @@ this.Schemas = { }, flushSchemas() { - XPCOMUtils.defineLazyGetter(this, "namespaces", + XPCOMUtils.defineLazyGetter(this, "rootNamespace", () => this.parseSchemas()); }, parseSchemas() { - Object.defineProperty(this, "namespaces", { + Object.defineProperty(this, "rootNamespace", { enumerable: true, configurable: true, - value: new Map(), + value: new Namespace("", []), }); for (let json of this.schemaJSON.values()) { @@ -1968,37 +2247,13 @@ this.Schemas = { } } - return this.namespaces; + return this.rootNamespace; }, loadSchema(json) { for (let namespace of json) { - let name = namespace.namespace; - - let types = namespace.types || []; - for (let type of types) { - this.loadType(name, type); - } - - let properties = namespace.properties || {}; - for (let propertyName of Object.keys(properties)) { - this.loadProperty(name, propertyName, properties[propertyName]); - } - - let functions = namespace.functions || []; - for (let fun of functions) { - this.loadFunction(name, fun); - } - - let events = namespace.events || []; - for (let event of events) { - this.loadEvent(name, event); - } - - let ns = this.namespaces.get(name); - ns.permissions = namespace.permissions || null; - ns.allowedContexts = namespace.allowedContexts || []; - ns.defaultContexts = namespace.defaultContexts || []; + this.getNamespace(namespace.namespace) + .addSchema(namespace); } }, @@ -2043,7 +2298,7 @@ this.Schemas = { * True if the context has permission for the given namespace. */ checkPermissions(namespace, wrapperFuncs) { - let ns = this.namespaces.get(namespace); + let ns = this.getNamespace(namespace); if (ns && ns.permissions) { return ns.permissions.some(perm => wrapperFuncs.hasPermission(perm)); } @@ -2063,65 +2318,7 @@ this.Schemas = { inject(dest, wrapperFuncs) { let context = new InjectionContext(wrapperFuncs); - let createNamespace = ns => { - let obj = Cu.createObjectIn(dest); - - for (let [name, entry] of ns) { - let allowedContexts = entry.allowedContexts; - if (!allowedContexts.length) { - allowedContexts = ns.defaultContexts; - } - - if (context.shouldInject(ns.name, name, allowedContexts)) { - entry.inject([ns.name], name, obj, context); - } - } - - // Remove the namespace object if it is empty - if (Object.keys(obj).length) { - return obj; - } - }; - - let createNestedNamespaces = (parent, namespaces) => { - for (let [prop, namespace] of namespaces) { - if (namespace instanceof DeepMap) { - exportLazyGetter(parent, prop, () => { - let obj = Cu.createObjectIn(parent); - createNestedNamespaces(obj, namespace); - return obj; - }); - } else { - exportLazyGetter(parent, prop, - () => createNamespace(namespace)); - } - } - }; - - let nestedNamespaces = new DeepMap(); - for (let ns of this.namespaces.values()) { - if (ns.permissions && !ns.permissions.some(perm => context.hasPermission(perm))) { - continue; - } - - if (!wrapperFuncs.shouldInject(ns.name, null, ns.allowedContexts)) { - continue; - } - - if (ns.name.includes(".")) { - let path = ns.name.split("."); - let leafName = path.pop(); - - let parent = nestedNamespaces.getPath(...path); - - parent.set(leafName, ns); - } else { - exportLazyGetter(dest, ns.name, - () => createNamespace(ns)); - } - } - - createNestedNamespaces(dest, nestedNamespaces); + this.rootNamespace.injectInto(dest, context); }, /** @@ -2135,7 +2332,7 @@ this.Schemas = { */ normalize(obj, typeName, context) { let [namespaceName, prop] = typeName.split("."); - let ns = this.namespaces.get(namespaceName); + let ns = this.getNamespace(namespaceName); let type = ns.get(prop); return type.normalize(obj, new Context(context)); diff --git a/toolkit/components/extensions/schemas/manifest.json b/toolkit/components/extensions/schemas/manifest.json index e8fe2ca04c5d..44de76be0381 100644 --- a/toolkit/components/extensions/schemas/manifest.json +++ b/toolkit/components/extensions/schemas/manifest.json @@ -1,6 +1,7 @@ [ { "namespace": "manifest", + "permissions": [], "types": [ { "id": "WebExtensionManifest", diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_create_iframe.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_create_iframe.html index a636ec73f004..ca22c724f502 100644 --- a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_create_iframe.html +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_create_iframe.html @@ -71,7 +71,7 @@ add_task(function* test_contentscript_create_iframe() { let testGetManifest = window.GET_MANIFEST(); let manifest = browser.runtime.getManifest(); - let availableAPIs = Object.keys(browser); + let availableAPIs = Object.keys(browser).filter(key => browser[key]); browser.runtime.sendMessage({ name: "content-script-iframe-loaded", diff --git a/toolkit/components/extensions/test/mochitest/test_ext_schema.html b/toolkit/components/extensions/test/mochitest/test_ext_schema.html index 8a0e11c56c08..88ba8514fa84 100644 --- a/toolkit/components/extensions/test/mochitest/test_ext_schema.html +++ b/toolkit/components/extensions/test/mochitest/test_ext_schema.html @@ -17,7 +17,7 @@ add_task(function* testEmptySchema() { function background() { browser.test.assertEq(undefined, browser.manifest, "browser.manifest is not defined"); - browser.test.assertTrue("storage" in browser, "browser.storage should be defined"); + browser.test.assertTrue(!!browser.storage, "browser.storage should be defined"); browser.test.assertEq(undefined, browser.contextMenus, "browser.contextMenus should not be defined"); browser.test.notifyPass("schema"); } diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_downloads.js b/toolkit/components/extensions/test/xpcshell/test_ext_downloads.js index 058b9b18cc07..1c6192a5e427 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_downloads.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_downloads.js @@ -31,7 +31,7 @@ add_task(function* test_downloads_api_namespace_and_permissions() { add_task(function* test_downloads_open_permission() { function backgroundScript() { - browser.test.assertFalse("open" in browser.downloads, + browser.test.assertEq(browser.downloads.open, undefined, "`downloads.open` permission is required."); browser.test.notifyPass("downloads tests"); } diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_native_messaging.js b/toolkit/components/extensions/test/xpcshell/test_ext_native_messaging.js index 5a6b628f5c77..3185fc7b4fc0 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_native_messaging.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_native_messaging.js @@ -363,10 +363,10 @@ add_task(function* test_read_limit() { // use native messaging. add_task(function* test_ext_permission() { function background() { - browser.test.assertFalse("connectNative" in chrome.runtime, "chrome.runtime.connectNative does not exist without nativeMessaging permission"); - browser.test.assertFalse("connectNative" in browser.runtime, "browser.runtime.connectNative does not exist without nativeMessaging permission"); - browser.test.assertFalse("sendNativeMessage" in chrome.runtime, "chrome.runtime.sendNativeMessage does not exist without nativeMessaging permission"); - browser.test.assertFalse("sendNativeMessage" in browser.runtime, "browser.runtime.sendNativeMessage does not exist without nativeMessaging permission"); + browser.test.assertEq(chrome.runtime.connectNative, undefined, "chrome.runtime.connectNative does not exist without nativeMessaging permission"); + browser.test.assertEq(browser.runtime.connectNative, undefined, "browser.runtime.connectNative does not exist without nativeMessaging permission"); + browser.test.assertEq(chrome.runtime.sendNativeMessage, undefined, "chrome.runtime.sendNativeMessage does not exist without nativeMessaging permission"); + browser.test.assertEq(browser.runtime.sendNativeMessage, undefined, "browser.runtime.sendNativeMessage does not exist without nativeMessaging permission"); browser.test.sendMessage("finished"); } diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_schemas.js b/toolkit/components/extensions/test/xpcshell/test_ext_schemas.js index d838be5b5192..c637eb233964 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_schemas.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_schemas.js @@ -6,6 +6,8 @@ Components.utils.import("resource://gre/modules/ExtensionCommon.jsm"); let {LocalAPIImplementation, SchemaAPIInterface} = ExtensionCommon; +const global = this; + let json = [ {namespace: "testing", @@ -383,7 +385,7 @@ let talliedErrors = []; function checkErrors(errors) { do_check_eq(talliedErrors.length, errors.length, "Got expected number of errors"); for (let [i, error] of errors.entries()) { - do_check_true(i in talliedErrors && talliedErrors[i].includes(error), + do_check_true(i in talliedErrors && String(talliedErrors[i]).includes(error), `${JSON.stringify(error)} is a substring of error ${JSON.stringify(talliedErrors[i])}`); } @@ -431,6 +433,8 @@ class TallyingAPIImplementation extends SchemaAPIInterface { let wrapper = { url: "moz-extension://b66e3509-cdb3-44f6-8eb8-c8b39b3a1d27/", + cloneScope: global, + checkLoadURL(url) { return !url.startsWith("chrome:"); }, @@ -449,8 +453,8 @@ let wrapper = { return permissions.has(permission); }, - shouldInject(ns) { - return ns != "do-not-inject"; + shouldInject(ns, name) { + return name != "do-not-inject"; }, getImplementation(namespace, name) { @@ -472,7 +476,7 @@ add_task(function* () { do_check_eq(root.testing.type1.VALUE2, "value2", "enum type"); do_check_eq("inject" in root, true, "namespace 'inject' should be injected"); - do_check_eq("do-not-inject" in root, false, "namespace 'do-not-inject' should not be injected"); + do_check_eq(root["do-not-inject"], undefined, "namespace 'do-not-inject' should not be injected"); root.testing.foo(11, true); verify("call", "testing", "foo", [11, true]); @@ -1172,9 +1176,9 @@ add_task(function* testPermissions() { equal(typeof root.noPerms, "object", "noPerms namespace should exist"); equal(typeof root.noPerms.noPerms, "function", "noPerms.noPerms method should exist"); - ok(!("fooPerm" in root.noPerms), "noPerms.fooPerm should not method exist"); + equal(root.noPerms.fooPerm, undefined, "noPerms.fooPerm should not method exist"); - ok(!("fooPerm" in root), "fooPerm namespace should not exist"); + equal(root.fooPerm, undefined, "fooPerm namespace should not exist"); do_print('Add "foo" permission'); @@ -1190,7 +1194,7 @@ add_task(function* testPermissions() { equal(typeof root.fooPerm, "object", "fooPerm namespace should exist"); equal(typeof root.fooPerm.noPerms, "function", "noPerms.noPerms method should exist"); - ok(!("fooBarPerm" in root.fooPerm), "fooPerm.fooBarPerm method should not exist"); + equal(root.fooPerm.fooBarPerm, undefined, "fooPerm.fooBarPerm method should not exist"); do_print('Add "foo.bar" permission'); @@ -1328,8 +1332,9 @@ add_task(function* testLocalAPIImplementation() { }; let localWrapper = { - shouldInject(ns) { - return ns == "testing" || ns == "testing.prop3"; + cloneScope: global, + shouldInject(ns, name) { + return name == "testing" || ns == "testing" || ns == "testing.prop3"; }, getImplementation(ns, name) { do_check_true(ns == "testing" || ns == "testing.prop3"); @@ -1410,6 +1415,7 @@ add_task(function* testDefaults() { }; let localWrapper = { + cloneScope: global, shouldInject(ns) { return true; }, diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_schemas_allowed_contexts.js b/toolkit/components/extensions/test/xpcshell/test_ext_schemas_allowed_contexts.js index 606459764ce8..b1d2b6ba4e5b 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_schemas_allowed_contexts.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_schemas_allowed_contexts.js @@ -2,6 +2,8 @@ Components.utils.import("resource://gre/modules/Schemas.jsm"); +const global = this; + let schemaJson = [ { namespace: "noAllowedContexts", @@ -66,13 +68,15 @@ let schemaJson = [ }, }, ]; + add_task(function* testRestrictions() { let url = "data:," + JSON.stringify(schemaJson); yield Schemas.load(url); let results = {}; let localWrapper = { + cloneScope: global, shouldInject(ns, name, allowedContexts) { - name = name === null ? ns : ns + "." + name; + name = ns ? ns + "." + name : name; results[name] = allowedContexts.join(","); return true; }, @@ -98,7 +102,7 @@ add_task(function* testRestrictions() { } let result = results[path]; - equal(result, expected); + equal(result, expected, path); } verify("noAllowedContexts", ""); diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_schemas_async.js b/toolkit/components/extensions/test/xpcshell/test_ext_schemas_async.js index 6397d1f96ae6..e03e58a7f736 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_schemas_async.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_schemas_async.js @@ -70,6 +70,7 @@ let context; function generateAPIs(extraWrapper, apiObj) { context = new StubContext(); let localWrapper = { + cloneScope: global, shouldInject() { return true; }, diff --git a/toolkit/components/telemetry/Scalars.yaml b/toolkit/components/telemetry/Scalars.yaml index 930624ac46c5..0f0ae9784c7c 100644 --- a/toolkit/components/telemetry/Scalars.yaml +++ b/toolkit/components/telemetry/Scalars.yaml @@ -453,3 +453,20 @@ webrtc.nicer: record_in_processes: - 'main' - 'content' + +# The following section contains content process base counters. +dom.contentprocess: + troubled_due_to_memory: + bug_numbers: + - 1305091 + description: > + The number of content processes that were marked as troubled because + it was running low on virtual memory. + expires: "58" + kind: uint + notification_emails: + - benjamin@smedbergs.us + - mconley@mozilla.com + release_channel_collection: opt-in + record_in_processes: + - 'main' diff --git a/toolkit/content/license.html b/toolkit/content/license.html index d130e8074626..59aed63f84f9 100644 --- a/toolkit/content/license.html +++ b/toolkit/content/license.html @@ -5867,7 +5867,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This license applies to certain files in the directory js/src/vtune.

-Copyright (c) 2005-2012 Intel Corporation. All rights reserved.
+Copyright (c) 2011 Intel Corporation.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/toolkit/crashreporter/client/crashreporter.exe.manifest b/toolkit/crashreporter/client/crashreporter.exe.manifest
index e6b2ceefbce6..81aa1465c6e7 100644
--- a/toolkit/crashreporter/client/crashreporter.exe.manifest
+++ b/toolkit/crashreporter/client/crashreporter.exe.manifest
@@ -26,6 +26,11 @@
     
   
 
+  
+    
+      true
+    
+  
   
     
       
diff --git a/widget/windows/WinUtils.cpp b/widget/windows/WinUtils.cpp
index 578e96874f12..2f0b6d24f724 100644
--- a/widget/windows/WinUtils.cpp
+++ b/widget/windows/WinUtils.cpp
@@ -57,6 +57,7 @@
 #include "TSFTextStore.h"
 #endif // #ifdef NS_ENABLE_TSF
 
+#include 
 #include 
 
 mozilla::LazyLogModule gWindowsLog("Widget");
diff --git a/xpcom/base/CycleCollectedJSContext.cpp b/xpcom/base/CycleCollectedJSContext.cpp
index 18114b70ead0..153b0ed21aa6 100644
--- a/xpcom/base/CycleCollectedJSContext.cpp
+++ b/xpcom/base/CycleCollectedJSContext.cpp
@@ -493,7 +493,7 @@ MozCrashWarningReporter(JSContext*, JSErrorReport*)
 }
 
 nsresult
-CycleCollectedJSContext::Initialize(JSContext* aParentContext,
+CycleCollectedJSContext::Initialize(JSRuntime* aParentRuntime,
                                     uint32_t aMaxBytes,
                                     uint32_t aMaxNurseryBytes)
 {
@@ -504,7 +504,7 @@ CycleCollectedJSContext::Initialize(JSContext* aParentContext,
   mBaseRecursionDepth = RecursionDepth();
 
   mozilla::dom::InitScriptSettings();
-  mJSContext = JS_NewContext(aMaxBytes, aMaxNurseryBytes, aParentContext);
+  mJSContext = JS_NewContext(aMaxBytes, aMaxNurseryBytes, aParentRuntime);
   if (!mJSContext) {
     return NS_ERROR_OUT_OF_MEMORY;
   }
diff --git a/xpcom/base/CycleCollectedJSContext.h b/xpcom/base/CycleCollectedJSContext.h
index 29017d702999..fa03694a8b3c 100644
--- a/xpcom/base/CycleCollectedJSContext.h
+++ b/xpcom/base/CycleCollectedJSContext.h
@@ -147,7 +147,7 @@ protected:
   virtual ~CycleCollectedJSContext();
 
   MOZ_IS_CLASS_INIT
-  nsresult Initialize(JSContext* aParentContext,
+  nsresult Initialize(JSRuntime* aParentRuntime,
                       uint32_t aMaxBytes,
                       uint32_t aMaxNurseryBytes);