From fb90e00324d415d1af35d2b0651ad76a25cb6354 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 7 Mar 2021 11:42:42 +0100 Subject: [PATCH] Patches for next release (v89) --- build/GN_ARGS | 1 - build/bromite_patches_list.txt | 17 +- build/chromium_patches_list.txt | 2 - .../AImageReader-CFI-crash-mitigations.patch | 22 +- build/patches/AV1-codec-support.patch | 47 +- ...-allow-screenshots-in-Incognito-mode.patch | 14 +- .../Add-a-proxy-configuration-page.patch | 78 +- .../Add-an-always-incognito-mode.patch | 115 +- .../Add-bookmark-import-export-actions.patch | 59 +- ...dd-custom-tab-intents-privacy-option.patch | 45 +- build/patches/Add-exit-menu-item.patch | 12 +- .../Add-flag-for-save-data-header.patch | 26 +- ...nfigure-maximum-connections-per-host.patch | 8 +- ...ontrol-video-playback-resume-feature.patch | 18 +- .../Add-flag-to-disable-IPv6-probes.patch | 14 +- build/patches/Add-flag-to-disable-WebGL.patch | 6 +- ...sable-device-motion-orientation-APIs.patch | 18 +- ...dd-history-support-in-incognito-mode.patch | 49 +- .../Add-menu-item-to-bookmark-all-tabs.patch | 78 +- .../Add-menu-item-to-view-source.patch | 16 +- .../Add-option-to-force-tablet-UI.patch | 20 +- ...-to-not-persist-tabs-across-sessions.patch | 52 +- .../Allow-playing-audio-in-background.patch | 6 +- ...site-sign-in-without-account-sign-in.patch | 2 +- ...c-dns-flag-regardless-of-SDK-version.patch | 4 +- ...e-new-tab-page-for-default-home-page.patch | 2 +- ...ioBuffer-AnalyserNode-fp-mitigations.patch | 2 +- .../Automated-domain-substitution.patch | 26732 +++++++--------- .../patches/Battery-API-return-nothing.patch | 4 +- ...the-domain-name-or-with-a-trk-scheme.patch | 12 +- ...Block-gateway-attacks-via-websockets.patch | 18 +- .../Bromite-AdBlockUpdaterService.patch | 155 +- ...webRTC-policy-to-not-use-any-address.patch | 2 +- ...DRM-media-origin-IDs-preprovisioning.patch | 2 +- build/patches/Disable-all-promo-dialogs.patch | 10 +- ...Disable-fetching-of-all-field-trials.patch | 2 +- ...media-router-and-remoting-by-default.patch | 50 +- .../Disable-metrics-on-all-I-O-threads.patch | 4 +- ...-home-to-be-opened-in-CCT-by-default.patch | 2 +- ...-omission-of-URL-elements-in-Omnibox.patch | 2 +- ...-password-reuse-detection-on-android.patch | 117 - .../patches/Disable-plugins-enumeration.patch | 4 +- .../patches/Disable-previews-by-default.patch | 2 +- ...romos-displayed-in-bookmarks-manager.patch | 391 - ...e-references-to-fonts.googleapis.com.patch | 2 +- build/patches/Disable-safe-browsing.patch | 541 +- .../Disable-seed-based-field-trials.patch | 2 +- .../Disable-smart-selection-by-default.patch | 4 +- ...isable-some-signed-exchange-features.patch | 4 +- .../Disable-sync-services-menu-entry.patch | 50 +- .../Disable-text-fragments-by-default.patch | 36 +- ...sable-third-party-cookies-by-default.patch | 2 +- .../Disable-unified-autoplay-feature.patch | 6 +- .../Do-not-compile-QR-code-sharing.patch | 16 +- .../Do-not-hide-component-extensions.patch | 2 +- .../patches/DoH-secure-mode-by-default.patch | 4 +- ...-SPPI-for-devices-with-enough-memory.patch | 4 +- ...e-app-overflow-menu-icons-by-default.patch | 2 +- ...e-darken-websites-checkbox-in-themes.patch | 4 +- ...fwrapv-in-Clang-for-non-UBSan-builds.patch | 2 +- ...ble-legacy-TLS-interstitital-warning.patch | 25 +- ...-prefetch-privacy-changes-by-default.patch | 6 +- ...uced-referrer-granularity-by-default.patch | 23 - .../Enable-user-agent-freeze-by-default.patch | 4 +- .../Fix-favicons-fallback-search.patch | 25 - .../patches/Hide-send-reports-checkbox.patch | 4 +- ...of-autocomplete-matches-from-5-to-10.patch | 16 +- ...ripts-for-AMP-tracking-ads-and-video.patch | 14 +- .../patches/Modify-default-preferences.patch | 16 +- ...nt-settings-back-to-privacy-settings.patch | 67 +- .../Multiple-fingerprinting-mitigations.patch | 89 +- .../Never-send-any-crash-upload-data.patch | 2 +- ...uiltin-autocomplete-for-chrome-flags.patch | 2 +- .../Open-YouTube-links-in-Bromite.patch | 12 +- .../Password-service-build-fixes.patch | 103 - ...ders-in-DoH-requests-to-bare-minimum.patch | 10 +- build/patches/Remove-SMS-integration.patch | 47 +- .../Remove-binary-blob-integrations.patch | 4968 +++ ...cklisted-URLs-upon-bookmark-creation.patch | 10 +- ...ncy-on-auth-signin-dynamic-and-tasks.patch | 763 - ...dependency-on-com.google.android.gcm.patch | 22 - ...dency-on-com.google.android.gms.auth.patch | 162 - ...dency-on-com.google.android.gms.cast.patch | 1628 - ...ndency-on-com.google.android.gms.gcm.patch | 398 - ...ependency-on-com.google.android.play.patch | 504 - ...ncy-on-fido-iid-instantapps-location.patch | 649 - ...dependency-on-flags-places-and-stats.patch | 52 - ...ncy-on-vision-clearcut-and-phenotype.patch | 576 - .../patches/Remove-google_services_gcm.patch | 110 - build/patches/Remove-help-menu-item.patch | 4 +- ...e-signin-and-data-saver-integrations.patch | 716 +- ...ce-DoH-probe-domain-with-RIPE-domain.patch | 2 +- .../Restore-Search-Ready-Omnibox-flag.patch | 24 +- .../Restore-Simplified-NTP-launch.patch | 52 +- .../Restore-classic-new-tab-page.patch | 4 +- ...-enable-horizontal-tab-switcher-flag.patch | 2 +- ...emove-disable-pull-to-refresh-effect.patch | 16 +- ...vert-flags-remove-num-raster-threads.patch | 16 +- ...moval-of-an-option-to-block-autoplay.patch | 90 +- .../Show-site-settings-for-cookies.patch | 117 +- .../Skip-the-first-run-and-metrics.patch | 10 +- .../Switch-to-fstack-protector-strong.patch | 4 +- build/patches/Timezone-customization.patch | 271 +- build/patches/Update-i18n-zh_CN-support.patch | 48 +- .../Use-4-tile-rows-never-show-logo.patch | 37 +- build/patches/User-agent-customization.patch | 224 +- ...ll-disable-autofill-download-manager.patch | 37 +- ...vice-disable-more-privacy-nightmares.patch | 4 +- ...build-remove-calling-untrusted-hooks.patch | 8 +- build/patches/disable-AdsBlockedInfoBar.patch | 18 +- .../disable-WebView-variations-support.patch | 2 +- ...fill-server-communication-by-default.patch | 2 +- .../disable-background-sync-by-default.patch | 2 +- ...disable-browser-autologin-by-default.patch | 2 +- ...nsors-access-site-setting-by-default.patch | 2 +- ...IPv6-connectivity-probes-to-RIPE-DNS.patch | 2 +- ...t_run-deactivate-autoupdate-globally.patch | 4 +- build/patches/kill-Auth.patch | 42 +- build/patches/kill-GCM.patch | 575 - .../kill-Location-fall-back-to-system.patch | 2 +- .../kill-TOS-and-metrics-opt-out.patch | 37 +- build/patches/kill-Vision.patch | 14 +- ...nH264-enable-ARM-ARM64-optimizations.patch | 22 +- ...pt-for-download-directory-by-default.patch | 2 +- ...efs-disable-signinallowed-by-default.patch | 2 +- ...g-of-translate-languages-from-server.patch | 4 +- ...romium-Disable-Google-host-detection.patch | 4 +- ...hromium-Disable-Network-Time-Tracker.patch | 2 +- ...-chromium-Disable-domain-reliability.patch | 2 +- ...gled-chromium-Disable-profile-avatar.patch | 4 +- ...romium-Disable-translate-integration.patch | 100 +- ...ed-chromium-Disable-untraceable-URLs.patch | 34 +- ...chromium-Disable-webRTC-log-uploader.patch | 4 +- 133 files changed, 18007 insertions(+), 23793 deletions(-) delete mode 100644 build/patches/Disable-password-reuse-detection-on-android.patch delete mode 100644 build/patches/Disable-promos-displayed-in-bookmarks-manager.patch delete mode 100644 build/patches/Enable-reduced-referrer-granularity-by-default.patch delete mode 100644 build/patches/Fix-favicons-fallback-search.patch delete mode 100644 build/patches/Password-service-build-fixes.patch create mode 100644 build/patches/Remove-binary-blob-integrations.patch delete mode 100644 build/patches/Remove-dependency-on-auth-signin-dynamic-and-tasks.patch delete mode 100644 build/patches/Remove-dependency-on-com.google.android.gcm.patch delete mode 100644 build/patches/Remove-dependency-on-com.google.android.gms.auth.patch delete mode 100644 build/patches/Remove-dependency-on-com.google.android.gms.cast.patch delete mode 100644 build/patches/Remove-dependency-on-com.google.android.gms.gcm.patch delete mode 100644 build/patches/Remove-dependency-on-com.google.android.play.patch delete mode 100644 build/patches/Remove-dependency-on-fido-iid-instantapps-location.patch delete mode 100644 build/patches/Remove-dependency-on-flags-places-and-stats.patch delete mode 100644 build/patches/Remove-dependency-on-vision-clearcut-and-phenotype.patch delete mode 100644 build/patches/Remove-google_services_gcm.patch delete mode 100644 build/patches/kill-GCM.patch diff --git a/build/GN_ARGS b/build/GN_ARGS index 89f8cd2e..a33a7ab3 100644 --- a/build/GN_ARGS +++ b/build/GN_ARGS @@ -37,7 +37,6 @@ use_debug_fission=true use_errorprone_java_compiler=false use_gnome_keyring=false use_official_google_api_keys=false -use_openh264=true use_rtti=false use_sysroot=false webview_includes_weblayer=false diff --git a/build/bromite_patches_list.txt b/build/bromite_patches_list.txt index 653ad966..e14fb736 100644 --- a/build/bromite_patches_list.txt +++ b/build/bromite_patches_list.txt @@ -1,5 +1,4 @@ Disable-third-party-cookies-by-default.patch -Password-service-build-fixes.patch Restore-classic-new-tab-page.patch Always-use-new-tab-page-for-default-home-page.patch Always-allow-partner-customisation.patch @@ -56,7 +55,6 @@ Disable-metrics-on-all-I-O-threads.patch Always-respect-async-dns-flag-regardless-of-SDK-version.patch Add-flag-to-configure-maximum-connections-per-host.patch Add-bookmark-import-export-actions.patch -Disable-promos-displayed-in-bookmarks-manager.patch Add-an-always-incognito-mode.patch Add-custom-tab-intents-privacy-option.patch Add-option-to-not-persist-tabs-across-sessions.patch @@ -74,17 +72,7 @@ kill-TOS-and-metrics-opt-out.patch kill-Vision.patch kill-Location-fall-back-to-system.patch kill-Auth.patch -Remove-dependency-on-com.google.android.gms.auth.patch -kill-GCM.patch -Remove-dependency-on-com.google.android.gcm.patch -Remove-dependency-on-com.google.android.gms.gcm.patch -Remove-dependency-on-com.google.android.play.patch -Remove-dependency-on-vision-clearcut-and-phenotype.patch -Remove-dependency-on-flags-places-and-stats.patch -Remove-dependency-on-fido-iid-instantapps-location.patch -Remove-dependency-on-com.google.android.gms.cast.patch -Remove-dependency-on-auth-signin-dynamic-and-tasks.patch -Remove-google_services_gcm.patch +Remove-binary-blob-integrations.patch Remove-SMS-integration.patch Do-not-compile-QR-code-sharing.patch Allow-website-sign-in-without-account-sign-in.patch @@ -116,7 +104,6 @@ DoH-secure-mode-by-default.patch Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch Revert-flags-remove-disable-pull-to-refresh-effect.patch Use-dummy-DFM-installer.patch -Disable-password-reuse-detection-on-android.patch Disable-feeds-support-by-default.patch Disable-autofill-assistant-by-default.patch Show-site-settings-for-cookies.patch @@ -132,7 +119,6 @@ Add-menu-item-to-view-source.patch Enable-legacy-TLS-interstitital-warning.patch Block-gateway-attacks-via-websockets.patch Enable-prefetch-privacy-changes-by-default.patch -Enable-reduced-referrer-granularity-by-default.patch Disable-support-for-RAR-files-inspection.patch Add-history-support-in-incognito-mode.patch Enable-darken-websites-checkbox-in-themes.patch @@ -155,7 +141,6 @@ Disable-unified-autoplay-feature.patch Revert-flags-remove-num-raster-threads.patch webview-Hard-no-to-persistent-histograms.patch Ignore-enterprise-policies-for-secure-DNS.patch -Fix-favicons-fallback-search.patch Enable-app-overflow-menu-icons-by-default.patch Add-menu-item-to-bookmark-all-tabs.patch Add-flag-for-save-data-header.patch diff --git a/build/chromium_patches_list.txt b/build/chromium_patches_list.txt index 3bb854b2..e24c8063 100644 --- a/build/chromium_patches_list.txt +++ b/build/chromium_patches_list.txt @@ -1,6 +1,4 @@ AV1-codec-support.patch Switch-to-fstack-protector-strong.patch Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch -Disable-password-reuse-detection-on-android.patch Disable-feeds-support-by-default.patch -Password-service-build-fixes.patch diff --git a/build/patches/AImageReader-CFI-crash-mitigations.patch b/build/patches/AImageReader-CFI-crash-mitigations.patch index 4ec937ac..a94a5767 100644 --- a/build/patches/AImageReader-CFI-crash-mitigations.patch +++ b/build/patches/AImageReader-CFI-crash-mitigations.patch @@ -83,15 +83,15 @@ diff --git a/base/android/android_image_reader_compat.h b/base/android/android_i diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -1712,7 +1712,7 @@ +@@ -1724,7 +1724,7 @@ { - "name": "enable-image-reader", - "owners": [ "vikassoni", "khushalsagar" ], + "name": "enable-heavy-ad-intervention", + "owners": [ "johnidel", "jkarlin" ], - "expiry_milestone": 90 + "expiry_milestone": -1 }, { - "name": "enable-immersive-fullscreen-toolbar", + "name": "enable-heuristic-stylus-palm-rejection", diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json @@ -132,7 +132,7 @@ diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc + // Used to limit GL version to 2.0 for skia raster on Android. const base::Feature kUseGles2ForOopR{"UseGles2ForOopR", - base::FEATURE_ENABLED_BY_DEFAULT}; + base::FEATURE_DISABLED_BY_DEFAULT}; @@ -55,7 +60,11 @@ const base::FeatureParam kAndroidSurfaceControlBlocklist{ // Use AImageReader for MediaCodec and MediaPlyer on android. @@ -170,7 +170,7 @@ diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc if (!gpu_preferences.enable_android_surface_control) return kGpuFeatureStatusDisabled; -@@ -327,6 +330,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) { +@@ -316,6 +319,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) { gpu_feature_info->status_values[GPU_FEATURE_TYPE_ACCELERATED_WEBGL2] = kGpuFeatureStatusBlocklisted; } @@ -190,13 +190,13 @@ diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list disable_2d_canvas_auto_flush disable_accelerated_av1_decode +disable_aimagereader + disable_accelerated_av1_decode_d3d11 disable_accelerated_vp8_decode disable_accelerated_vp8_encode - disable_accelerated_vp9_decode diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc --- a/gpu/ipc/service/gpu_init.cc +++ b/gpu/ipc/service/gpu_init.cc -@@ -464,6 +464,11 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, +@@ -477,6 +477,11 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, } } @@ -219,7 +219,7 @@ diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_ #include "base/android/scoped_hardware_buffer_fence_sync.h" #include "base/bind.h" #include "base/feature_list.h" -@@ -47,7 +48,15 @@ std::unique_ptr MakeCurrent( +@@ -48,7 +49,15 @@ std::unique_ptr MakeCurrent( } TextureOwner::Mode GetTextureOwnerMode() { @@ -239,7 +239,7 @@ diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -571,6 +571,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning", +@@ -604,6 +604,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning", const base::Feature kMediaDrmPreprovisioningAtStartup{ "MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT}; @@ -253,7 +253,7 @@ diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc diff --git a/media/base/media_switches.h b/media/base/media_switches.h --- a/media/base/media_switches.h +++ b/media/base/media_switches.h -@@ -194,6 +194,7 @@ MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture; +@@ -206,6 +206,7 @@ MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture; MEDIA_EXPORT extern const base::Feature kMediaDrmPersistentLicense; MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioning; MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioningAtStartup; diff --git a/build/patches/AV1-codec-support.patch b/build/patches/AV1-codec-support.patch index 38481e21..34295a30 100644 --- a/build/patches/AV1-codec-support.patch +++ b/build/patches/AV1-codec-support.patch @@ -5,7 +5,6 @@ Subject: AV1 codec support libaom build fixes (requires -fPIC) Report AV1 as playable on Android --- - media/base/mime_util_internal.cc | 6 +++++- third_party/libaom/BUILD.gn | 6 ++++-- third_party/libaom/libaom_srcs.gni | 5 +++++ .../config/linux/arm-neon-cpu-detect/config/aom_config.asm | 2 +- @@ -20,26 +19,8 @@ Report AV1 as playable on Android .../libaom/source/config/linux/generic/config/aom_config.h | 2 +- .../libaom/source/config/linux/x64/config/aom_config.asm | 2 +- .../libaom/source/config/linux/x64/config/aom_config.h | 2 +- - 15 files changed, 26 insertions(+), 15 deletions(-) + 14 files changed, 21 insertions(+), 14 deletions(-) -diff --git a/media/base/mime_util_internal.cc b/media/base/mime_util_internal.cc ---- a/media/base/mime_util_internal.cc -+++ b/media/base/mime_util_internal.cc -@@ -565,9 +565,13 @@ bool MimeUtil::IsCodecSupportedOnAndroid( - case THEORA: - return false; - -- // AV1 is not supported on Android yet. -+ // AV1 is supported on Android. - case AV1: -+#if BUILDFLAG(ENABLE_AV1_DECODER) -+ return true; -+#else - return false; -+#endif - - // ---------------------------------------------------------------------- - // The remaining codecs may be supported depending on platform abilities. diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn --- a/third_party/libaom/BUILD.gn +++ b/third_party/libaom/BUILD.gn @@ -73,7 +54,7 @@ diff --git a/third_party/libaom/BUILD.gn b/third_party/libaom/BUILD.gn diff --git a/third_party/libaom/libaom_srcs.gni b/third_party/libaom/libaom_srcs.gni --- a/third_party/libaom/libaom_srcs.gni +++ b/third_party/libaom/libaom_srcs.gni -@@ -672,6 +672,11 @@ aom_mem_sources = [ +@@ -616,6 +616,11 @@ aom_mem_sources = [ aom_ports_asm_x86 = [ "//third_party/libaom/source/libaom/aom_ports/emms.asm" ] @@ -95,7 +76,7 @@ diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/a -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 1 diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h --- a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/aom_config.h @@ -107,7 +88,7 @@ diff --git a/third_party/libaom/source/config/linux/arm-neon-cpu-detect/config/a -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 1 diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm --- a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.asm @@ -119,7 +100,7 @@ diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.a -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 0 diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h b/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h --- a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h @@ -131,7 +112,7 @@ diff --git a/third_party/libaom/source/config/linux/arm-neon/config/aom_config.h -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 0 diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.asm b/third_party/libaom/source/config/linux/arm/config/aom_config.asm --- a/third_party/libaom/source/config/linux/arm/config/aom_config.asm @@ -143,7 +124,7 @@ diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.asm b/ -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 0 diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.h b/third_party/libaom/source/config/linux/arm/config/aom_config.h --- a/third_party/libaom/source/config/linux/arm/config/aom_config.h @@ -155,7 +136,7 @@ diff --git a/third_party/libaom/source/config/linux/arm/config/aom_config.h b/th -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 0 diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm b/third_party/libaom/source/config/linux/arm64/config/aom_config.asm --- a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm @@ -167,7 +148,7 @@ diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.asm -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 0 diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.h b/third_party/libaom/source/config/linux/arm64/config/aom_config.h --- a/third_party/libaom/source/config/linux/arm64/config/aom_config.h @@ -179,7 +160,7 @@ diff --git a/third_party/libaom/source/config/linux/arm64/config/aom_config.h b/ -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 0 diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.asm b/third_party/libaom/source/config/linux/generic/config/aom_config.asm --- a/third_party/libaom/source/config/linux/generic/config/aom_config.asm @@ -191,7 +172,7 @@ diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.as -CONFIG_PIC equ 0 +CONFIG_PIC equ 1 CONFIG_RD_DEBUG equ 0 - CONFIG_REALTIME_ONLY equ 0 + CONFIG_REALTIME_ONLY equ 1 CONFIG_RUNTIME_CPU_DETECT equ 1 diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.h b/third_party/libaom/source/config/linux/generic/config/aom_config.h --- a/third_party/libaom/source/config/linux/generic/config/aom_config.h @@ -203,7 +184,7 @@ diff --git a/third_party/libaom/source/config/linux/generic/config/aom_config.h -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 1 diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.asm b/third_party/libaom/source/config/linux/x64/config/aom_config.asm --- a/third_party/libaom/source/config/linux/x64/config/aom_config.asm @@ -215,7 +196,7 @@ diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.asm b/ -%define CONFIG_PIC 0 +%define CONFIG_PIC 1 %define CONFIG_RD_DEBUG 0 - %define CONFIG_REALTIME_ONLY 0 + %define CONFIG_REALTIME_ONLY 1 %define CONFIG_RUNTIME_CPU_DETECT 1 diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.h b/third_party/libaom/source/config/linux/x64/config/aom_config.h --- a/third_party/libaom/source/config/linux/x64/config/aom_config.h @@ -227,7 +208,7 @@ diff --git a/third_party/libaom/source/config/linux/x64/config/aom_config.h b/th -#define CONFIG_PIC 0 +#define CONFIG_PIC 1 #define CONFIG_RD_DEBUG 0 - #define CONFIG_REALTIME_ONLY 0 + #define CONFIG_REALTIME_ONLY 1 #define CONFIG_RUNTIME_CPU_DETECT 1 -- 2.17.1 diff --git a/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch b/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch index 1cdcde8c..f6c54c50 100644 --- a/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch +++ b/build/patches/Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch @@ -17,7 +17,7 @@ See also: diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5188,6 +5188,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5387,6 +5387,12 @@ const FeatureEntry kFeatureEntries[] = { SINGLE_VALUE_TYPE(switches::kEnableGPUServiceLogging)}, #if !defined(OS_ANDROID) @@ -33,7 +33,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -522,6 +522,11 @@ const char kEnableAutofillCreditCardAuthenticationDescription[] = +@@ -533,6 +533,11 @@ const char kEnableAutofillCreditCardAuthenticationDescription[] = "authenticator (if available) to verify card ownership when retrieving " "credit cards from Google Payments."; @@ -48,7 +48,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -321,6 +321,9 @@ extern const char kEnableAutofillCacheServerCardInfoDescription[]; +@@ -329,6 +329,9 @@ extern const char kEnableAutofillAccountWalletStorageDescription[]; extern const char kEnableAutofillCreditCardAblationExperimentDisplayName[]; extern const char kEnableAutofillCreditCardAblationExperimentDescription[]; @@ -61,7 +61,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl b/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl --- a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl +++ b/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmpl -@@ -144,10 +144,6 @@ public abstract class ChromeSwitches {{ +@@ -147,10 +147,6 @@ public abstract class ChromeSwitches {{ /** Switch for enabling the Chrome Survey. */ public static final String CHROME_FORCE_ENABLE_SURVEY = "force-enable-chrome-survey"; @@ -75,7 +75,7 @@ diff --git a/chrome/browser/flags/android/java_templates/ChromeSwitches.java.tmp diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc -@@ -324,6 +324,9 @@ const char kHomePage[] = "homepage"; +@@ -334,6 +334,9 @@ const char kHomePage[] = "homepage"; // Causes the browser to launch directly in incognito mode. const char kIncognito[] = "incognito"; @@ -88,14 +88,14 @@ diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h -@@ -108,6 +108,7 @@ extern const char kForceFirstRun[]; +@@ -113,6 +113,7 @@ extern const char kForceFirstRun[]; extern const char kForceStackedTabStripLayout[]; extern const char kHomePage[]; extern const char kIncognito[]; +extern const char kEnableIncognitoSnapshotsInAndroidRecents[]; extern const char kInstallAutogeneratedTheme[]; extern const char kInstallChromeApp[]; - extern const char kInstallSupervisedUserAllowlists[]; + extern const char kInstantProcess[]; -- 2.17.1 diff --git a/build/patches/Add-a-proxy-configuration-page.patch b/build/patches/Add-a-proxy-configuration-page.patch index bb24659d..beff729d 100644 --- a/build/patches/Add-a-proxy-configuration-page.patch +++ b/build/patches/Add-a-proxy-configuration-page.patch @@ -11,7 +11,7 @@ for SimpleURLLoaders as well. --- chrome/android/java/res/values/values.xml | 3 + .../java/res/xml/privacy_preferences.xml | 4 + - .../privacy/settings/PrivacySettings.java | 5 +- + .../privacy/settings/PrivacySettings.java | 6 +- .../chrome_autocomplete_provider_client.cc | 2 + chrome/browser/browser_resources.grd | 6 + chrome/browser/net/proxy_service_factory.cc | 23 +- @@ -33,7 +33,7 @@ for SimpleURLLoaders as well. .../proxy_config/proxy_config_dictionary.h | 7 +- net/proxy_resolution/proxy_config.cc | 52 ++- net/proxy_resolution/proxy_config.h | 3 + - 24 files changed, 997 insertions(+), 15 deletions(-) + 24 files changed, 998 insertions(+), 15 deletions(-) create mode 100644 chrome/browser/resources/proxy_config.css create mode 100644 chrome/browser/resources/proxy_config.html create mode 100644 chrome/browser/resources/proxy_config.js @@ -70,27 +70,30 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -51,12 +51,15 @@ public class PrivacySettings - private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data"; - private static final String PREF_ALWAYS_INCOGNITO = "always_incognito"; - public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents"; -+ private static final String PREF_PROXY_OPTIONS = "proxy"; -+ - private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA, +@@ -54,7 +54,9 @@ public class PrivacySettings PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS, - PREF_SECURE_DNS, PREF_DO_NOT_TRACK, - PREF_ALWAYS_INCOGNITO, - PREF_ALLOW_CUSTOM_TAB_INTENTS, -- PREF_CLOSE_TABS_ON_EXIT -+ PREF_CLOSE_TABS_ON_EXIT, + PREF_CLOSE_TABS_ON_EXIT, + PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX, +- PREF_ALLOW_CUSTOM_TAB_INTENTS}; ++ PREF_ALLOW_CUSTOM_TAB_INTENTS, + PREF_PROXY_OPTIONS - }; ++ }; private ManagedPreferenceDelegate mManagedPreferenceDelegate; + +@@ -62,6 +64,8 @@ public class PrivacySettings + + private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit"; + ++ private static final String PREF_PROXY_OPTIONS = "proxy"; ++ + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + PrivacyPreferencesManagerImpl privacyPrefManager = diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -@@ -331,6 +331,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { +@@ -332,6 +332,8 @@ ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { std::vector builtins_to_provide; builtins_to_provide.push_back( base::ASCIIToUTF16(chrome::kChromeUIFlagsURL)); @@ -102,7 +105,7 @@ diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd -@@ -128,6 +128,12 @@ +@@ -136,6 +136,12 @@ @@ -118,7 +121,7 @@ diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resou diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/proxy_service_factory.cc --- a/chrome/browser/net/proxy_service_factory.cc +++ b/chrome/browser/net/proxy_service_factory.cc -@@ -14,6 +14,9 @@ +@@ -15,6 +15,9 @@ #include "content/public/browser/browser_thread.h" #include "net/proxy_resolution/configured_proxy_resolution_service.h" #include "net/proxy_resolution/proxy_config_service.h" @@ -126,9 +129,9 @@ diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/pr +#include "components/prefs/pref_service.h" +#include "components/prefs/pref_registry_simple.h" - #if defined(OS_CHROMEOS) + #if BUILDFLAG(IS_CHROMEOS_ASH) #include "chromeos/network/proxy/proxy_config_service_impl.h" -@@ -58,7 +61,20 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile( +@@ -59,7 +62,20 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile( return std::make_unique( profile_prefs, local_state_prefs, nullptr); #else @@ -147,19 +150,18 @@ diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/pr + local_state_prefs->CommitPendingWrite(); + } + return std::make_unique(local_state_prefs, nullptr); - #endif // defined(OS_CHROMEOS) + #endif // BUILDFLAG(IS_CHROMEOS_ASH) } -@@ -74,3 +90,8 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState( +@@ -75,3 +91,8 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState( nullptr); - #endif // defined(OS_CHROMEOS) + #endif // BUILDFLAG(IS_CHROMEOS_ASH) } + +// static +void ProxyServiceFactory::RegisterPrefs(PrefRegistrySimple* registry) { + registry->RegisterBooleanPref("proxy_migrated", false); +} -\ No newline at end of file diff --git a/chrome/browser/net/proxy_service_factory.h b/chrome/browser/net/proxy_service_factory.h --- a/chrome/browser/net/proxy_service_factory.h +++ b/chrome/browser/net/proxy_service_factory.h @@ -183,16 +185,16 @@ diff --git a/chrome/browser/net/proxy_service_factory.h b/chrome/browser/net/pro diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -401,6 +401,8 @@ - #include "chrome/browser/media/kaleidoscope/kaleidoscope_prefs.h" +@@ -410,6 +410,8 @@ + #include "chrome/browser/media/feeds/media_feeds_service.h" #endif +#include "chrome/browser/net/proxy_service_factory.h" + namespace { - // Deprecated 9/2019 -@@ -642,6 +644,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { + #if BUILDFLAG(IS_CHROMEOS_ASH) +@@ -697,6 +699,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { PluginsResourceService::RegisterPrefs(registry); #endif @@ -204,7 +206,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse diff --git a/chrome/browser/prefs/chrome_command_line_pref_store.cc b/chrome/browser/prefs/chrome_command_line_pref_store.cc --- a/chrome/browser/prefs/chrome_command_line_pref_store.cc +++ b/chrome/browser/prefs/chrome_command_line_pref_store.cc -@@ -155,7 +155,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() { +@@ -156,7 +156,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() { SetValue( proxy_config::prefs::kProxy, std::make_unique(ProxyConfigDictionary::CreateFixedServers( @@ -635,7 +637,7 @@ new file mode 100644 diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -250,6 +250,8 @@ static_library("ui") { +@@ -254,6 +254,8 @@ static_library("ui") { "webui/metrics_handler.h", "webui/net_export_ui.cc", "webui/net_export_ui.h", @@ -647,15 +649,15 @@ diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc -@@ -63,6 +63,7 @@ +@@ -62,6 +62,7 @@ #include "chrome/browser/ui/webui/omnibox/omnibox_ui.h" - #include "chrome/browser/ui/webui/policy_ui.h" + #include "chrome/browser/ui/webui/policy/policy_ui.h" #include "chrome/browser/ui/webui/predictors/predictors_ui.h" +#include "chrome/browser/ui/webui/proxy_config_ui.h" #include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h" #include "chrome/browser/ui/webui/settings/settings_ui.h" - #include "chrome/browser/ui/webui/settings_utils.h" -@@ -555,6 +556,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, + #include "chrome/browser/ui/webui/settings/settings_utils.h" +@@ -545,6 +546,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; if (url.host_piece() == chrome::kChromeUINetExportHost) return &NewWebUI; @@ -1127,7 +1129,7 @@ new file mode 100644 diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc -@@ -32,6 +32,8 @@ const char kChromeUICertificateViewerHost[] = "view-cert"; +@@ -33,6 +33,8 @@ const char kChromeUICertificateViewerHost[] = "view-cert"; const char kChromeUICertificateViewerURL[] = "chrome://view-cert/"; const char kChromeUIChromeSigninHost[] = "chrome-signin"; const char kChromeUIChromeSigninURL[] = "chrome://chrome-signin/"; @@ -1136,7 +1138,7 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons const char kChromeUIChromeURLsHost[] = "chrome-urls"; const char kChromeUIChromeURLsURL[] = "chrome://chrome-urls/"; const char kChromeUIComponentsHost[] = "components"; -@@ -322,6 +324,7 @@ bool IsSystemWebUIHost(base::StringPiece host) { +@@ -325,6 +327,7 @@ bool IsSystemWebUIHost(base::StringPiece host) { kChromeUIMobileSetupHost, kChromeUIMultiDeviceSetupHost, kChromeUINetworkHost, @@ -1144,9 +1146,9 @@ diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_cons kChromeUIOobeHost, kChromeUIOSCreditsHost, kChromeUIOSSettingsHost, -@@ -518,6 +521,7 @@ const char* const kChromeHostURLs[] = { +@@ -523,6 +526,7 @@ const char* const kChromeHostURLs[] = { #if !defined(OS_ANDROID) - #if !defined(OS_CHROMEOS) + #if !BUILDFLAG(IS_CHROMEOS_ASH) kChromeUIAppLauncherPageHost, + kChromeUIProxyConfigHost, #endif diff --git a/build/patches/Add-an-always-incognito-mode.patch b/build/patches/Add-an-always-incognito-mode.patch index f6df0ec1..0f9e645a 100644 --- a/build/patches/Add-an-always-incognito-mode.patch +++ b/build/patches/Add-an-always-incognito-mode.patch @@ -9,20 +9,20 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c --- chrome/android/chrome_java_sources.gni | 1 + .../java/res/xml/privacy_preferences.xml | 5 ++ - .../AlwaysIncognitoLinkInterceptor.java | 74 +++++++++++++++++++ + .../AlwaysIncognitoLinkInterceptor.java | 80 +++++++++++++++++++ .../chrome/browser/ChromeTabbedActivity.java | 6 +- .../chrome/browser/app/ChromeActivity.java | 4 + .../AppMenuPropertiesDelegateImpl.java | 6 ++ .../ChromeContextMenuPopulator.java | 9 ++- .../CustomTabIntentDataProvider.java | 5 +- - .../browser/init/StartupTabPreloader.java | 11 ++- - .../privacy/settings/PrivacySettings.java | 4 +- + .../browser/init/StartupTabPreloader.java | 14 +++- + .../privacy/settings/PrivacySettings.java | 2 + .../browser/tabmodel/ChromeTabCreator.java | 16 +++- .../browser/tabmodel/TabPersistentStore.java | 10 +++ .../webapps/WebappIntentDataProvider.java | 14 ++++ .../flags/android/chrome_feature_list.cc | 2 +- .../strings/android_chrome_strings.grd | 7 ++ - 15 files changed, 164 insertions(+), 10 deletions(-) + 15 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni @@ -55,7 +55,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognito new file mode 100644 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java -@@ -0,0 +1,74 @@ +@@ -0,0 +1,80 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -71,6 +71,7 @@ new file mode 100644 +import org.chromium.chrome.browser.tab.TabLaunchType; +import org.chromium.chrome.browser.tabmodel.TabModel; +import org.chromium.content_public.browser.LoadUrlParams; ++import org.chromium.url.GURL; + +import java.util.HashMap; +import java.util.HashSet; @@ -105,14 +106,17 @@ new file mode 100644 + } + + @Override -+ public void onUpdateUrl(final Tab tab, final String url) { ++ public void onUpdateUrl(Tab tab, GURL gurl) { + + if (tab == null) return; -+ if (url == null) return; ++ if (gurl == null) return; + if (tab.isIncognito()) return; + if (alwaysIncognitoContainer == null) return; + -+ final String lastUrl = lastUrls.put(tab, url); ++ String spec = gurl.getValidSpecOrEmpty(); ++ if (spec == null) return; ++ ++ final String lastUrl = lastUrls.put(tab, spec); + + if (!alwaysIncognitoContainer.getBoolean(PREF_ALWAYS_INCOGNITO, false)) return; + if (revertingTabs.contains(tab)) { @@ -120,9 +124,11 @@ new file mode 100644 + return; + } + -+ ((ChromeTabbedActivity)tab.getWindowAndroid().getActivity().get()).getTabCreator(true).createNewTab(new LoadUrlParams(url), TabLaunchType.FROM_LINK, tab); ++ ((ChromeTabbedActivity)tab.getWindowAndroid().getActivity().get()) ++ .getTabCreator(true) ++ .createNewTab(new LoadUrlParams(spec), TabLaunchType.FROM_LINK, tab); + -+ if ((url.equals(lastUrl)) || (!tab.canGoBack())) { ++ if ((spec.equals(lastUrl)) || (!tab.canGoBack())) { + // this call was triggered by a reload + } else { + revertingTabs.add(tab); @@ -133,15 +139,15 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -49,6 +49,7 @@ import org.chromium.base.supplier.OneshotSupplierImpl; - import org.chromium.base.supplier.Supplier; +@@ -54,6 +54,7 @@ import org.chromium.base.supplier.Supplier; import org.chromium.base.task.PostTask; + import org.chromium.cc.input.BrowserControlsState; import org.chromium.chrome.R; +import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout; -@@ -1602,8 +1603,9 @@ public class ChromeTabbedActivity extends ChromeActivity +@@ -1596,6 +1597,9 @@ public abstract class ChromeActivity throw new IllegalStateException( "Attempting to access TabCreator before initialization"); } @@ -177,7 +183,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -@@ -523,6 +523,12 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate +@@ -539,6 +539,12 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate } private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) { @@ -203,9 +209,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator.ContextMenuUma.Action; -@@ -376,7 +378,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { +@@ -372,7 +374,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { if (FirstRunStatus.getFirstRunFlowComplete() && !isEmptyUrl(mParams.getUrl()) - && UrlUtilities.isAcceptedScheme(mParams.getUrl())) { + && UrlUtilities.isAcceptedScheme(mParams.getUrl().getSpec())) { if (mMode == ContextMenuMode.NORMAL) { - linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB)); + if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false) @@ -230,7 +236,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; -@@ -796,7 +799,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid +@@ -781,7 +784,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid @Override public boolean isIncognito() { @@ -252,21 +258,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTab /** * This class attempts to preload the tab if the url is known from the intent when the profile * is created. This is done to improve startup latency. -@@ -195,9 +198,11 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable +@@ -195,10 +198,15 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable Intent intent = mIntentSupplier.get(); GURL url = UrlFormatter.fixupUrl(getUrlFromIntent(intent)); + boolean isIncognito = ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false); + ++ Profile profile = Profile.getLastUsedRegularProfile(); ChromeTabCreator chromeTabCreator = - (ChromeTabCreator) mTabCreatorManager.getTabCreator(false); -- WebContents webContents = WebContentsFactory.createWebContents(false, false); + (ChromeTabCreator) mTabCreatorManager.getTabCreator(isIncognito); -+ WebContents webContents = WebContentsFactory.createWebContents(isIncognito, false); + WebContents webContents = +- WebContentsFactory.createWebContents(Profile.getLastUsedRegularProfile(), false); ++ WebContentsFactory.createWebContents( ++ isIncognito ? profile.getPrimaryOTRProfile() : profile, ++ false); mLoadUrlParams = new LoadUrlParams(url.getValidSpecOrEmpty()); String referrer = IntentHandler.getReferrerUrlIncludingExtraHeaders(intent); -@@ -211,7 +216,7 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable +@@ -212,7 +220,7 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable // Create a detached tab, but don't add it to the tab model yet. We'll do that // later if the loadUrlParams etc... match. mTab = TabBuilder.createLiveTab(false) @@ -278,23 +288,26 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTab diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -46,9 +46,11 @@ public class PrivacySettings - private static final String PREF_SECURE_DNS = "secure_dns"; - private static final String PREF_DO_NOT_TRACK = "do_not_track"; - private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data"; +@@ -39,6 +39,7 @@ import org.chromium.ui.text.SpanApplier; + */ + public class PrivacySettings + extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener { + private static final String PREF_ALWAYS_INCOGNITO = "always_incognito"; + private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment"; + private static final String PREF_NETWORK_PREDICTIONS = "preload_pages"; + private static final String PREF_SECURE_DNS = "secure_dns"; +@@ -46,6 +47,7 @@ public class PrivacySettings + private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data"; + private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox"; private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA, ++ PREF_ALWAYS_INCOGNITO, PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS, -- PREF_SECURE_DNS, PREF_DO_NOT_TRACK -+ PREF_SECURE_DNS, PREF_DO_NOT_TRACK, -+ PREF_ALWAYS_INCOGNITO - }; + PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX}; - private ManagedPreferenceDelegate mManagedPreferenceDelegate; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java -@@ -39,6 +39,10 @@ import org.chromium.ui.base.PageTransition; +@@ -40,6 +40,10 @@ import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; @@ -305,7 +318,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome /** * This class creates various kinds of new tabs and adds them to the right {@link TabModel}. */ -@@ -60,6 +64,7 @@ public class ChromeTabCreator extends TabCreator { +@@ -61,6 +65,7 @@ public class ChromeTabCreator extends TabCreator { private final ChromeActivity mActivity; private final StartupTabPreloader mStartupTabPreloader; private final boolean mIncognito; @@ -313,7 +326,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome private WindowAndroid mNativeWindow; private TabModel mTabModel; -@@ -78,6 +83,10 @@ public class ChromeTabCreator extends TabCreator { +@@ -79,6 +84,10 @@ public class ChromeTabCreator extends TabCreator { mNativeWindow = nativeWindow; mTabDelegateFactorySupplier = tabDelegateFactory; mIncognito = incognito; @@ -324,7 +337,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome mOverviewNTPCreator = overviewNTPCreator; mAsyncTabParamsManager = asyncTabParamsManager; } -@@ -231,6 +240,8 @@ public class ChromeTabCreator extends TabCreator { +@@ -232,6 +241,8 @@ public class ChromeTabCreator extends TabCreator { if (creationState == TabCreationState.LIVE_IN_FOREGROUND && !openInForeground) { creationState = TabCreationState.LIVE_IN_BACKGROUND; } @@ -333,7 +346,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome mTabModel.addTab(tab, position, type, creationState); return tab; } finally { -@@ -265,6 +276,8 @@ public class ChromeTabCreator extends TabCreator { +@@ -266,6 +277,8 @@ public class ChromeTabCreator extends TabCreator { @TabCreationState int creationState = openInForeground ? TabCreationState.LIVE_IN_FOREGROUND : TabCreationState.LIVE_IN_BACKGROUND; @@ -342,7 +355,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome mTabModel.addTab(tab, position, type, creationState); return true; } -@@ -308,7 +321,6 @@ public class ChromeTabCreator extends TabCreator { +@@ -309,7 +322,6 @@ public class ChromeTabCreator extends TabCreator { // TODO(crbug.com/1081924): Clean up the launches from SearchActivity/Chrome. public Tab launchUrlFromExternalApp(String url, String referer, String headers, String appId, boolean forceNewTab, Intent intent, long intentTimestamp) { @@ -350,27 +363,27 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName()); if (forceNewTab && !isLaunchedFromChrome) { -@@ -417,6 +429,8 @@ public class ChromeTabCreator extends TabCreator { +@@ -423,6 +435,8 @@ public class ChromeTabCreator extends TabCreator { .setSerializedCriticalPersistedTabData(serializedCriticalPersistedTabData) .build(); } + if (mExtraLogic != null) + tab.addObserver(mExtraLogic); - if (state.isIncognito() != mIncognito) { + if (isIncognito != mIncognito) { throw new IllegalStateException("Incognito state mismatch. TabState: " diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java -@@ -16,6 +16,7 @@ import androidx.annotation.VisibleForTesting; - import androidx.core.util.AtomicFile; +@@ -17,6 +17,7 @@ import androidx.core.util.AtomicFile; import org.chromium.base.Callback; + import org.chromium.base.CallbackController; +import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.ObserverList; import org.chromium.base.StreamUtil; -@@ -49,6 +50,8 @@ import org.chromium.components.embedder_support.util.UrlUtilities; +@@ -51,6 +52,8 @@ import org.chromium.components.embedder_support.util.UrlUtilities; import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.UiThreadTaskTraits; @@ -379,10 +392,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -@@ -595,6 +598,13 @@ public class TabPersistentStore extends TabPersister { +@@ -615,6 +618,13 @@ public class TabPersistentStore extends TabPersister { + } } } - + if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) { + if (!isIncognito) { + Log.w(TAG, "Failed to restore tab: not in incognito mode."); @@ -441,19 +454,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -377,7 +377,7 @@ const base::Feature kCCTExternalLinkHandling{"CCTExternalLinkHandling", - base::FEATURE_ENABLED_BY_DEFAULT}; +@@ -394,7 +394,7 @@ const base::Feature kCCTIncognito{"CCTIncognito", + base::FEATURE_ENABLED_BY_DEFAULT}; - const base::Feature kCCTIncognito{"CCTIncognito", -- base::FEATURE_DISABLED_BY_DEFAULT}; -+ base::FEATURE_ENABLED_BY_DEFAULT}; + const base::Feature kCCTIncognitoAvailableToThirdParty{ +- "CCTIncognitoAvailableToThirdParty", base::FEATURE_DISABLED_BY_DEFAULT}; ++ "CCTIncognitoAvailableToThirdParty", base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kCCTPostMessageAPI{"CCTPostMessageAPI", base::FEATURE_ENABLED_BY_DEFAULT}; diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -832,6 +832,13 @@ Your Google account may have other forms of browsing history like searches and a +@@ -844,6 +844,13 @@ Your Google account may have other forms of browsing history like searches and a Clears history and autocompletions in the address bar. diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index 326669c1..d67aede4 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -17,7 +17,7 @@ Completely remove contacts picker permission from the file dialog .../native_page/NativePageFactory.java | 3 +- chrome/browser/BUILD.gn | 6 +- .../android/bookmarks/bookmark_bridge.cc | 242 ++++++++++++++++++ - .../android/bookmarks/bookmark_bridge.h | 23 +- + .../android/bookmarks/bookmark_bridge.h | 24 +- chrome/browser/importer/profile_writer.cc | 12 + chrome/browser/importer/profile_writer.h | 6 + .../strings/android_chrome_strings.grd | 6 + @@ -29,12 +29,12 @@ Completely remove contacts picker permission from the file dialog ui/shell_dialogs/select_file_dialog.h | 2 + .../select_file_dialog_android.cc | 6 + ui/shell_dialogs/select_file_dialog_android.h | 2 + - 23 files changed, 504 insertions(+), 14 deletions(-) + 23 files changed, 505 insertions(+), 14 deletions(-) diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -38,7 +38,6 @@ by a child template that "extends" this file. +@@ -39,7 +39,6 @@ by a child template that "extends" this file. {% endif %} @@ -187,9 +187,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm import android.text.TextUtils; import android.util.Pair; -@@ -26,6 +32,11 @@ import org.chromium.components.url_formatter.SchemeDisplay; - import org.chromium.components.url_formatter.UrlFormatter; +@@ -27,6 +33,11 @@ import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.content_public.browser.WebContents; + import org.chromium.url.GURL; +import org.chromium.chrome.browser.document.ChromeLauncherActivity; +import org.chromium.chrome.browser.IntentHandler; @@ -199,7 +199,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm import java.util.ArrayList; import java.util.List; -@@ -584,6 +595,38 @@ public class BookmarkBridge { +@@ -585,6 +596,38 @@ public class BookmarkBridge { mNativeBookmarkBridge, BookmarkBridge.this, id.getId(), id.getType()); } @@ -238,7 +238,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * Synchronously gets a list of bookmarks that match the specified search query. * @param query Keyword used for searching bookmarks. -@@ -1006,6 +1049,24 @@ public class BookmarkBridge { +@@ -1016,6 +1059,24 @@ public class BookmarkBridge { depthList.add(depth); } @@ -263,7 +263,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm private static List> createPairsList(int[] left, int[] right) { List> pairList = new ArrayList>(); for (int i = 0; i < left.length; i++) { -@@ -1073,6 +1134,8 @@ public class BookmarkBridge { +@@ -1083,6 +1144,8 @@ public class BookmarkBridge { int getChildCount(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type); void getChildIDs(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type, List bookmarksList); @@ -295,7 +295,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java -@@ -32,6 +32,7 @@ import org.chromium.components.browser_ui.util.ConversionUtils; +@@ -33,6 +33,7 @@ import org.chromium.components.browser_ui.util.ConversionUtils; import org.chromium.components.browser_ui.widget.dragreorder.DragStateDelegate; import org.chromium.components.browser_ui.widget.selectable_list.SelectableListLayout; import org.chromium.components.browser_ui.widget.selectable_list.SelectableListToolbar.SearchDelegate; @@ -303,7 +303,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelegate; import org.chromium.components.favicon.LargeIconBridge; import org.chromium.url.GURL; -@@ -54,6 +55,7 @@ public class BookmarkManager +@@ -55,6 +56,7 @@ public class BookmarkManager private ComponentName mOpenBookmarkComponentName; private ViewGroup mMainView; private BookmarkModel mBookmarkModel; @@ -311,7 +311,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm private BookmarkUndoController mUndoController; private final ObserverList mUIObservers = new ObserverList<>(); private BasicNativePage mNativePage; -@@ -327,6 +329,13 @@ public class BookmarkManager +@@ -328,6 +330,13 @@ public class BookmarkManager mNativePage = nativePage; } @@ -325,7 +325,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * @return Current URL representing the UI state of bookmark manager. If no state has been shown * yet in this session, on phone return last used state stored in preference; on tablet -@@ -500,6 +509,16 @@ public class BookmarkManager +@@ -506,6 +515,16 @@ public class BookmarkManager } } @@ -384,7 +384,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -190,6 +190,8 @@ static_library("browser") { +@@ -203,6 +203,8 @@ static_library("browser") { "bitmap_fetcher/bitmap_fetcher_service.h", "bitmap_fetcher/bitmap_fetcher_service_factory.cc", "bitmap_fetcher/bitmap_fetcher_service_factory.h", @@ -393,8 +393,8 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn "bluetooth/bluetooth_chooser_context.cc", "bluetooth/bluetooth_chooser_context.h", "bluetooth/bluetooth_chooser_context_factory.cc", -@@ -1847,6 +1849,8 @@ static_library("browser") { - "web_data_service_factory.h", +@@ -1895,6 +1897,8 @@ static_library("browser") { + "webapps/chrome_webapps_client.h", "window_placement/window_placement_permission_context.cc", "window_placement/window_placement_permission_context.h", + "importer/profile_writer.cc", @@ -402,7 +402,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn ] configs += [ -@@ -3373,8 +3377,6 @@ static_library("browser") { +@@ -3446,8 +3450,6 @@ static_library("browser") { "badging/badge_manager_factory.h", "banners/app_banner_manager_desktop.cc", "banners/app_banner_manager_desktop.h", @@ -515,7 +515,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse } void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef&) { -@@ -541,6 +614,175 @@ jint BookmarkBridge::GetTotalBookmarkCount( +@@ -540,6 +613,175 @@ jint BookmarkBridge::GetTotalBookmarkCount( return count; } @@ -694,16 +694,17 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser/android/bookmarks/bookmark_bridge.h --- a/chrome/browser/android/bookmarks/bookmark_bridge.h +++ b/chrome/browser/android/bookmarks/bookmark_bridge.h -@@ -23,6 +23,8 @@ - #include "components/bookmarks/browser/base_bookmark_model_observer.h" - #include "components/bookmarks/common/android/bookmark_id.h" +@@ -25,6 +25,9 @@ #include "components/prefs/pref_change_registrar.h" + #include "url/android/gurl_android.h" + +#include "components/search_engines/template_url.h" +#include "ui/shell_dialogs/select_file_dialog.h" - ++ namespace bookmarks { class BookmarkModel; -@@ -38,7 +40,8 @@ class Profile; + class ManagedBookmarkService; +@@ -39,7 +42,8 @@ class Profile; class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, public PartnerBookmarksShim::Observer, public ReadingListManager::Observer, @@ -713,7 +714,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser public: BookmarkBridge(JNIEnv* env, const base::android::JavaRef& obj, -@@ -54,6 +57,12 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, +@@ -55,6 +59,12 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, bool IsDoingExtensiveChanges(JNIEnv* env, const base::android::JavaParamRef& obj); @@ -726,7 +727,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser jboolean IsEditBookmarksEnabled(JNIEnv* env); void LoadEmptyPartnerBookmarkShimForTesting( -@@ -141,6 +150,13 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, +@@ -142,6 +152,13 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, jlong id, jint type); @@ -740,7 +741,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser void SetBookmarkTitle(JNIEnv* env, const base::android::JavaParamRef& obj, jlong id, -@@ -311,12 +327,14 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, +@@ -315,12 +332,14 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, void DestroyJavaObject(); Profile* profile_; @@ -755,7 +756,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser // Information about the Partner bookmarks (must check for IsLoaded()). // This is owned by profile. -@@ -328,6 +346,9 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, +@@ -332,6 +351,9 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, // Observes the profile destruction and creation. ScopedObserver profile_observer_{this}; @@ -842,7 +843,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn -@@ -400,6 +400,9 @@ static_library("common") { +@@ -402,6 +402,9 @@ static_library("common") { sources += [ "media/chrome_media_drm_bridge_client.cc", "media/chrome_media_drm_bridge_client.h", @@ -855,7 +856,7 @@ diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn --- a/chrome/utility/BUILD.gn +++ b/chrome/utility/BUILD.gn -@@ -71,8 +71,6 @@ static_library("utility") { +@@ -73,8 +73,6 @@ static_library("utility") { if (!is_android) { sources += [ @@ -864,7 +865,7 @@ diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn "importer/bookmarks_file_importer.cc", "importer/bookmarks_file_importer.h", "importer/external_process_importer_bridge.cc", -@@ -187,6 +185,11 @@ static_library("utility") { +@@ -191,6 +189,11 @@ static_library("utility") { } } diff --git a/build/patches/Add-custom-tab-intents-privacy-option.patch b/build/patches/Add-custom-tab-intents-privacy-option.patch index 14fb3a8f..4f8d7468 100644 --- a/build/patches/Add-custom-tab-intents-privacy-option.patch +++ b/build/patches/Add-custom-tab-intents-privacy-option.patch @@ -3,11 +3,11 @@ Date: Wed, 29 Aug 2018 11:03:44 +0200 Subject: Add custom tab intents privacy option --- - chrome/android/java/res/xml/privacy_preferences.xml | 5 +++++ - .../chrome/browser/LaunchIntentDispatcher.java | 4 ++++ - .../browser/privacy/settings/PrivacySettings.java | 13 ++++++++++++- - .../ui/android/strings/android_chrome_strings.grd | 7 +++++++ - 4 files changed, 28 insertions(+), 1 deletion(-) + .../android/java/res/xml/privacy_preferences.xml | 5 +++++ + .../chrome/browser/LaunchIntentDispatcher.java | 4 ++++ + .../browser/privacy/settings/PrivacySettings.java | 14 +++++++++++++- + .../ui/android/strings/android_chrome_strings.grd | 7 +++++++ + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml @@ -27,7 +27,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -55,6 +55,8 @@ import org.chromium.url.Origin; +@@ -53,6 +53,8 @@ import org.chromium.url.Origin; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -36,7 +36,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis /** * Dispatches incoming intents to the appropriate activity based on the current configuration and * Intent fired. -@@ -271,6 +273,8 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega +@@ -269,6 +271,8 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega */ public static boolean isCustomTabIntent(Intent intent) { if (intent == null) return false; @@ -48,24 +48,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -47,10 +47,12 @@ public class PrivacySettings - private static final String PREF_DO_NOT_TRACK = "do_not_track"; - private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data"; - private static final String PREF_ALWAYS_INCOGNITO = "always_incognito"; -+ public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents"; +@@ -49,10 +49,13 @@ public class PrivacySettings private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA, + PREF_ALWAYS_INCOGNITO, PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS, - PREF_SECURE_DNS, PREF_DO_NOT_TRACK, -- PREF_ALWAYS_INCOGNITO -+ PREF_ALWAYS_INCOGNITO, -+ PREF_ALLOW_CUSTOM_TAB_INTENTS - }; +- PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX}; ++ PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX, ++ PREF_ALLOW_CUSTOM_TAB_INTENTS}; private ManagedPreferenceDelegate mManagedPreferenceDelegate; -@@ -101,6 +103,10 @@ public class PrivacySettings - .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue); + ++ public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents"; ++ + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + PrivacyPreferencesManagerImpl privacyPrefManager = +@@ -105,6 +108,10 @@ public class PrivacySettings } else if (PREF_NETWORK_PREDICTIONS.equals(key)) { - PrivacyPreferencesManager.getInstance().setNetworkPredictionEnabled((boolean) newValue); + PrivacyPreferencesManagerImpl.getInstance().setNetworkPredictionEnabled( + (boolean) newValue); + } else if (PREF_ALLOW_CUSTOM_TAB_INTENTS.equals(key)) { + SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit(); + sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue); @@ -73,7 +74,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting } return true; -@@ -124,6 +130,11 @@ public class PrivacySettings +@@ -128,6 +135,11 @@ public class PrivacySettings canMakePaymentPref.setChecked(prefService.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED)); } @@ -88,7 +89,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -3956,6 +3956,13 @@ Data from your Incognito session will only be cleared from Chrome when you Show original diff --git a/build/patches/Add-exit-menu-item.patch b/build/patches/Add-exit-menu-item.patch index d8446f18..ded4d406 100644 --- a/build/patches/Add-exit-menu-item.patch +++ b/build/patches/Add-exit-menu-item.patch @@ -25,7 +25,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re -@@ -153,6 +156,8 @@ +@@ -145,6 +148,8 @@ @@ -50,7 +50,7 @@ diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -53,6 +53,7 @@ import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; +@@ -58,6 +58,7 @@ import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate; import org.chromium.chrome.browser.IntentHandler.TabOpenType; import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout; import org.chromium.chrome.browser.app.ChromeActivity; @@ -58,7 +58,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton; import org.chromium.chrome.browser.app.tabmodel.ChromeNextTabPolicySupplier; import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton; -@@ -1785,6 +1786,8 @@ public class ChromeTabbedActivity extends ChromeActivity +@@ -1984,6 +1985,11 @@ public abstract class ChromeActivity RecordUserAction.record("MobileMenuSettings"); } @@ -109,7 +109,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLife diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -2901,6 +2901,9 @@ Data from your Incognito session will only be cleared from Chrome when you Settings diff --git a/build/patches/Add-flag-for-save-data-header.patch b/build/patches/Add-flag-for-save-data-header.patch index ac88c1e2..9b8cf2e9 100644 --- a/build/patches/Add-flag-for-save-data-header.patch +++ b/build/patches/Add-flag-for-save-data-header.patch @@ -15,20 +15,20 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -4302,6 +4302,10 @@ const FeatureEntry kFeatureEntries[] = { - flag_descriptions::kDisableKeepaliveFetchDescription, kOsAll, - FEATURE_VALUE_TYPE(network::features::kDisableKeepaliveFetch)}, - + kOmniboxRichAutocompletionPromisingVariations, + "OmniboxBundledExperimentV1")}, + {"omnibox-bookmark-paths", flag_descriptions::kOmniboxBookmarkPathsName, + {"enable-save-data-header", flag_descriptions::kEnableSaveDataHeaderName, + flag_descriptions::kEnableSaveDataHeaderDescription, kOsAndroid, + FEATURE_VALUE_TYPE(network::features::kEnableSaveDataHeader)}, + - {"delay-async-script-execution", - flag_descriptions::kDelayAsyncScriptExecutionName, - flag_descriptions::kDelayAsyncScriptExecutionDescription, kOsAll, + flag_descriptions::kOmniboxBookmarkPathsDescription, kOsDesktop, + FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kBookmarkPaths, + kOmniboxBookmarkPathsVariations, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -904,6 +904,10 @@ const char kDisableKeepaliveFetchDescription[] = +@@ -913,6 +913,10 @@ const char kDisableKeepaliveFetchDescription[] = "Disable fetch with keepalive set " "(https://fetch.spec.whatwg.org/#request-keepalive-flag)."; @@ -42,7 +42,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -510,6 +510,9 @@ extern const char kDiagnosticsAppDescription[]; +@@ -518,6 +518,9 @@ extern const char kDiagnosticsAppDescription[]; extern const char kDisableKeepaliveFetchName[]; extern const char kDisableKeepaliveFetchDescription[]; @@ -79,9 +79,9 @@ diff --git a/services/network/public/cpp/features.cc b/services/network/public/c +const base::Feature kEnableSaveDataHeader{"EnableSaveDataHeader", + base::FEATURE_DISABLED_BY_DEFAULT}; + - // Attach the origin of the destination URL to the "origin" header - const base::Feature - kDeriveOriginFromUrlForNeitherGetNorHeadRequestWhenHavingSpecialAccess{ + // Controls whether a |request_initiator| that mismatches + // |request_initiator_origin_lock| leads to 1) failing the HTTP request and 2) + // calling mojo::ReportBadMessage (on desktop platforms, where NetworkService diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h --- a/services/network/public/cpp/features.h +++ b/services/network/public/cpp/features.h @@ -91,9 +91,9 @@ diff --git a/services/network/public/cpp/features.h b/services/network/public/cp COMPONENT_EXPORT(NETWORK_CPP) +extern const base::Feature kEnableSaveDataHeader; +COMPONENT_EXPORT(NETWORK_CPP) - extern const base::Feature - kDeriveOriginFromUrlForNeitherGetNorHeadRequestWhenHavingSpecialAccess; + extern const base::Feature kRequestInitiatorSiteLockEnfocement; COMPONENT_EXPORT(NETWORK_CPP) + extern const base::Feature kCertVerifierService; -- 2.17.1 diff --git a/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch b/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch index 03f2dcb7..6ef762f2 100644 --- a/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch +++ b/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch @@ -19,7 +19,7 @@ with limited CPU/memory resources and it is disabled by default. diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -784,6 +784,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = { +@@ -816,6 +816,11 @@ const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = { net::kEffectiveConnectionType4G}, }; @@ -31,7 +31,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc // Ensure that all effective connection types returned by Network Quality // Estimator (NQE) are also exposed via flags. static_assert(net::EFFECTIVE_CONNECTION_TYPE_LAST + 2 == -@@ -3499,6 +3504,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3656,6 +3661,9 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAndroidPictureInPictureAPIName, flag_descriptions::kAndroidPictureInPictureAPIDescription, kOsAndroid, FEATURE_VALUE_TYPE(media::kPictureInPictureAPI)}, @@ -44,7 +44,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1397,6 +1397,10 @@ const char kMediaHistoryDescription[] = +@@ -1404,6 +1404,10 @@ const char kMediaHistoryDescription[] = "Enables Media History which records data around media playbacks on " "websites."; @@ -58,7 +58,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -832,6 +832,9 @@ extern const char kMarkHttpAsWarningAndDangerousOnFormEdits[]; +@@ -832,6 +832,9 @@ extern const char kLogJsConsoleMessagesDescription[]; extern const char kMediaHistoryName[]; extern const char kMediaHistoryDescription[]; diff --git a/build/patches/Add-flag-to-control-video-playback-resume-feature.patch b/build/patches/Add-flag-to-control-video-playback-resume-feature.patch index 3fd258d7..7602077d 100644 --- a/build/patches/Add-flag-to-control-video-playback-resume-feature.patch +++ b/build/patches/Add-flag-to-control-video-playback-resume-feature.patch @@ -14,20 +14,20 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -2635,6 +2635,10 @@ const FeatureEntry kFeatureEntries[] = { - kOsAura, - FEATURE_VALUE_TYPE(features::kOverlayScrollbarFlashAfterAnyScrollUpdate)}, - #endif // USE_AURA + flag_descriptions::kWebRtcRemoteEventLogName, + flag_descriptions::kWebRtcRemoteEventLogDescription, kOsDesktop, + FEATURE_VALUE_TYPE(features::kWebRtcRemoteEventLog)}, + {"resume-background-video", + flag_descriptions::kResumeBackgroundVideoName, + flag_descriptions::kResumeBackgroundVideoDescription, kOsAll, + FEATURE_VALUE_TYPE(media::kResumeBackgroundVideo)}, - {"enable-quic", flag_descriptions::kQuicName, - flag_descriptions::kQuicDescription, kOsAll, - ENABLE_DISABLE_VALUE_TYPE(switches::kEnableQuic, switches::kDisableQuic)}, + #endif + {"enable-webrtc-srtp-aes-gcm", flag_descriptions::kWebrtcSrtpAesGcmName, + flag_descriptions::kWebrtcSrtpAesGcmDescription, kOsAll, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -955,6 +955,11 @@ const char kEnableLoginDetectionName[] = "Enable login detection"; +@@ -972,6 +972,11 @@ const char kEnableLoginDetectionName[] = "Enable login detection"; const char kEnableLoginDetectionDescription[] = "Allow user sign-in to be detected based on heuristics."; @@ -42,7 +42,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -547,6 +547,9 @@ extern const char kEnablePortalsDescription[]; +@@ -558,6 +558,9 @@ extern const char kEnablePortalsDescription[]; extern const char kEnablePortalsCrossOriginName[]; extern const char kEnablePortalsCrossOriginDescription[]; @@ -55,7 +55,7 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptio diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -237,11 +237,7 @@ const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad", +@@ -246,11 +246,7 @@ const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad", // when in background. const base::Feature kResumeBackgroundVideo { "resume-background-video", diff --git a/build/patches/Add-flag-to-disable-IPv6-probes.patch b/build/patches/Add-flag-to-disable-IPv6-probes.patch index ea2b6e93..d50d47b2 100644 --- a/build/patches/Add-flag-to-disable-IPv6-probes.patch +++ b/build/patches/Add-flag-to-disable-IPv6-probes.patch @@ -16,7 +16,7 @@ Subject: Add flag to disable IPv6 probes diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -4385,6 +4385,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4604,6 +4604,11 @@ const FeatureEntry kFeatureEntries[] = { #endif // defined(OS_WIN) || defined(OS_MAC) || defined(OS_LINUX) || // defined(OS_CHROMEOS) @@ -26,12 +26,12 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc + FEATURE_VALUE_TYPE(network::features::kIPv6Probing)}, + #if !defined(OS_ANDROID) - {"ntp-iframe-one-google-bar", flag_descriptions::kNtpIframeOneGoogleBarName, - flag_descriptions::kNtpIframeOneGoogleBarDescription, kOsDesktop, + {"ntp-cache-one-google-bar", flag_descriptions::kNtpCacheOneGoogleBarName, + flag_descriptions::kNtpCacheOneGoogleBarDescription, kOsDesktop, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -2723,6 +2723,10 @@ const char kContextualSearchRankerQueryDescription[] = +@@ -2805,6 +2805,10 @@ const char kContextualSearchRankerQueryDescription[] = const char kContextualSearchSecondTapName[] = "Contextual Search second tap triggering"; @@ -45,7 +45,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -616,6 +616,9 @@ extern const char kEnableWasmThreadsName[]; +@@ -625,6 +625,9 @@ extern const char kEnableWasmThreadsName[]; extern const char kEnableWasmThreadsDescription[]; extern const char kEnableWasmTieringName[]; @@ -101,7 +101,7 @@ diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/compon diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc --- a/net/dns/host_resolver_manager.cc +++ b/net/dns/host_resolver_manager.cc -@@ -93,6 +93,7 @@ +@@ -94,6 +94,7 @@ #include "net/log/net_log_event_type.h" #include "net/log/net_log_source.h" #include "net/log/net_log_source_type.h" @@ -109,7 +109,7 @@ diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc #include "net/log/net_log_with_source.h" #include "net/socket/client_socket_factory.h" #include "net/socket/datagram_client_socket.h" -@@ -3707,8 +3708,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) { +@@ -3369,8 +3370,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) { if (last_ipv6_probe_time_.is_null() || (tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() > kIPv6ProbePeriodMs) { diff --git a/build/patches/Add-flag-to-disable-WebGL.patch b/build/patches/Add-flag-to-disable-WebGL.patch index 2308c224..82bd3ea3 100644 --- a/build/patches/Add-flag-to-disable-WebGL.patch +++ b/build/patches/Add-flag-to-disable-WebGL.patch @@ -11,7 +11,7 @@ Subject: Add flag to disable WebGL diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -2465,6 +2465,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -2588,6 +2588,9 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kAccelerated2dCanvasName, flag_descriptions::kAccelerated2dCanvasDescription, kOsAll, SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAccelerated2dCanvas)}, @@ -24,7 +24,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -494,6 +494,10 @@ const char kEnableAudioFocusEnforcementName[] = "Audio Focus Enforcement"; +@@ -511,6 +511,10 @@ const char kEnableAudioFocusEnforcementName[] = "Audio Focus Enforcement"; const char kEnableAudioFocusEnforcementDescription[] = "Enables enforcement of a single media session having audio focus at " "any one time. Requires #enable-media-session-service to be enabled too."; @@ -38,7 +38,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -306,6 +306,9 @@ extern const char kDisallowDocWrittenScriptsUiDescription[]; +@@ -317,6 +317,9 @@ extern const char kDisallowDocWrittenScriptsUiDescription[]; extern const char kEnableAccessibilityObjectModelName[]; extern const char kEnableAccessibilityObjectModelDescription[]; diff --git a/build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch b/build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch index e7ec3b03..46e0adc6 100644 --- a/build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch +++ b/build/patches/Add-flags-to-disable-device-motion-orientation-APIs.patch @@ -20,7 +20,7 @@ legacy acceleration events. diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -2688,6 +2688,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -2799,6 +2799,12 @@ const FeatureEntry kFeatureEntries[] = { {"enable-gpu-rasterization", flag_descriptions::kGpuRasterizationName, flag_descriptions::kGpuRasterizationDescription, kOsAll, MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)}, @@ -36,7 +36,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -735,6 +735,14 @@ const char kWinrtSensorsImplementationDescription[] = +@@ -755,6 +755,14 @@ const char kWinrtSensorsImplementationDescription[] = "Enables usage of the Windows.Devices.Sensors WinRT APIs on Windows for " "sensors"; @@ -54,7 +54,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -444,6 +444,12 @@ extern const char kWinrtGeolocationImplementationDescription[]; +@@ -455,6 +455,12 @@ extern const char kWinrtGeolocationImplementationDescription[]; extern const char kWinrtSensorsImplementationName[]; extern const char kWinrtSensorsImplementationDescription[]; @@ -83,7 +83,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -835,6 +835,16 @@ const base::Feature kWebOtpBackend{"kWebOtpBackend", +@@ -837,6 +837,16 @@ const base::Feature kWebOtpBackendAuto{"WebOtpBackendAuto", // The JavaScript API for payments on the web. const base::Feature kWebPayments{"WebPayments", base::FEATURE_ENABLED_BY_DEFAULT}; @@ -103,7 +103,7 @@ diff --git a/content/public/common/content_features.cc b/content/public/common/c diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h -@@ -182,6 +182,8 @@ CONTENT_EXPORT extern const base::Feature kWebXrArModule; +@@ -197,6 +197,8 @@ CONTENT_EXPORT extern const base::Feature kWebXrArModule; CONTENT_EXPORT extern const base::Feature kWebXrHitTest; CONTENT_EXPORT extern const base::Feature kWebXrIncubations; @@ -115,7 +115,7 @@ diff --git a/content/public/common/content_features.h b/content/public/common/co diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h --- a/third_party/blink/public/platform/web_runtime_features.h +++ b/third_party/blink/public/platform/web_runtime_features.h -@@ -96,6 +96,8 @@ class WebRuntimeFeatures { +@@ -97,6 +97,8 @@ class WebRuntimeFeatures { BLINK_PLATFORM_EXPORT static void EnableCSSHexAlphaColor(bool); BLINK_PLATFORM_EXPORT static void EnableSameSiteByDefaultCookies(bool); BLINK_PLATFORM_EXPORT static void EnableScrollTopLeftInterop(bool); @@ -127,7 +127,7 @@ diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_pa diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_party/blink/renderer/modules/modules_initializer.cc --- a/third_party/blink/renderer/modules/modules_initializer.cc +++ b/third_party/blink/renderer/modules/modules_initializer.cc -@@ -220,9 +220,13 @@ void ModulesInitializer::OnClearWindowObjectInMainWorld( +@@ -222,9 +222,13 @@ void ModulesInitializer::OnClearWindowObjectInMainWorld( Document& document, const Settings& settings) const { LocalDOMWindow& window = *document.domWindow(); @@ -147,7 +147,7 @@ diff --git a/third_party/blink/renderer/modules/modules_initializer.cc b/third_p diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc +++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc -@@ -171,6 +171,14 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) { +@@ -175,6 +175,14 @@ void WebRuntimeFeatures::EnableScrollTopLeftInterop(bool enable) { RuntimeEnabledFeatures::SetScrollTopLeftInteropEnabled(enable); } @@ -165,7 +165,7 @@ diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.c diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -1360,6 +1360,14 @@ +@@ -1385,6 +1385,14 @@ name: "OffscreenCanvasCommit", status: "experimental", }, diff --git a/build/patches/Add-history-support-in-incognito-mode.patch b/build/patches/Add-history-support-in-incognito-mode.patch index 4029d0be..aed585b7 100644 --- a/build/patches/Add-history-support-in-incognito-mode.patch +++ b/build/patches/Add-history-support-in-incognito-mode.patch @@ -31,7 +31,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -38,6 +38,8 @@ import org.chromium.components.user_prefs.UserPrefs; +@@ -37,12 +37,15 @@ import org.chromium.components.user_prefs.UserPrefs; import org.chromium.ui.text.NoUnderlineClickableSpan; import org.chromium.ui.text.SpanApplier; @@ -40,21 +40,22 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting /** * Fragment to keep track of the all the privacy related preferences. */ -@@ -52,11 +54,13 @@ public class PrivacySettings + public class PrivacySettings + extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener { private static final String PREF_ALWAYS_INCOGNITO = "always_incognito"; - public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents"; - private static final String PREF_PROXY_OPTIONS = "proxy"; + public static final String PREF_INCOGNITO_TAB_HISTORY_ENABLED = "incognito_history_enabled"; - + private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment"; + private static final String PREF_NETWORK_PREDICTIONS = "preload_pages"; + private static final String PREF_SECURE_DNS = "secure_dns"; +@@ -51,6 +54,7 @@ public class PrivacySettings + private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox"; private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA, - PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS, - PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_ALWAYS_INCOGNITO, + PREF_INCOGNITO_TAB_HISTORY_ENABLED, - PREF_ALLOW_CUSTOM_TAB_INTENTS, + PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS, PREF_CLOSE_TABS_ON_EXIT, - PREF_PROXY_OPTIONS -@@ -99,6 +103,11 @@ public class PrivacySettings + PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX, +@@ -106,6 +110,11 @@ public class PrivacySettings Preference secureDnsPref = findPreference(PREF_SECURE_DNS); secureDnsPref.setVisible(SecureDnsSettings.isUiEnabled()); @@ -66,7 +67,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting updateSummaries(); } -@@ -118,6 +127,9 @@ public class PrivacySettings +@@ -126,6 +135,9 @@ public class PrivacySettings SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit(); sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue); sharedPreferencesEditor.apply(); @@ -76,7 +77,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting } return true; -@@ -162,6 +174,13 @@ public class PrivacySettings +@@ -170,6 +182,13 @@ public class PrivacySettings (ChromeSwitchPreference) findPreference(PREF_CLOSE_TABS_ON_EXIT); closeTabsOnExitPref.setOnPreferenceChangeListener(this); closeTabsOnExitPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate); @@ -103,7 +104,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo #else #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" -@@ -255,6 +258,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { +@@ -258,6 +261,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { history::HistoryService* HistoryTabHelper::GetHistoryService() { Profile* profile = Profile::FromBrowserContext(web_contents()->GetBrowserContext()); @@ -117,7 +118,7 @@ diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/histo if (profile->IsOffTheRecord()) return NULL; -@@ -262,6 +272,12 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { +@@ -265,6 +275,12 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { profile, ServiceAccessType::IMPLICIT_ACCESS); } @@ -154,7 +155,7 @@ diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/histor diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -205,6 +205,8 @@ +@@ -208,6 +208,8 @@ #endif #if defined(OS_ANDROID) @@ -163,7 +164,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h" #include "chrome/browser/android/explore_sites/history_statistics_reporter.h" #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h" -@@ -908,6 +910,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -969,6 +971,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, variations::VariationsService::RegisterProfilePrefs(registry); video_tutorials::RegisterPrefs(registry); feed::prefs::RegisterFeedSharedProfilePrefs(registry); @@ -174,7 +175,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -856,6 +856,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -868,6 +868,12 @@ Your Google account may have other forms of browsing history like searches and a Opens links in incognito tabs when you click on new tab or on a link @@ -190,21 +191,23 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc -@@ -3116,4 +3116,9 @@ const char kSecurityTokenSessionNotificationSeconds[] = - "security_token_session_notification_seconds"; - #endif // defined(OS_CHROMEOS) +@@ -3152,6 +3152,11 @@ const char kShowCaretBrowsingDialog[] = + const char kLacrosAllowed[] = "lacros_allowed"; + #endif +#if defined(OS_ANDROID) +const char kIncognitoTabHistoryEnabled[] = + "incognito_tab_history_enabled"; +#endif + - } // namespace prefs + #if BUILDFLAG(IS_CHROMEOS_ASH) + // String enum pref determining what should happen when a user who authenticates + // via a security token is removing this token. "IGNORE" - nothing happens diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -1092,6 +1092,10 @@ extern const char kSecurityTokenSessionBehavior[]; - extern const char kSecurityTokenSessionNotificationSeconds[]; +@@ -1115,6 +1115,10 @@ extern const char kCartModuleRemoved[]; + extern const char kCartModuleWelcomeSurfaceShownTimes[]; #endif +#if defined(OS_ANDROID) diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch index 7f4a308c..cbfba7d4 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -3,7 +3,6 @@ Date: Thu, 18 Feb 2021 21:22:52 +0100 Subject: Add menu item to bookmark all tabs --- - chrome/android/java/res/menu/main_menu.xml | 6 ++ .../java/res/menu/main_menu_regroup.xml | 3 + .../chrome/browser/ChromeTabbedActivity.java | 23 +++++++ .../browser/bookmarks/BookmarkBridge.java | 62 +++++++++++++++++++ @@ -19,31 +18,8 @@ Subject: Add menu item to bookmark all tabs components/bookmarks/browser/bookmark_model.h | 7 +++ components/bookmarks/browser/bookmark_node.cc | 13 ++++ components/bookmarks/browser/bookmark_node.h | 5 ++ - 16 files changed, 163 insertions(+), 1 deletion(-) + 15 files changed, 157 insertions(+), 1 deletion(-) -diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml ---- a/chrome/android/java/res/menu/main_menu.xml -+++ b/chrome/android/java/res/menu/main_menu.xml -@@ -57,6 +57,9 @@ - -+ - -@@ -154,6 +157,9 @@ - android:checkable="true" /> - - -+ - diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android/java/res/menu/main_menu_regroup.xml --- a/chrome/android/java/res/menu/main_menu_regroup.xml +++ b/chrome/android/java/res/menu/main_menu_regroup.xml @@ -60,7 +36,7 @@ diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -58,6 +58,8 @@ import org.chromium.chrome.browser.ApplicationLifetime; +@@ -63,6 +63,8 @@ import org.chromium.chrome.browser.ApplicationLifetime; import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton; import org.chromium.chrome.browser.app.tabmodel.ChromeNextTabPolicySupplier; import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton; @@ -69,7 +45,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.compositor.CompositorViewHolder; import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator; -@@ -1796,6 +1798,8 @@ public class ChromeTabbedActivity extends ChromeActivity folderList, List depthList); BookmarkId getRootFolderId(long nativeBookmarkBridge, BookmarkBridge caller); @@ -221,7 +197,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java -@@ -439,6 +439,7 @@ public class BookmarkUtils { +@@ -472,6 +472,7 @@ public class BookmarkUtils { List topLevelFolders = new ArrayList<>(); BookmarkId desktopNodeId = bookmarkModel.getDesktopFolderId(); BookmarkId mobileNodeId = bookmarkModel.getMobileFolderId(); @@ -229,7 +205,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm BookmarkId othersNodeId = bookmarkModel.getOtherFolderId(); List specialFoldersIds = -@@ -464,6 +465,9 @@ public class BookmarkUtils { +@@ -497,6 +498,9 @@ public class BookmarkUtils { if (bookmarkModel.isFolderVisible(mobileNodeId)) { topLevelFolders.add(mobileNodeId); } @@ -242,7 +218,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc --- a/chrome/browser/android/bookmarks/bookmark_bridge.cc +++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc -@@ -388,6 +388,11 @@ void BookmarkBridge::GetTopLevelFolderIDs( +@@ -387,6 +387,11 @@ void BookmarkBridge::GetTopLevelFolderIDs( top_level_folders.push_back(node.get()); } @@ -254,7 +230,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse for (const auto& node : bookmark_model_->bookmark_bar_node()->children()) { if (node->is_folder()) top_level_folders.push_back(node.get()); -@@ -426,6 +431,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( +@@ -425,6 +430,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( // Vector to temporarily contain all child bookmarks at same level for sorting std::vector bookmarks = { bookmark_model_->mobile_node(), @@ -262,7 +238,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse bookmark_model_->bookmark_bar_node(), bookmark_model_->other_node(), }; -@@ -480,6 +486,17 @@ ScopedJavaLocalRef BookmarkBridge::GetMobileFolderId( +@@ -479,6 +485,17 @@ ScopedJavaLocalRef BookmarkBridge::GetMobileFolderId( return folder_id_obj; } @@ -283,7 +259,7 @@ diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browse diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.h b/chrome/browser/android/bookmarks/bookmark_bridge.h --- a/chrome/browser/android/bookmarks/bookmark_bridge.h +++ b/chrome/browser/android/bookmarks/bookmark_bridge.h -@@ -107,6 +107,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, +@@ -109,6 +109,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, JNIEnv* env, const base::android::JavaParamRef& obj); @@ -309,7 +285,7 @@ diff --git a/chrome/browser/bookmarks/chrome_bookmark_client.cc b/chrome/browser diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -2987,6 +2987,9 @@ Data from your Incognito session will only be cleared from Chrome when you Track prices @@ -345,7 +321,7 @@ diff --git a/components/bookmark_bar_strings.grdp b/components/bookmark_bar_stri diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/bookmarks/browser/bookmark_load_details.cc --- a/components/bookmarks/browser/bookmark_load_details.cc +++ b/components/bookmarks/browser/bookmark_load_details.cc -@@ -34,6 +34,10 @@ BookmarkLoadDetails::BookmarkLoadDetails(BookmarkClient* client) +@@ -36,6 +36,10 @@ BookmarkLoadDetails::BookmarkLoadDetails(BookmarkClient* client) root_node_->Add(BookmarkPermanentNode::CreateMobileBookmarks( max_id_++, client->IsPermanentNodeVisibleWhenEmpty(BookmarkNode::MOBILE)))); @@ -378,7 +354,7 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.h b/components/b diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc --- a/components/bookmarks/browser/bookmark_model.cc +++ b/components/bookmarks/browser/bookmark_model.cc -@@ -559,7 +559,7 @@ bool BookmarkModel::HasBookmarks() { +@@ -560,7 +560,7 @@ bool BookmarkModel::HasBookmarks() { bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return bookmark_bar_node_->children().empty() && @@ -387,7 +363,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmar } bool BookmarkModel::IsBookmarked(const GURL& url) { -@@ -800,6 +800,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { +@@ -795,6 +795,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { bookmark_bar_node_ = details->bb_node(); other_node_ = details->other_folder_node(); mobile_node_ = details->mobile_folder_node(); @@ -398,7 +374,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmar diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmarks/browser/bookmark_model.h --- a/components/bookmarks/browser/bookmark_model.h +++ b/components/bookmarks/browser/bookmark_model.h -@@ -116,6 +116,12 @@ class BookmarkModel : public BookmarkUndoProvider, +@@ -117,6 +117,12 @@ class BookmarkModel : public BookmarkUndoProvider, return mobile_node_; } @@ -411,7 +387,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmark bool is_root_node(const BookmarkNode* node) const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return node == root_; -@@ -389,6 +395,7 @@ class BookmarkModel : public BookmarkUndoProvider, +@@ -390,6 +396,7 @@ class BookmarkModel : public BookmarkUndoProvider, BookmarkPermanentNode* bookmark_bar_node_ = nullptr; BookmarkPermanentNode* other_node_ = nullptr; BookmarkPermanentNode* mobile_node_ = nullptr; @@ -422,7 +398,7 @@ diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmark diff --git a/components/bookmarks/browser/bookmark_node.cc b/components/bookmarks/browser/bookmark_node.cc --- a/components/bookmarks/browser/bookmark_node.cc +++ b/components/bookmarks/browser/bookmark_node.cc -@@ -40,6 +40,8 @@ const char BookmarkNode::kOtherBookmarksNodeGuid[] = +@@ -42,6 +42,8 @@ const char BookmarkNode::kOtherBookmarksNodeGuid[] = "00000000-0000-4000-a000-000000000003"; const char BookmarkNode::kMobileBookmarksNodeGuid[] = "00000000-0000-4000-a000-000000000004"; @@ -431,7 +407,7 @@ diff --git a/components/bookmarks/browser/bookmark_node.cc b/components/bookmark const char BookmarkNode::kManagedNodeGuid[] = "00000000-0000-4000-a000-000000000005"; -@@ -198,6 +200,17 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id, +@@ -201,6 +203,17 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id, visible_when_empty)); } @@ -441,18 +417,18 @@ diff --git a/components/bookmarks/browser/bookmark_node.cc b/components/bookmark + bool visible_when_empty) { + // base::WrapUnique() used because the constructor is private. + return base::WrapUnique(new BookmarkPermanentNode( -+ id, TABS_COLLECTION, kTabsCollectionBookmarksNodeGuid, ++ id, TABS_COLLECTION, base::GUID::ParseLowercase(kTabsCollectionBookmarksNodeGuid), + l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_TABS_COLLECTION_FOLDER_NAME), + visible_when_empty)); +} + BookmarkPermanentNode::BookmarkPermanentNode(int64_t id, Type type, - const std::string& guid, + const base::GUID& guid, diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks/browser/bookmark_node.h --- a/components/bookmarks/browser/bookmark_node.h +++ b/components/bookmarks/browser/bookmark_node.h -@@ -35,6 +35,7 @@ class BookmarkNode : public ui::TreeNode, public TitledUrlNode { +@@ -36,6 +36,7 @@ class BookmarkNode : public ui::TreeNode, public TitledUrlNode { FOLDER, BOOKMARK_BAR, OTHER_NODE, @@ -460,7 +436,7 @@ diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks MOBILE }; -@@ -50,6 +51,7 @@ class BookmarkNode : public ui::TreeNode, public TitledUrlNode { +@@ -53,6 +54,7 @@ class BookmarkNode : public ui::TreeNode, public TitledUrlNode { static const char kBookmarkBarNodeGuid[]; static const char kOtherBookmarksNodeGuid[]; static const char kMobileBookmarksNodeGuid[]; @@ -468,7 +444,7 @@ diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks static const char kManagedNodeGuid[]; // Creates a new node with |id|, |guid| and |url|. -@@ -241,6 +243,9 @@ class BookmarkPermanentNode : public BookmarkNode { +@@ -244,6 +246,9 @@ class BookmarkPermanentNode : public BookmarkNode { static std::unique_ptr CreateMobileBookmarks( int64_t id, bool visible_when_empty); diff --git a/build/patches/Add-menu-item-to-view-source.patch b/build/patches/Add-menu-item-to-view-source.patch index aea4a907..d8cab7be 100644 --- a/build/patches/Add-menu-item-to-view-source.patch +++ b/build/patches/Add-menu-item-to-view-source.patch @@ -35,7 +35,7 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re android:icon="@drawable/ic_add_to_home_screen" /> + ++ android:icon="@drawable/ic_drive_document_24dp" /> @@ -48,14 +48,14 @@ diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android android:icon="@drawable/ic_add_to_home_screen" /> + ++ android:icon="@drawable/ic_drive_document_24dp" /> diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -1814,6 +1814,8 @@ public class ChromeTabbedActivity extends ChromeActivity +@@ -2109,6 +2109,8 @@ public abstract class ChromeActivity } catch (ActivityNotFoundException e) { Toast.makeText(context, R.string.open_webapk_failed, Toast.LENGTH_SHORT).show(); } @@ -79,7 +79,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java -@@ -503,6 +503,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate +@@ -519,6 +519,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate } updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */); @@ -87,7 +87,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App // Only display reader mode settings menu option if the current page is in reader mode. menu.findItem(R.id.reader_mode_prefs_id).setVisible(shouldShowReaderModePrefs(currentTab)); -@@ -920,6 +921,19 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate +@@ -932,6 +933,19 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate } } @@ -110,7 +110,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java -@@ -233,6 +233,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat +@@ -225,6 +225,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat updateRequestDesktopSiteMenuItem(menu, currentTab, requestDesktopSiteVisible); MenuItem homescreenItem = menu.findItem(R.id.add_to_homescreen_id); MenuItem openWebApkItem = menu.findItem(R.id.open_webapk_id); @@ -121,7 +121,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -329,6 +329,9 @@ CHAR-LIMIT guidelines: +@@ -332,6 +332,9 @@ CHAR-LIMIT guidelines: Other Google services diff --git a/build/patches/Add-option-to-force-tablet-UI.patch b/build/patches/Add-option-to-force-tablet-UI.patch index 74d40bc2..7854dab9 100644 --- a/build/patches/Add-option-to-force-tablet-UI.patch +++ b/build/patches/Add-option-to-force-tablet-UI.patch @@ -66,7 +66,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java -@@ -110,7 +110,7 @@ public class ToolbarControlContainer extends OptimizedFrameLayout implements Con +@@ -107,7 +107,7 @@ public class ToolbarControlContainer extends OptimizedFrameLayout implements Con // On tablet, draw a fake tab strip and toolbar until the compositor is // ready to draw the real tab strip. (On phone, the toolbar is made entirely // of Android views, which are already initialized.) @@ -78,7 +78,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/Too diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -441,6 +441,7 @@ public final class ChromePreferenceKeys { +@@ -442,6 +442,7 @@ public final class ChromePreferenceKeys { public static final String FONT_USER_SET_FORCE_ENABLE_ZOOM = "user_set_force_enable_zoom"; public static final String HISTORY_SHOW_HISTORY_INFO = "history_home_show_info"; @@ -100,7 +100,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1140,6 +1140,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1152,6 +1152,12 @@ Your Google account may have other forms of browsing history like searches and a Turn off @@ -116,28 +116,28 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/components/BUILD.gn b/components/BUILD.gn --- a/components/BUILD.gn +++ b/components/BUILD.gn -@@ -475,7 +475,7 @@ test("components_unittests") { +@@ -488,7 +488,7 @@ test("components_unittests") { # On LaCrOS, tests use ash-chrome as a window manager, thus the dependency. # On other platforms, no components should depend on Chrome. -- if (!chromeos_is_browser_only) { -+ if (!chromeos_is_browser_only && !is_android) { +- if (!is_chromeos_lacros) { ++ if (!is_chromeos_lacros && !is_android) { assert_no_deps = [ "//chrome/*" ] } -@@ -719,7 +719,7 @@ if (!is_ios && !is_fuchsia) { +@@ -730,7 +730,7 @@ if (!is_ios && !is_fuchsia) { # On LaCrOS, tests use ash-chrome as a window manager, thus the dependency. # On other platforms, no components should depend on Chrome. -- if (!chromeos_is_browser_only) { -+ if (!chromeos_is_browser_only && !is_android) { +- if (!is_chromeos_lacros) { ++ if (!is_chromeos_lacros && !is_android) { assert_no_deps = [ "//chrome/*" ] } } diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn --- a/ui/android/BUILD.gn +++ b/ui/android/BUILD.gn -@@ -359,6 +359,7 @@ android_library("ui_no_recycler_view_java") { +@@ -362,6 +362,7 @@ android_library("ui_no_recycler_view_java") { ":ui_utils_java", "//base:base_java", "//base:jni_java", diff --git a/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch b/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch index 414faeca..81c16e48 100644 --- a/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch +++ b/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch @@ -5,9 +5,9 @@ Subject: Add option to not persist tabs across sessions --- .../java/res/xml/privacy_preferences.xml | 5 +++++ .../chrome/browser/ChromeTabbedActivity.java | 4 +++- - .../privacy/settings/PrivacySettings.java | 17 +++++++++++++++-- + .../privacy/settings/PrivacySettings.java | 17 ++++++++++++++++- .../android/strings/android_chrome_strings.grd | 6 ++++++ - 4 files changed, 29 insertions(+), 3 deletions(-) + 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml --- a/chrome/android/java/res/xml/privacy_preferences.xml @@ -27,7 +27,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java -@@ -1078,8 +1078,10 @@ public class ChromeTabbedActivity extends ChromeActivity IMAGE diff --git a/build/patches/Allow-playing-audio-in-background.patch b/build/patches/Allow-playing-audio-in-background.patch index c3715360..8241e5ad 100644 --- a/build/patches/Allow-playing-audio-in-background.patch +++ b/build/patches/Allow-playing-audio-in-background.patch @@ -10,7 +10,7 @@ Subject: Allow playing audio in background diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc --- a/media/blink/webmediaplayer_impl.cc +++ b/media/blink/webmediaplayer_impl.cc -@@ -1096,6 +1096,12 @@ bool WebMediaPlayerImpl::HasAudio() const { +@@ -1105,6 +1105,12 @@ bool WebMediaPlayerImpl::HasAudio() const { return pipeline_metadata_.has_audio; } @@ -23,7 +23,7 @@ diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_imp void WebMediaPlayerImpl::EnabledAudioTracksChanged( const blink::WebVector& enabledTrackIds) { DCHECK(main_task_runner_->BelongsToCurrentThread()); -@@ -3548,7 +3554,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const { +@@ -3528,7 +3534,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const { // Audio only stream is allowed to play when in background. // TODO: We should check IsBackgroundOptimizationCandidate here. But we need // to move the logic of checking video frames out of that function. @@ -39,7 +39,7 @@ diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_imp diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h -@@ -155,6 +155,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl +@@ -157,6 +157,8 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl // True if the loaded media has a playable video/audio track. bool HasVideo() const override; bool HasAudio() const override; diff --git a/build/patches/Allow-website-sign-in-without-account-sign-in.patch b/build/patches/Allow-website-sign-in-without-account-sign-in.patch index a375d6e7..b31a7453 100644 --- a/build/patches/Allow-website-sign-in-without-account-sign-in.patch +++ b/build/patches/Allow-website-sign-in-without-account-sign-in.patch @@ -10,7 +10,7 @@ Disable prefs::kSigninAllowedOnNextStartup by default. The setting can be found diff --git a/chrome/browser/signin/account_consistency_mode_manager.cc b/chrome/browser/signin/account_consistency_mode_manager.cc --- a/chrome/browser/signin/account_consistency_mode_manager.cc +++ b/chrome/browser/signin/account_consistency_mode_manager.cc -@@ -118,7 +118,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs( +@@ -119,7 +119,7 @@ void AccountConsistencyModeManager::RegisterProfilePrefs( #if BUILDFLAG(ENABLE_DICE_SUPPORT) registry->RegisterBooleanPref(kDiceMigrationCompletePref, false); #endif diff --git a/build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch b/build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch index 260ee042..526a23ef 100644 --- a/build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch +++ b/build/patches/Always-respect-async-dns-flag-regardless-of-SDK-version.patch @@ -11,7 +11,7 @@ Do not read experiment value for cronet async DNS configuration diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -152,7 +152,7 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAuthDynamicParams( +@@ -156,7 +156,7 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAuthDynamicParams( local_state->GetBoolean(prefs::kNtlmV2Enabled); #endif // defined(OS_POSIX) @@ -23,7 +23,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc --- a/components/cronet/url_request_context_config.cc +++ b/components/cronet/url_request_context_config.cc -@@ -562,7 +562,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions( +@@ -561,7 +561,8 @@ void URLRequestContextConfig::ParseAndSetExperimentalOptions( effective_experimental_options->Remove(it.key(), nullptr); continue; } diff --git a/build/patches/Always-use-new-tab-page-for-default-home-page.patch b/build/patches/Always-use-new-tab-page-for-default-home-page.patch index 0cb7925a..5261b089 100644 --- a/build/patches/Always-use-new-tab-page-for-default-home-page.patch +++ b/build/patches/Always-use-new-tab-page-for-default-home-page.patch @@ -10,7 +10,7 @@ Ignore any partner-provided home page. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java -@@ -152,9 +152,6 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat +@@ -146,9 +146,6 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat * if the homepage button is force enabled via flag. */ public static String getDefaultHomepageUri() { diff --git a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch index ff115629..4fc33446 100644 --- a/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch +++ b/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch @@ -46,7 +46,7 @@ diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl b/thir diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/third_party/blink/renderer/modules/webaudio/audio_context.cc --- a/third_party/blink/renderer/modules/webaudio/audio_context.cc +++ b/third_party/blink/renderer/modules/webaudio/audio_context.cc -@@ -398,7 +398,9 @@ double AudioContext::baseLatency() const { +@@ -406,7 +406,9 @@ double AudioContext::baseLatency() const { DCHECK(IsMainThread()); DCHECK(destination()); diff --git a/build/patches/Automated-domain-substitution.patch b/build/patches/Automated-domain-substitution.patch index fa24bcf6..4eead2a5 100644 --- a/build/patches/Automated-domain-substitution.patch +++ b/build/patches/Automated-domain-substitution.patch @@ -3,22 +3,19 @@ Date: Fri, 21 Aug 2020 13:41:07 +0200 Subject: Automated domain substitution --- - PRESUBMIT.py | 54 +- - .../devui/WebViewPackageError.java | 2 +- + PRESUBMIT.py | 56 +- .../cts_config/webview_cts_gcs_path.json | 24 +- android_webview/tools/generate_flag_labels.py | 2 +- android_webview/tools/record_netlog.py | 4 +- .../tools/remove_preinstalled_webview.py | 2 +- android_webview/tools/update_cts.py | 4 +- ash/app_list/PRESUBMIT.py | 2 +- - .../assistant/assistant_privacy_info_view.cc | 2 +- - ash/ash_strings.grd | 8 +- + ash/ash_strings.grd | 10 +- ash/assistant/assistant_setup_controller.cc | 2 +- ash/assistant/util/deep_link_util.cc | 16 +- ash/login/ui/login_user_menu_view.cc | 2 +- .../quick_answers_controller_impl.cc | 2 +- ash/resources/PRESUBMIT.py | 4 +- - ash/system/phonehub/ui_constants.h | 2 +- base/PRESUBMIT.py | 4 +- base/android/jni_generator/PRESUBMIT.py | 2 +- base/android/resource_exclusions.gni | 2 +- @@ -35,7 +32,6 @@ Subject: Automated domain substitution build/android/gyp/util/protoresources.py | 2 +- .../android/incremental_install/installer.py | 2 +- build/android/pylib/constants/__init__.py | 2 +- - .../android/commands/unzip/Unzip.java | 2 +- build/android/pylib/device_settings.py | 8 +- build/android/pylib/dex/dex_parser.py | 6 +- .../instrumentation/render_test.html.jinja | 2 +- @@ -52,19 +48,17 @@ Subject: Automated domain substitution build/chromeos/PRESUBMIT.py | 2 +- build/chromeos/test_runner.py | 2 +- build/config/android/rules.gni | 2 +- - build/config/chrome_build.gni | 2 +- build/config/chromeos/args.gni | 4 +- build/config/chromeos/rules.gni | 2 +- build/config/compiler/compiler.gni | 4 +- build/config/nacl/rules.gni | 2 +- build/config/sanitizers/sanitizers.gni | 2 +- build/config/win/control_flow_guard.gni | 2 +- - build/find_isolated_tests.py | 2 +- + build/fuchsia/binary_sizes.py | 2 +- build/linux/install-chromeos-fonts.py | 2 +- .../linux/sysroot_scripts/install-sysroot.py | 2 +- build/mac_toolchain.py | 2 +- build/nocompile.gni | 2 +- - build/run_swarming_xcode_install.py | 4 +- build/skia_gold_common/PRESUBMIT.py | 2 +- build/toolchain/cros_toolchain.gni | 2 +- .../lib/common/perf_tests_results_helper.py | 2 +- @@ -74,26 +68,16 @@ Subject: Automated domain substitution buildtools/ensure_gn_version.py | 2 +- cc/PRESUBMIT.py | 2 +- chrome/PRESUBMIT.py | 2 +- - .../AutofillAssistantClient.java | 2 +- ...roid_chrome_autofill_assistant_strings.grd | 2 +- - .../feedactionparser/FeedActionParser.java | 2 +- chrome/android/java/src/PRESUBMIT.py | 2 +- - .../chrome/browser/ChromeStringConstants.java | 6 +- - .../chrome/browser/ChromeTabbedActivity.java | 2 +- - .../chrome/browser/IntentHandler.java | 10 +- - .../customtabs/CustomButtonParams.java | 2 +- - .../browser/feedback/ConnectivityChecker.java | 4 +- - .../browser/omaha/RequestGenerator.java | 2 +- - .../suggestions/SuggestionsConfig.java | 2 +- - .../SuggestionsNavigationDelegate.java | 2 +- chrome/android/webapk/PRESUBMIT.py | 2 +- .../manifest/bound_manifest_config.json | 12 +- .../javatest_manifest_config_delta.json | 2 +- .../manifest/maps_go_manifest_config.json | 10 +- chrome/app/PRESUBMIT.py | 8 +- - chrome/app/chromium_strings.grd | 10 +- - chrome/app/generated_resources.grd | 236 ++-- - chrome/app/google_chrome_strings.grd | 10 +- + chrome/app/chromium_strings.grd | 12 +- + chrome/app/generated_resources.grd | 244 ++-- + chrome/app/google_chrome_strings.grd | 12 +- chrome/app/resources/locale_settings.grd | 10 +- chrome/app/theme/PRESUBMIT.py | 4 +- chrome/browser/about_flags.cc | 12 +- @@ -105,6 +89,7 @@ Subject: Automated domain substitution .../autofill/autofill_gstatic_reader.cc | 4 +- .../autofill/captured_sites_test_utils.cc | 2 +- .../browser_switcher_service.cc | 2 +- + chrome/browser/cart/cart_service.cc | 8 +- .../browser/chrome_browser_application_mac.mm | 2 +- .../chromeos/android_sms/android_sms_urls.cc | 16 +- chrome/browser/chromeos/app_mode/fake_cws.cc | 2 +- @@ -133,7 +118,8 @@ Subject: Automated domain substitution .../dns_latency_routine.cc | 2 +- .../dns_resolution_routine.cc | 2 +- .../http_firewall_routine.cc | 6 +- - .../network_diagnostics_util.cc | 6 +- + .../network_diagnostics_util.cc | 14 +- + .../video_conferencing_routine.cc | 4 +- .../plugin_vm/plugin_vm_license_checker.cc | 4 +- .../chromeos/plugin_vm/plugin_vm_util.cc | 6 +- .../chromeos/policy/heartbeat_scheduler.cc | 4 +- @@ -144,11 +130,10 @@ Subject: Automated domain substitution .../data_reduction_proxy_chrome_settings.cc | 4 +- chrome/browser/devtools/url_constants.cc | 4 +- .../mixed_content_download_blocking.cc | 2 +- - .../connectors/connectors_manager.cc | 4 +- + .../connectors/connectors_service.cc | 4 +- .../extension_request_notification.cc | 4 +- .../chrome_js_error_report_processor.cc | 4 +- .../cryptotoken_private_api.cc | 6 +- - .../enterprise_platform_keys_apitest_nss.cc | 2 +- .../identity_launch_web_auth_flow_function.cc | 2 +- .../chrome_management_api_delegate.cc | 2 +- .../tab_capture_performance_test_base.cc | 2 +- @@ -160,14 +145,12 @@ Subject: Automated domain substitution .../updater/chrome_update_client_config.cc | 2 +- .../floc_remote_permission_service.cc | 2 +- .../feedback/feedback_uploader_chrome.cc | 2 +- - chrome/browser/flag_descriptions.cc | 6 +- + chrome/browser/flag_descriptions.cc | 4 +- .../importer/edge_importer_browsertest_win.cc | 8 +- .../importer/ie_importer_browsertest_win.cc | 30 +- .../browser/installable/quality_enforcer.cc | 4 +- + .../lacros/cert_db_initializer_impl.cc | 40 +- .../service_discovery_client_mac.mm | 4 +- - .../kaleidoscope_data_provider_impl.cc | 2 +- - .../kaleidoscope/kaleidoscope_switches.cc | 6 +- - .../media/kaleidoscope/kaleidoscope_ui.cc | 4 +- .../cast/cast_media_route_provider.cc | 4 +- .../dial/dial_media_route_provider.cc | 12 +- .../media/webrtc/webrtc_browsertest_common.cc | 2 +- @@ -182,7 +165,7 @@ Subject: Automated domain substitution .../ads_page_load_metrics_observer.cc | 2 +- ...uction_proxy_metrics_observer_test_utils.h | 2 +- ...page_load_metrics_observer_test_harness.cc | 2 +- - ...rvice_worker_page_load_metrics_observer.cc | 4 +- + ...rvice_worker_page_load_metrics_observer.cc | 2 +- ...rd_manager_signin_intercept_test_helper.cc | 2 +- .../browser/pepper_broker_infobar_delegate.cc | 2 +- .../performance_hints_features.cc | 2 +- @@ -207,26 +190,27 @@ Subject: Automated domain substitution .../chromevox_manifest.json.jinja2 | 8 +- .../accessibility/select_to_speak/options.css | 2 +- .../select_to_speak/select_to_speak.js | 8 +- - .../select_to_speak/test_support.js | 2 +- .../select_to_speak_manifest.json.jinja2 | 8 +- .../switch_access/switch_access.js | 2 +- - .../add_supervision/add_supervision.js | 16 +- + .../switch_access_manifest.json.jinja2 | 4 +- + .../add_supervision/add_supervision_ui.js | 16 +- .../chromeos/arc_support/background.js | 12 +- .../chromeos/arc_support/playstore.js | 6 +- .../assistant_optin/assistant_value_prop.js | 2 +- .../connectivity_diagnostics/manifest.json | 4 +- .../resources/chromeos/echo/manifest.json | 122 +- .../edu_coexistence/edu_coexistence_ui.js | 2 +- + .../chromeos/emoji_picker/icons.html | 2 +- .../resources/chromeos/emulator/icons.html | 2 +- .../input_method/google_xkb_manifest.json | 10 +- - .../chromeos/login/offline_gaia.html | 2 +- - .../resources/chromeos/login/offline_gaia.js | 2 +- - .../login/screen_arc_terms_of_service.js | 2 +- + .../chromeos/login/arc_terms_of_service.js | 4 +- + .../chromeos/login/marketing_opt_in.html | 2 +- + .../chromeos/login/offline_login.html | 2 +- + .../resources/chromeos/login/offline_login.js | 2 +- .../browser_tabs_metadata_form.js | 2 +- .../chromeos/wallpaper_manager/manifest.json | 2 +- .../zip_archiver/unpacker-test/README.txt | 2 +- .../zip_archiver/unpacker-test/cpp/Makefile | 2 +- - .../resources/cloud_print_app/manifest.json | 4 +- .../browser/resources/cryptotoken/enroller.js | 2 +- .../default_apps/external_extensions.json | 6 +- .../discards/graph_doc_template.html | 2 +- @@ -246,13 +230,9 @@ Subject: Automated domain substitution chrome/browser/resources/local_ntp/voice.js | 2 +- .../resources/media/mei_preload/manifest.json | 2 +- chrome/browser/resources/media/webrtc_logs.js | 2 +- - .../media_router/extension/manifest.yaml | 8 +- - .../browser/resources/nearby_share/icons.html | 2 +- - .../nearby_share/nearby_discovery_page.html | 2 +- .../shared/nearby_contact_visibility.js | 2 +- - .../shared/nearby_shared_icons.html | 2 +- + .../shared/nearby_shared_icons.html | 4 +- .../nearby_shared_share_type_icons.html | 2 +- - .../shared/nearby_visibility_page.js | 2 +- .../domain_security_policy_view.html | 4 +- .../resources/net_internals/events_view.html | 2 +- .../network_speech_synthesis/manifest.json | 2 +- @@ -275,7 +255,6 @@ Subject: Automated domain substitution .../resources/settings/chromeos/PRESUBMIT.py | 4 +- .../crostini_disk_resize_dialog.html | 2 +- .../settings/chromeos/device_page/stylus.js | 2 +- - .../nearby_share_high_visibility_page.html | 2 +- .../os_a11y_page/manage_a11y_page.html | 2 +- .../channel_switcher_dialog.html | 2 +- .../chromeos/os_about_page/os_about_page.html | 2 +- @@ -287,8 +266,8 @@ Subject: Automated domain substitution .../resources/webstore_app/manifest.json | 4 +- .../certificate_reporting_service.cc | 2 +- .../chrome_cleaner/srt_field_trial_win.cc | 6 +- + .../chrome_enterprise_url_lookup_service.cc | 4 +- .../chrome_password_protection_service.cc | 4 +- - .../client_side_detection_service.cc | 2 +- .../binary_upload_service.cc | 4 +- .../check_client_download_request_base.cc | 4 +- .../download_protection/download_feedback.cc | 2 +- @@ -307,6 +286,7 @@ Subject: Automated domain substitution chrome/browser/signin/signin_ui_util.cc | 2 +- .../browser/ssl/connection_help_tab_helper.cc | 2 +- chrome/browser/ssl/sct_reporting_service.cc | 2 +- + .../subresource_redirect_util.cc | 2 +- .../child_accounts/family_info_fetcher.cc | 2 +- .../child_accounts/kids_management_api.cc | 2 +- .../permission_request_creator_apiary.cc | 2 +- @@ -337,11 +317,11 @@ Subject: Automated domain substitution chrome/browser/ui/signin_view_controller.cc | 2 +- ...al_provider_signin_dialog_win_test_data.cc | 2 +- .../toolbar/media_router_contextual_menu.cc | 6 +- - .../views/accessibility/invert_bubble_view.cc | 6 +- .../app_dialog/app_uninstall_dialog_view.cc | 2 +- .../ui/views/hats/hats_next_web_dialog.cc | 2 +- .../browser/ui/views/hats/hats_web_dialog.cc | 6 +- - ...picker_bubble_view_browsertest_chromeos.cc | 10 +- + ...picker_bubble_view_browsertest_chromeos.cc | 12 +- + .../media_router/cast_dialog_sink_button.cc | 2 +- .../ui/views/network_profile_bubble_view.cc | 2 +- .../ui/views/outdated_upgrade_bubble_view.cc | 2 +- .../plugin_vm/plugin_vm_installer_view.cc | 2 +- @@ -353,7 +333,7 @@ Subject: Automated domain substitution .../assistant_optin/assistant_optin_utils.cc | 2 +- .../edu_coexistence_login_handler_chromeos.cc | 2 +- .../ui/webui/interstitials/interstitial_ui.cc | 2 +- - .../browser/ui/webui/management_ui_handler.cc | 2 +- + .../webui/management/management_ui_handler.cc | 2 +- .../ui/webui/new_tab_page/foo/foo_handler.cc | 12 +- .../ui/webui/new_tab_page/new_tab_page_ui.cc | 4 +- chrome/browser/ui/webui/ntp/new_tab_ui.cc | 2 +- @@ -365,7 +345,13 @@ Subject: Automated domain substitution .../webui/welcome/ntp_background_handler.cc | 2 +- .../video_tutorials/internal/config.cc | 2 +- chrome/browser/vr/PRESUBMIT.py | 2 +- + .../preinstalled_web_apps/gmail.cc | 6 +- + .../preinstalled_web_apps/google_calendar.cc | 6 +- .../preinstalled_web_apps/google_docs.cc | 6 +- + .../preinstalled_web_apps/google_drive.cc | 6 +- + .../preinstalled_web_apps/google_sheets.cc | 6 +- + .../preinstalled_web_apps/google_slides.cc | 6 +- + .../preinstalled_web_apps/youtube.cc | 6 +- .../web_applications/web_app_install_task.cc | 2 +- .../chrome_authenticator_request_delegate.cc | 6 +- chrome/chrome_cleaner/PRESUBMIT.py | 2 +- @@ -375,7 +361,6 @@ Subject: Automated domain substitution .../logging/cleaner_logging_service.cc | 6 +- .../chrome_cleaner/logging/dummy_api_keys.cc | 4 +- .../logging/reporter_logging_service.cc | 6 +- - .../mojom/engine_requests.mojom | 2 +- .../apps/platform_apps/api/PRESUBMIT.py | 2 +- .../cloud_print/cloud_print_constants.cc | 2 +- chrome/common/extensions/PRESUBMIT.py | 2 +- @@ -399,237 +384,9 @@ Subject: Automated domain substitution chrome/common/extensions/api/webview_tag.json | 4 +- chrome/common/extensions/api/windows.json | 2 +- .../extensions/chrome_extensions_client.cc | 4 +- - .../api/bookmarks/basic/manifest.json | 2 +- - .../examples/api/bookmarks/basic/popup.html | 2 +- - .../docs/examples/api/commands/background.js | 2 +- - .../default_command_override/background.js | 2 +- - .../api/deviceInfo/basic/manifest.json | 2 +- - .../examples/api/deviceInfo/basic/popup.html | 2 +- - .../download_filename_controller/options.html | 4 +- - .../api/downloads/download_manager/popup.html | 2 +- - .../api/eventPage/basic/background.js | 8 +- - .../api/eventPage/basic/manifest.json | 2 +- - .../examples/api/notifications/options.html | 2 +- - .../api/omnibox/newtab_search/background.js | 2 +- - .../override/override_igoogle/redirect.html | 2 +- - .../docs/examples/api/tabs/pin/background.js | 2 +- - .../api/water_alarm_notification/popup.html | 2 +- - .../webview/capturevisibleregion/test2.html | 2 +- - .../apps/background-simple/index.html | 10 +- - .../apps/hello-java/HelloLicenseServlet.java | 4 +- - .../apps/hello-php/lib/oauth/CHANGELOG.txt | 6 +- - .../apps/hello-python/httplib2/__init__.py | 2 +- - .../docs/examples/apps/hello-python/main.py | 6 +- - .../examples/extensions/app_launcher/popup.js | 2 +- - .../docs/examples/extensions/buildbot/bg.js | 16 +- - .../extensions/buildbot/manifest.json | 6 +- - .../examples/extensions/buildbot/popup.js | 6 +- - .../extensions/calendar/javascript/options.js | 2 +- - .../extensions/calendar/views/options.html | 2 +- - .../extensions/chrome_search/background.js | 6 +- - .../extensions/chrome_search/manifest.json | 2 +- - .../extensions/constant_context/background.js | 2 +- - .../extensions/constant_context/manifest.json | 4 +- - .../extensions/download_images/background.js | 2 +- - .../extensions/email_this_page/options.js | 2 +- - .../docs/examples/extensions/fx/bg.js | 10 +- - .../examples/extensions/gdocs/background.html | 10 +- - .../extensions/gdocs/chrome_ex_oauth.html | 2 +- - .../examples/extensions/gdocs/manifest.json | 8 +- - .../examples/extensions/gdocs/options.html | 2 +- - .../docs/examples/extensions/gdocs/popup.html | 18 +- - .../examples/extensions/gmail/background.js | 2 +- - .../examples/extensions/gmail/manifest.json | 2 +- - .../extensions/irc/servlet/index.html | 2 +- - .../examples/extensions/mappy/manifest.json | 6 +- - .../docs/examples/extensions/mappy/popup.js | 4 +- - .../extensions/maps_app/manifest.json | 4 +- - .../examples/extensions/news/css/feed.css | 2 +- - .../examples/extensions/news/css/options.css | 2 +- - .../extensions/news/javascript/feed.js | 2 +- - .../extensions/news/javascript/util.js | 4 +- - .../examples/extensions/news/manifest.json | 2 +- - .../examples/extensions/news/views/feed.html | 6 +- - .../extensions/news/views/options.html | 2 +- - .../examples/extensions/news_a11y/feed.js | 4 +- - .../extensions/news_a11y/manifest.json | 4 +- - .../news_i18n/_locales/en/messages.json | 2 +- - .../extensions/news_i18n/manifest.json | 2 +- - .../extensions/oauth_contacts/background.js | 10 +- - .../extensions/oauth_contacts/contacts.html | 2 +- - .../extensions/oauth_contacts/manifest.json | 8 +- - .../plugin_settings/js/plugin_list_test.html | 2 +- - .../js/plugin_settings_test.html | 20 +- - .../plugin_settings/js/rule_list_test.html | 2 +- - .../extensions/talking_alarm_clock/popup.html | 4 +- - .../examples/extensions/ttsdemo/ttsdemo.html | 2 +- - .../howto/tab_shortcuts/tab_shortcuts.js | 2 +- - .../tutorials/analytics/manifest.json | 2 +- - .../examples/tutorials/analytics/popup.js | 2 +- - .../broken_background_color/background.js | 2 +- - .../get_started_complete/background.js | 2 +- - .../examples/tutorials/getstarted/popup.html | 2 +- - .../oauth_tutorial_complete/manifest.json | 2 +- - .../oauth_tutorial_complete/oauth.js | 4 +- - .../extensions/docs/server2/PRESUBMIT.py | 2 +- - .../extensions/docs/server2/admin_servlets.py | 2 +- - .../docs/server2/gcs_file_system.py | 2 +- - .../extensions/docs/server2/patch_servlet.py | 6 +- - .../extensions/docs/server2/redirector.py | 8 +- - .../docs/server2/rietveld_patcher.py | 10 +- - .../common/extensions/docs/server2/servlet.py | 2 +- - .../extensions/docs/server2/update_cache.py | 2 +- - .../extensions/docs/server2/url_constants.py | 12 +- - .../extensions/docs/static/js/search.js | 2 +- - .../common/extensions/docs/static/js/site.js | 2 +- - .../docs/templates/articles/a11y.html | 10 +- - .../docs/templates/articles/about_apps.html | 12 +- - .../docs/templates/articles/activeTab.html | 2 +- - .../docs/templates/articles/analytics.html | 6 +- - .../templates/articles/angular_framework.html | 26 +- - .../docs/templates/articles/api_index.html | 2 +- - .../docs/templates/articles/api_other.html | 2 +- - .../templates/articles/app_architecture.html | 4 +- - .../templates/articles/app_bluetooth.html | 4 +- - .../articles/app_codelab_basics.html | 2 +- - .../articles/app_codelab_filesystem.html | 4 +- - .../articles/app_codelab_images.html | 6 +- - .../articles/app_codelab_import_todomvc.html | 2 +- - .../templates/articles/app_codelab_intro.html | 4 +- - .../articles/app_codelab_publish.html | 2 +- - .../docs/templates/articles/app_external.html | 8 +- - .../templates/articles/app_frameworks.html | 2 +- - .../docs/templates/articles/app_identity.html | 16 +- - .../docs/templates/articles/app_network.html | 2 +- - .../docs/templates/articles/apps.html | 12 +- - .../articles/arc_in_app_payments.html | 14 +- - .../templates/articles/arc_playservices.html | 14 +- - .../docs/templates/articles/autoupdate.html | 10 +- - .../templates/articles/background_pages.html | 2 +- - .../articles/chrome_apps_on_mobile.html | 14 +- - .../articles/contentSecurityPolicy.html | 2 +- - .../templates/articles/content_scripts.html | 4 +- - .../articles/declare_permissions.html | 2 +- - .../articles/desktop_notifications.html | 8 +- - .../docs/templates/articles/develop_apps.html | 4 +- - .../docs/templates/articles/devguide.html | 2 +- - .../docs/templates/articles/devtools.html | 20 +- - .../docs/templates/articles/experimental.html | 8 +- - .../templates/articles/extensions_index.html | 14 +- - .../articles/external_extensions.html | 14 +- - .../docs/templates/articles/faq.html | 20 +- - .../docs/templates/articles/game_engines.html | 4 +- - .../docs/templates/articles/getstarted.html | 8 +- - .../templates/articles/getstarted_arc.html | 20 +- - .../docs/templates/articles/hosting.html | 8 +- - .../templates/articles/hosting_changes.html | 34 +- - .../docs/templates/articles/inform_users.html | 2 +- - .../docs/templates/articles/inline_faq.html | 4 +- - .../templates/articles/linux_hosting.html | 12 +- - .../docs/templates/articles/manifest/app.html | 4 +- - .../articles/manifest/default_locale.html | 2 +- - .../articles/manifest/description.html | 4 +- - .../manifest/externally_connectable.html | 4 +- - .../articles/manifest/homepage_url.html | 4 +- - .../templates/articles/manifest/icons.html | 4 +- - .../docs/templates/articles/manifest/key.html | 10 +- - .../articles/manifest/kiosk_enabled.html | 28 +- - .../articles/manifest/manifest_version.html | 2 +- - .../manifest/minimum_chrome_version.html | 2 +- - .../articles/manifest/nacl_modules.html | 2 +- - .../templates/articles/manifest/name.html | 4 +- - .../articles/manifest/requirements.html | 6 +- - .../templates/articles/manifest/sandbox.html | 10 +- - .../templates/articles/manifest/storage.html | 6 +- - .../articles/manifest/url_handlers.html | 2 +- - .../templates/articles/manifest/version.html | 2 +- - .../manifest/web_accessible_resources.html | 6 +- - .../templates/articles/match_patterns.html | 30 +- - .../docs/templates/articles/messaging.html | 4 +- - .../articles/migrating_to_manifest_v3.html | 12 +- - .../migrating_to_service_workers.html | 14 +- - .../docs/templates/articles/migration.html | 362 +++--- - .../templates/articles/nativeMessaging.html | 12 +- - .../docs/templates/articles/npapi.html | 6 +- - .../docs/templates/articles/offline_apps.html | 2 +- - .../templates/articles/offline_storage.html | 10 +- - .../docs/templates/articles/overview.html | 4 +- - .../docs/templates/articles/packaging.html | 6 +- - .../docs/templates/articles/performance.html | 6 +- - .../articles/permission_warnings.html | 6 +- - .../docs/templates/articles/publish_app.html | 6 +- - .../templates/articles/richNotifications.html | 4 +- - .../templates/articles/sandboxingEval.html | 4 +- - .../docs/templates/articles/security.html | 20 +- - .../templates/articles/sencha_framework.html | 2 +- - .../templates/articles/settings_override.html | 8 +- - .../templates/articles/single_purpose.html | 28 +- - .../docs/templates/articles/themes.html | 10 +- - .../templates/articles/tut_analytics.html | 16 +- - .../templates/articles/tut_debugging.html | 10 +- - .../tut_migration_to_manifest_v2.html | 2 +- - .../docs/templates/articles/tut_oauth.html | 22 +- - .../docs/templates/articles/tutorials.html | 2 +- - .../templates/articles/user_interface.html | 12 +- - .../docs/templates/articles/user_privacy.html | 6 +- - .../docs/templates/articles/webstore.html | 2 +- - .../docs/templates/articles/xhr.html | 16 +- - .../intros/bluetooth_low_energy.html | 2 +- - .../docs/templates/intros/bookmarks.html | 4 +- - .../docs/templates/intros/browserAction.html | 2 +- - .../docs/templates/intros/browsingData.html | 2 +- - .../templates/intros/certificateProvider.html | 4 +- - .../docs/templates/intros/commands.html | 2 +- - .../templates/intros/contentSettings.html | 2 +- - .../docs/templates/intros/cookies.html | 4 +- - .../templates/intros/declarativeContent.html | 6 +- - .../intros/declarativeNetRequest.html | 18 +- - .../intros/declarativeWebRequest.html | 10 +- - .../intros/devtools_inspectedWindow.html | 2 +- - .../docs/templates/intros/downloads.html | 2 +- - .../intros/enterprise_deviceAttributes.html | 2 +- - .../enterprise_networkingAttributes.html | 2 +- - .../intros/enterprise_platformKeys.html | 2 +- - .../docs/templates/intros/events.html | 8 +- - .../docs/templates/intros/fontSettings.html | 2 +- - .../docs/templates/intros/history.html | 4 +- - .../docs/templates/intros/i18n.html | 10 +- - .../docs/templates/intros/input_ime.html | 2 +- - .../templates/intros/networkingPrivate.html | 2 +- - .../docs/templates/intros/pageAction.html | 2 +- - .../docs/templates/intros/permissions.html | 14 +- - .../docs/templates/intros/privacy.html | 2 +- - .../docs/templates/intros/storage.html | 2 +- - .../docs/templates/intros/tabs.html | 2 +- - .../docs/templates/intros/webNavigation.html | 6 +- - .../docs/templates/intros/webRequest.html | 8 +- - .../docs/templates/intros/webview_tag.html | 12 +- - .../docs/templates/intros/windows.html | 6 +- - .../docs/templates/json/apps_sidenav.json | 2 +- - .../docs/templates/json/chrome_sidenav.json | 2 +- - .../templates/json/content_providers.json | 2 +- - .../templates/json/extensions_sidenav.json | 4 +- - .../docs/templates/json/intro_tables.json | 22 +- - .../docs/templates/json/strings.json | 40 +- - .../docs/templates/private/api_reference.html | 2 +- - .../docs/templates/private/article.html | 6 +- - .../docs/templates/private/fatnav.html | 2 +- - .../private/intro_tables/master_message.html | 2 +- - .../private/permissions/background.html | 2 +- - .../private/permissions/favicon.html | 2 +- - .../private/permissions/notifications.html | 4 +- - .../private/permissions/pointer_lock.html | 2 +- - .../docs/templates/private/site.html | 10 +- - .../docs/templates/private/warning_beta.html | 4 +- - .../docs/templates/private/warning_dev.html | 2 +- - .../templates/private/warning_master.html | 2 +- - .../docs/templates/public/apps/redirects.json | 18 +- - .../public/extensions/redirects.json | 10 +- - .../docs/templates/public/owners.html | 2 +- chrome/common/google_url_loader_throttle.cc | 4 +- - chrome/common/service_process.mojom | 2 +- chrome/common/url_constants.cc | 230 ++-- - .../extension/task_manager_unittests.cc | 4 +- + .../extension/task_manager_unittests.cc | 6 +- .../gaiacp/associated_user_validator.cc | 2 +- .../associated_user_validator_unittests.cc | 4 +- .../gaiacp/gaia_credential_base.cc | 8 +- @@ -695,13 +452,12 @@ Subject: Automated domain substitution chrome/tools/build/PRESUBMIT.py | 2 +- chrome/tools/webforms_aggregator_tests.py | 4 +- chrome/tools/weburl_links.txt | 6 +- - chrome/updater/constants.cc | 8 +- + chrome/updater/branding.gni | 8 +- chrome/updater/tools/PRESUBMIT.py | 2 +- chrome/updater/win/app_install_controller.cc | 2 +- chrome/updater/win/signing/PRESUBMIT.py | 2 +- chrome/utility/importer/ie_importer_win.cc | 2 +- .../shell_devtools_discovery_page.html | 2 +- - .../chromecast/shell/CastCrashUploader.java | 6 +- .../browser/service/cast_service_simple.cc | 2 +- chromecast/browser/webui/cast_webui.cc | 4 +- chromecast/common/extensions_api/i18n.json | 2 +- @@ -713,10 +469,16 @@ Subject: Automated domain substitution .../resources/js/lib/analytics.js | 14 +- .../camera_app_ui/resources/js/util.js | 2 +- .../camera_app_ui/resources/manifest.json | 2 +- + .../resources/strings/camera_strings.grd | 2 +- + .../resources/routine_section.js | 2 +- chromeos/components/drivefs/drivefs_auth.cc | 2 +- .../multidevice/remote_device_test_util.cc | 2 +- .../multidevice/stub_multidevice_util.cc | 2 +- + chromeos/components/phonehub/url_constants.cc | 2 +- .../translation_result_loader.cc | 2 +- + .../scanning/resources/scanner_select.html | 2 +- + .../scanning/resources/scanning_app.html | 2 +- + .../scanning/resources/scanning_app.js | 2 +- .../trial_group/trial_group_checker.cc | 2 +- .../simple_geolocation_provider.cc | 2 +- chromeos/printing/ppd_provider.h | 2 +- @@ -737,7 +499,7 @@ Subject: Automated domain substitution .../printing/uri_fuzzer_seed_corpus/uri49.txt | 2 +- .../printing/uri_fuzzer_seed_corpus/uri5.txt | 2 +- .../assistant_manager_service_impl.cc | 2 +- - chromeos/services/assistant/service.cc | 6 +- + chromeos/services/assistant/service.cc | 4 +- .../device_sync/cryptauth_client_impl.cc | 8 +- chromeos/services/ime/constants.cc | 2 +- chromeos/timezone/timezone_request.cc | 2 +- @@ -745,11 +507,6 @@ Subject: Automated domain substitution .../virtual_driver_setup_resources.grd | 2 +- .../win/port_monitor/port_monitor.cc | 2 +- .../error_page_populator.cc | 2 +- - .../arc/mojom/accessibility_helper.mojom | 14 +- - components/arc/mojom/app_permissions.mojom | 2 +- - components/arc/mojom/bluetooth.mojom | 10 +- - components/arc/mojom/file_system.mojom | 6 +- - components/arc/mojom/intent_helper.mojom | 2 +- .../predictor_config_definitions.cc | 2 +- components/autofill/PRESUBMIT.py | 2 +- .../autofill/content/renderer/PRESUBMIT.py | 2 +- @@ -777,35 +534,14 @@ Subject: Automated domain substitution .../crash/core/browser/resources/crashes.js | 4 +- components/cronet/PRESUBMIT.py | 2 +- .../cronet_consumer_app_delegate.mm | 4 +- - .../cronet_consumer_view_controller.m | 4 +- components/cronet/native/cronet.idl | 14 +- components/cronet/tools/generate_javadoc.py | 2 +- .../core/common/chrome_proxy_header.txt | 4 +- .../common/data_reduction_proxy_params.cc | 2 +- .../core/html/dom_distiller_viewer.html | 2 +- .../core/javascript/dom_distiller_viewer.js | 2 +- + components/dom_distiller/core/viewer.cc | 6 +- .../domain_reliability/bake_in_configs.py | 286 ++--- - .../baked_in_configs/c_2mdn_net.json | 14 +- - .../c_android_clients_google_com.json | 16 +- - .../c_bigcache_googleapis_com.json | 16 +- - ...c_doc-0-0-sj_sj_googleusercontent_com.json | 16 +- - .../baked_in_configs/c_docs_google_com.json | 16 +- - .../baked_in_configs/c_drive_google_com.json | 16 +- - .../c_googlesyndication_com.json | 16 +- - .../baked_in_configs/c_pack_google_com.json | 16 +- - .../baked_in_configs/c_play_google_com.json | 16 +- - .../baked_in_configs/c_youtube_com.json | 16 +- - .../baked_in_configs/clients2_google_com.json | 16 +- - .../baked_in_configs/docs_google_com.json | 16 +- - .../baked_in_configs/gcp_gvt2_com.json | 14 +- - .../baked_in_configs/gcp_gvt6_com.json | 14 +- - .../google-analytics_com.json | 16 +- - .../baked_in_configs/googlevideo_com.json | 16 +- - .../baked_in_configs/gvt1_com.json | 14 +- - .../baked_in_configs/gvt2_com.json | 14 +- - .../baked_in_configs/gvt6_com.json | 14 +- - .../baked_in_configs/ssl_gstatic_com.json | 16 +- - .../baked_in_configs/www_google_com.json | 16 +- components/drive/service/drive_api_service.cc | 6 +- .../error_page/common/localized_error.cc | 2 +- .../favicon/core/large_icon_service_impl.cc | 2 +- @@ -826,7 +562,6 @@ Subject: Automated domain substitution components/media_router/common/media_source.h | 2 +- .../metrics/net/net_metrics_log_uploader.cc | 2 +- components/metrics/url_constants.cc | 6 +- - .../minidump_uploader/MinidumpUploader.java | 2 +- components/nacl/docs/dev/index.html | 4 +- components/net_log/resources/net_export.html | 6 +- .../network_time/network_time_tracker.cc | 2 +- @@ -839,7 +574,7 @@ Subject: Automated domain substitution .../omnibox/browser/document_provider.cc | 10 +- .../browser/document_suggestions_service.cc | 4 +- .../omnibox/browser/zero_suggest_provider.cc | 2 +- - .../optimization_guide_constants.cc | 4 +- + .../core/optimization_guide_constants.cc | 4 +- .../core/uma_page_load_metrics_observer.cc | 2 +- ...d_metrics_observer_content_test_harness.cc | 2 +- .../use_counter_page_load_metrics_observer.cc | 4 +- @@ -873,7 +608,7 @@ Subject: Automated domain substitution .../core/browser/browser_policy_connector.cc | 10 +- components/policy/core/browser/url_util.cc | 4 +- .../core/common/policy_loader_common.cc | 2 +- - .../policy/resources/policy_templates.json | 1036 ++++++++--------- + .../policy/resources/policy_templates.json | 1126 ++++++++--------- .../policy/resources/webui/policy_base.js | 2 +- .../policy/test_support/policy_testserver.py | 14 +- .../policy/tools/generate_extension_admx.py | 2 +- @@ -882,6 +617,7 @@ Subject: Automated domain substitution .../template_writers/writers/adm_writer.py | 4 +- .../writers/doc_atomic_groups_writer.py | 2 +- .../template_writers/writers/doc_writer.py | 10 +- + .../writers/ios_app_config_writer.py | 2 +- .../writers/template_writer.py | 2 +- .../query_tiles/internal/tile_config.cc | 2 +- components/quirks/quirks_client.cc | 2 +- @@ -938,32 +674,31 @@ Subject: Automated domain substitution components/resources/terms/terms_vi.html | 4 +- components/resources/terms/terms_zh-CN.html | 4 +- components/resources/terms/terms_zh-TW.html | 4 +- + .../browser/client_side_detection_service.cc | 2 +- .../password_protection_service.cc | 6 +- .../content/triggers/trigger_util.cc | 2 +- - .../browser/safe_browsing_token_fetcher.cc | 2 +- + .../browser/safe_browsing_token_fetcher.h | 2 +- .../core/common/safebrowsing_constants.cc | 2 +- .../core/db/v4_protocol_manager_util.cc | 4 +- - .../core/realtime/url_lookup_service_base.cc | 2 +- + .../core/realtime/url_lookup_service.cc | 2 +- .../safe_search_url_checker_client.cc | 2 +- .../safe_search_api/stub_url_checker.cc | 2 +- components/safety_check/url_constants.cc | 2 +- - .../search_engines/prepopulated_engines.json | 8 +- - .../CaptivePortalHelper.java | 2 +- .../content/ssl_blocking_page.h | 2 +- .../browser/resources/interstitial_large.js | 2 +- .../core/controller_client.cc | 2 +- .../core/safe_browsing_loud_error_ui.cc | 4 +- .../security_interstitials/core/urls.cc | 4 +- .../services/quarantine/quarantine_mac.mm | 2 +- - .../browser/chrome_connected_header_helper.cc | 6 +- - .../browser/account_consistency_service.mm | 8 +- + .../core/common/disabled_sites.cc | 6 +- + .../browser/chrome_connected_header_helper.cc | 4 +- + .../browser/account_consistency_service.mm | 14 +- .../signin/public/base/test_signin_client.cc | 2 +- .../browser/spelling_service_client.cc | 2 +- .../browser/subresource_filter_constants.h | 8 +- .../core/common/PRESUBMIT.py | 2 +- .../suggestions/suggestions_service_impl.cc | 4 +- components/sync/PRESUBMIT.py | 2 +- - .../components/sync/SyncConstants.java | 2 +- components/sync/base/sync_util.cc | 4 +- ...ted_vault_access_token_fetcher_frontend.cc | 2 +- components/sync_bookmarks/PRESUBMIT.py | 2 +- @@ -976,12 +711,13 @@ Subject: Automated domain substitution components/ukm/ukm_reporting_service.cc | 2 +- .../top_domains/make_alexa_top_list.py | 2 +- components/url_pattern_index/PRESUBMIT.py | 2 +- - .../firstrun/VariationsSeedFetcher.java | 2 +- components/variations/proto/PRESUBMIT.py | 2 +- .../variations/variations_url_constants.cc | 4 +- + .../installable/installable_logging.cc | 2 +- components/wifi/wifi_service_win.cc | 2 +- content/app/resources/README.txt | 4 +- .../render_widget_host_view_cocoa.mm | 2 +- + content/browser/conversions/PRESUBMIT.py | 2 +- .../indexed_db/indexed_db_backing_store.cc | 4 +- .../indexed_db/indexed_db_reporting.cc | 2 +- .../portal/portal_navigation_throttle.cc | 2 +- @@ -995,12 +731,10 @@ Subject: Automated domain substitution .../browser/web_contents/web_contents_impl.cc | 2 +- .../browser/webauth/authenticator_common.cc | 6 +- .../zygote_host/zygote_host_impl_linux.cc | 2 +- - content/common/renderer.mojom | 2 +- content/public/PRESUBMIT.py | 4 +- content/renderer/PRESUBMIT.py | 2 +- .../pepper/pepper_media_device_manager.cc | 2 +- content/renderer/render_thread_impl.cc | 14 +- - .../chromium/content_shell/ShellManager.java | 2 +- .../shell/browser/shell_browser_main_parts.cc | 2 +- content/zygote/zygote_main_linux.cc | 2 +- device/bluetooth/bluetooth_adapter_mac.mm | 2 +- @@ -1038,7 +772,7 @@ Subject: Automated domain substitution google_apis/drive/drive_api_url_generator.cc | 4 +- google_apis/gaia/gaia_auth_fetcher.cc | 4 +- google_apis/gaia/gaia_auth_util.cc | 6 +- - google_apis/gaia/gaia_constants.cc | 34 +- + google_apis/gaia/gaia_constants.cc | 36 +- google_apis/gaia/gaia_oauth_client.cc | 6 +- google_apis/gaia/gaia_urls.cc | 8 +- google_apis/gcm/base/mcs_util.cc | 2 +- @@ -1061,6 +795,7 @@ Subject: Automated domain substitution .../lib/browser/protocol/headless_handler.cc | 2 +- .../resources/devtools_discovery_page.html | 2 +- infra/config/PRESUBMIT.py | 4 +- + infra/config/scripts/PRESUBMIT.py | 2 +- ios/PRESUBMIT.py | 2 +- ios/README.txt | 2 +- ios/build/bots/scripts/PRESUBMIT.py | 2 +- @@ -1075,7 +810,7 @@ Subject: Automated domain substitution ios/chrome/browser/autofill/BUILD.gn | 4 +- .../autofill/automation/automation_action.mm | 2 +- ...chrome_browser_state_removal_controller.mm | 2 +- - ios/chrome/browser/chrome_url_constants.cc | 28 +- + ios/chrome/browser/chrome_url_constants.cc | 26 +- .../breadcrumb_manager_tab_helper.mm | 4 +- ios/chrome/browser/flags/about_flags.mm | 4 +- .../omnibox_geolocation_controller.mm | 2 +- @@ -1089,6 +824,7 @@ Subject: Automated domain substitution .../content_suggestions/ntp_home_mediator.mm | 8 +- ios/chrome/browser/ui/ntp/incognito_view.mm | 2 +- .../ui/ntp/notification_promo_whats_new.mm | 2 +- + .../ui/qr_scanner/qr_scanner_app_interface.mm | 2 +- .../ui/settings/settings_app_interface.mm | 2 +- .../table_cell_catalog_view_controller.mm | 8 +- .../translate_table_view_controller.mm | 2 +- @@ -1107,14 +843,9 @@ Subject: Automated domain substitution ios/web_view/PRESUBMIT.py | 2 +- ios/web_view/internal/cwv_flags.mm | 2 +- ios/web_view/internal/cwv_web_view.mm | 2 +- - ios/web_view/shell/shell_view_controller.m | 8 +- .../notifier/base/gaia_token_pre_xmpp_auth.cc | 2 +- jingle/notifier/base/notifier_options_util.cc | 4 +- media/PRESUBMIT.py | 4 +- - .../video/chromeos/mojom/camera3.mojom | 6 +- - .../video/chromeos/mojom/camera_common.mojom | 6 +- - .../chromeos/mojom/camera_metadata.mojom | 4 +- - media/mojo/mojom/provision_fetcher.mojom | 2 +- mojo/PRESUBMIT.py | 2 +- native_client_sdk/PRESUBMIT.py | 2 +- .../src/build_tools/build_paths.py | 2 +- @@ -1131,7 +862,6 @@ Subject: Automated domain substitution .../src/build_tools/update_nacl_manifest.py | 6 +- .../src/build_tools/update_sdktools.py | 2 +- native_client_sdk/src/doc/Makefile | 2 +- - native_client_sdk/src/doc/_book.yaml | 2 +- .../security-contest/contest-warning.txt | 4 +- native_client_sdk/src/doc/conf.py | 2 +- .../src/doc/doxygen/generate_docs.py | 2 +- @@ -1173,7 +903,6 @@ Subject: Automated domain substitution net/dns/public/doh_provider_entry.cc | 4 +- net/http/http_server_properties.cc | 4 +- net/http/http_transaction_test_util.cc | 6 +- - net/http/transport_security_state_static.json | 516 ++++---- net/http/webfonts_histogram.cc | 6 +- net/log/file_net_log_observer.cc | 2 +- net/quic/crypto/proof_verifier_chromium.cc | 2 +- @@ -1203,11 +932,6 @@ Subject: Automated domain substitution printing/backend/PRESUBMIT.py | 2 +- printing/backend/win_helper.cc | 4 +- printing/print_settings_initializer_win.cc | 2 +- - .../org/chromium/chromoting/Chromoting.java | 4 +- - .../chromoting/PrivacyPolicyActivity.java | 2 +- - .../chromoting/TermsOfServiceActivity.java | 2 +- - .../chromoting/help/HelpAndFeedbackBasic.java | 6 +- - .../chromoting/jni/JniOAuthTokenGetter.java | 4 +- remoting/base/breakpad_mac.mm | 2 +- remoting/base/chromium_url_request.cc | 2 +- remoting/base/service_urls.cc | 8 +- @@ -1236,51 +960,249 @@ Subject: Automated domain substitution sandbox/linux/suid/sandbox.c | 2 +- sandbox/policy/win/sandbox_win.cc | 2 +- .../geolocation/network_location_request.cc | 2 +- - .../device/public/mojom/geoposition.mojom | 2 +- .../image_annotation_service.h | 4 +- - .../network/public/mojom/cookie_manager.mojom | 4 +- - .../public/mojom/network_context.mojom | 4 +- - .../public/mojom/network_service.mojom | 4 +- - .../network/public/mojom/udp_socket.mojom | 2 +- - .../memory_instrumentation.mojom | 4 +- - services/tracing/public/mojom/constants.mojom | 2 +- - .../public/mojom/perfetto_service.mojom | 4 +- - styleguide/c++/c++11.html | 32 +- + styleguide/c++/c++11.html | 36 +- styleguide/c++/chromium-cpp/main.py | 2 +- + testing/PRESUBMIT.py | 2 +- + .../java/AndroidManifest.xml.jinja2 | 4 +- + .../browser_test_commands_linux.txt | 2 +- + .../chromoting_test_driver_commands_linux.txt | 4 +- + testing/libfuzzer/unittest_main.cc | 2 +- + testing/merge_scripts/PRESUBMIT.py | 2 +- + .../merge_scripts/code_coverage/PRESUBMIT.py | 2 +- + .../code_coverage/merge_results.py | 2 +- + testing/merge_scripts/results_merger.py | 2 +- + testing/scripts/PRESUBMIT.py | 2 +- + testing/scripts/common.py | 2 +- + testing/scripts/run_chromedriver_tests.py | 2 +- + testing/scripts/run_performance_tests.py | 4 +- + testing/test_env.py | 8 +- + testing/trigger_scripts/PRESUBMIT.py | 2 +- + .../trigger_scripts/base_test_triggerer.py | 2 +- + testing/variations/PRESUBMIT.py | 2 +- + .../variations/fieldtrial_testing_config.json | 26 +- + .../markdown/extensions/smarty.py | 2 +- + .../abseil-cpp/absl/abseil.podspec.gen.py | 2 +- + third_party/abseil-cpp/conanfile.py | 2 +- + third_party/abseil-cpp/generate_def_files.py | 2 +- + third_party/abseil-cpp/roll_abseil.py | 4 +- + third_party/afl/src/Makefile | 4 +- + third_party/afl/src/afl-analyze.c | 2 +- third_party/afl/src/afl-as.c | 2 +- - .../mojom/payments/payment_handler_host.mojom | 2 +- - .../mojom/payments/payment_request.mojom | 2 +- - .../peer_connection_tracker.mojom | 2 +- - .../mojom/remote_objects/remote_objects.mojom | 2 +- - .../core/css/css_properties_ranking.json5 | 2 +- - .../blink/renderer/core/frame/deprecation.cc | 52 +- - .../blink/renderer/core/frame/settings.json5 | 4 +- + third_party/afl/src/afl-fuzz.c | 2 +- + third_party/afl/src/afl-gcc.c | 2 +- + third_party/afl/src/afl-gotcpu.c | 4 +- + third_party/afl/src/afl-showmap.c | 2 +- + third_party/afl/src/afl-tmin.c | 2 +- + third_party/afl/src/docs/QuickStartGuide.txt | 2 +- + third_party/afl/src/docs/historical_notes.txt | 2 +- + third_party/afl/src/docs/notes_for_asan.txt | 2 +- + third_party/afl/src/docs/sister_projects.txt | 4 +- + .../canvas_harness/canvas_harness.html | 2 +- + third_party/afl/src/libdislocator/Makefile | 2 +- + third_party/afl/src/libtokencap/Makefile | 2 +- + third_party/afl/src/llvm_mode/Makefile | 6 +- + .../afl/src/llvm_mode/afl-clang-fast.c | 4 +- + .../Android_SDK_License-December_9_2016.txt | 4 +- + .../development/scripts/PRESUBMIT.py | 2 +- + third_party/blink/PRESUBMIT.py | 4 +- + .../common/loader/record_load_histograms.cc | 2 +- + .../public/common/scheduler/PRESUBMIT.py | 2 +- + .../public/mojom/feature_policy/PRESUBMIT.py | 2 +- + .../public/mojom/use_counter/PRESUBMIT.py | 2 +- + .../public/mojom/web_feature/PRESUBMIT.py | 2 +- + .../blink/public/strings/blink_strings.grd | 8 +- + .../blink/renderer/bindings/PRESUBMIT.py | 2 +- + .../scripts/aggregate_generated_bindings.py | 2 +- + .../bindings/scripts/blink_idl_lexer.py | 2 +- + .../bindings/scripts/blink_idl_parser.py | 2 +- + .../bindings/scripts/code_generator_v8.py | 2 +- + .../scripts/compute_global_objects.py | 2 +- + .../compute_interfaces_info_individual.py | 2 +- + .../compute_interfaces_info_overall.py | 2 +- + .../scripts/generate_global_constructors.py | 2 +- + .../renderer/bindings/scripts/idl_compiler.py | 2 +- + .../bindings/scripts/idl_definitions.py | 2 +- + .../renderer/bindings/scripts/idl_reader.py | 4 +- + .../bindings/scripts/idl_validator.py | 2 +- + .../scripts/interface_dependency_resolver.py | 2 +- + .../renderer/bindings/scripts/utilities.py | 2 +- + .../bindings/scripts/v8_attributes.py | 2 +- + .../bindings/scripts/v8_callback_function.py | 2 +- + .../bindings/scripts/v8_callback_interface.py | 2 +- + .../renderer/bindings/scripts/v8_interface.py | 2 +- + .../renderer/bindings/scripts/v8_methods.py | 2 +- + .../renderer/bindings/scripts/v8_types.py | 2 +- + .../renderer/bindings/scripts/v8_utilities.py | 2 +- + .../bindings/tests/idls/core/test_node.idl | 2 +- + .../build/scripts/update_css_ranking.py | 4 +- + .../renderer/core/css/css_font_face_rule.idl | 2 +- + .../renderer/core/css/css_import_rule.idl | 2 +- + .../renderer/core/css/css_media_rule.idl | 2 +- + .../blink/renderer/core/css/css_page_rule.idl | 2 +- + .../blink/renderer/core/css/css_rule.idl | 2 +- + .../core/css/css_style_declaration.idl | 2 +- + .../renderer/core/css/css_style_rule.idl | 2 +- + .../renderer/core/css/css_style_sheet.idl | 2 +- + .../core/css/remote_font_face_source.cc | 2 +- + .../blink/renderer/core/css/style_sheet.idl | 2 +- + .../renderer/core/css/style_sheet_list.idl | 2 +- + third_party/blink/renderer/core/dom/attr.idl | 2 +- + .../blink/renderer/core/dom/cdata_section.idl | 2 +- + .../blink/renderer/core/dom/child_node.idl | 2 +- + .../blink/renderer/core/dom/comment.idl | 2 +- + .../renderer/core/dom/dom_implementation.idl | 2 +- + .../blink/renderer/core/dom/element.idl | 4 +- + .../blink/renderer/core/dom/events/event.idl | 2 +- + .../core/dom/events/event_listener.idl | 2 +- + .../renderer/core/dom/events/event_target.cc | 4 +- + .../renderer/core/dom/events/event_target.idl | 2 +- + .../blink/renderer/core/dom/iterator.idl | 2 +- + .../renderer/core/dom/named_node_map.idl | 2 +- + third_party/blink/renderer/core/dom/node.idl | 2 +- + .../blink/renderer/core/dom/node_filter.idl | 2 +- + .../blink/renderer/core/dom/node_iterator.idl | 2 +- + .../blink/renderer/core/dom/node_list.idl | 2 +- + .../core/dom/processing_instruction.idl | 2 +- + third_party/blink/renderer/core/dom/range.idl | 2 +- + .../blink/renderer/core/dom/tree_walker.idl | 2 +- + .../events/application_cache_error_event.idl | 2 +- + .../renderer/core/events/keyboard_event.idl | 2 +- + .../blink/renderer/core/events/touch_event.cc | 2 +- + .../blink/renderer/core/events/wheel_event.cc | 2 +- + .../renderer/core/events/wheel_event.idl | 2 +- + .../blink/renderer/core/frame/deprecation.cc | 48 +- + .../blink/renderer/core/frame/local_frame.cc | 4 +- + .../core/html/custom/element_internals.idl | 2 +- + .../core/html/custom/validity_state_flags.idl | 2 +- + .../core/html/forms/html_button_element.idl | 2 +- + .../forms/html_form_controls_collection.idl | 2 +- + .../core/html/forms/html_form_element.idl | 2 +- + .../core/html/forms/html_input_element.idl | 2 +- + .../core/html/forms/html_label_element.idl | 2 +- + .../core/html/forms/html_legend_element.idl | 2 +- + .../core/html/forms/html_option_element.idl | 2 +- + .../html/forms/html_options_collection.idl | 2 +- + .../core/html/forms/html_select_element.idl | 2 +- + .../html/forms/html_text_area_element.idl | 2 +- + .../core/html/forms/validity_state.idl | 2 +- + .../core/html/html_anchor_element.idl | 2 +- + .../renderer/core/html/html_area_element.idl | 2 +- + .../renderer/core/html/html_body_element.idl | 2 +- + .../renderer/core/html/html_collection.idl | 2 +- + .../renderer/core/html/html_document.idl | 2 +- + .../blink/renderer/core/html/html_element.idl | 2 +- + .../renderer/core/html/html_embed_element.idl | 2 +- + .../renderer/core/html/html_frame_element.idl | 2 +- + .../core/html/html_frame_set_element.idl | 2 +- .../renderer/core/html/html_iframe_element.cc | 2 +- + .../core/html/html_iframe_element.idl | 2 +- + .../renderer/core/html/html_image_element.idl | 2 +- + .../renderer/core/html/html_link_element.cc | 4 +- + .../renderer/core/html/html_link_element.idl | 2 +- + .../renderer/core/html/html_map_element.idl | 2 +- + .../core/html/html_object_element.idl | 2 +- + .../renderer/core/html/html_pre_element.idl | 2 +- + .../renderer/core/html/html_style_element.idl | 2 +- + .../core/html/html_table_caption_element.idl | 2 +- + .../core/html/html_table_cell_element.idl | 2 +- + .../core/html/html_table_col_element.idl | 2 +- + .../renderer/core/html/html_table_element.idl | 2 +- + .../core/html/html_table_row_element.idl | 2 +- + .../core/html/html_table_section_element.idl | 2 +- .../core/html/media/autoplay_policy.cc | 4 +- .../core/html/media/html_media_element.cc | 4 +- + .../core/html/portal/html_portal_element.cc | 4 +- + .../renderer/core/loader/document_loader.cc | 2 +- + .../renderer/core/loader/frame_loader.cc | 4 +- + .../core/loader/mixed_content_checker.cc | 2 +- + .../core/loader/subresource_filter.cc | 2 +- + .../core/page/scrolling/scroll_state.idl | 2 +- + .../core/page/scrolling/scroll_state_init.idl | 2 +- + .../script/document_write_intervention.cc | 6 +- + .../blink/renderer/core/svg/svg_angle.idl | 2 +- + .../renderer/core/svg/svg_animated_number.idl | 2 +- + .../renderer/core/svg/svg_circle_element.idl | 2 +- + .../core/svg/svg_clip_path_element.idl | 2 +- + .../blink/renderer/core/svg/svg_element.idl | 2 +- + .../renderer/core/svg/svg_filter_element.idl | 2 +- + ...g_filter_primitive_standard_attributes.idl | 2 +- + .../renderer/core/svg/svg_fit_to_view_box.idl | 2 +- + .../blink/renderer/core/svg/svg_length.idl | 2 +- + .../renderer/core/svg/svg_length_list.idl | 2 +- + .../blink/renderer/core/svg/svg_matrix.idl | 2 +- + .../blink/renderer/core/svg/svg_number.idl | 2 +- + .../renderer/core/svg/svg_number_list.idl | 2 +- + .../renderer/core/svg/svg_path_element.idl | 2 +- + .../blink/renderer/core/svg/svg_point.idl | 2 +- + .../blink/renderer/core/svg/svg_rect.idl | 2 +- + .../renderer/core/svg/svg_rect_element.idl | 2 +- + .../renderer/core/svg/svg_style_element.idl | 2 +- + .../renderer/core/svg/svg_svg_element.idl | 2 +- + .../blink/renderer/core/svg/svg_tests.idl | 2 +- + .../renderer/core/svg/svg_transform_list.idl | 2 +- + .../renderer/core/svg/svg_uri_reference.idl | 2 +- + .../renderer/core/svg/svg_zoom_and_pan.idl | 2 +- + .../renderer/core/testing/data/hit_test.html | 2 +- + .../renderer/core/timing/memory_info.idl | 2 +- + .../renderer/core/timing/performance.idl | 2 +- + .../renderer/core/xml/xpath_expression.idl | 2 +- + .../renderer/core/xml/xpath_ns_resolver.idl | 2 +- + .../renderer/core/xml/xslt_processor.idl | 2 +- + .../core/xmlhttprequest/xml_http_request.cc | 2 +- .../modules/bluetooth/bluetooth_error.cc | 16 +- .../modules/clipboard/clipboard_promise.cc | 2 +- + .../credentials_container.cc | 4 +- .../encryptedmedia/encrypted_media_utils.h | 2 +- + .../modules/gamepad/gamepad_axis_event.idl | 2 +- + .../gamepad/gamepad_axis_event_init.idl | 2 +- + .../modules/gamepad/gamepad_button_event.idl | 2 +- + .../gamepad/gamepad_button_event_init.idl | 2 +- + .../gamepad/gamepad_effect_parameters.idl | 2 +- .../modules/geolocation/geolocation.cc | 2 +- - .../modules/indexeddb/indexed_db_names.json5 | 2 +- + .../play_app_url_manifest.json | 2 +- + .../payments/android_pay_method_data.idl | 2 +- + .../modules/payments/payment_request.cc | 6 +- + .../modules/payments/skip_to_gpay_utils.cc | 6 +- + .../peerconnection/rtc_peer_connection.idl | 2 +- + .../renderer/modules/scheduler/scheduler.idl | 2 +- + .../scheduler/scheduler_post_task_options.idl | 2 +- + .../modules/scheduler/task_controller.idl | 2 +- + .../modules/scheduler/task_signal.idl | 2 +- + .../modules/scheduler/window_scheduler.idl | 2 +- + .../modules/vibration/navigator_vibration.idl | 2 +- + .../modules/vibration/vibration_controller.cc | 4 +- .../modules/webaudio/audio_context.cc | 4 +- + .../modules/webcodecs/video_color_space.idl | 2 +- .../modules/webmidi/navigator_web_midi.cc | 2 +- - .../platform/runtime_enabled_features.json5 | 2 +- + .../blink/renderer/platform/PRESUBMIT.py | 2 +- + .../platform/fonts/mac/font_cache_mac.mm | 4 +- + .../platform/loader/fetch/resource_error.cc | 2 +- + .../loader/fetch/resource_load_scheduler.cc | 2 +- + .../main_thread/page_scheduler_impl.cc | 2 +- .../platform/weborigin/security_origin.cc | 2 +- third_party/blink/tools/blinkpy/PRESUBMIT.py | 2 +- .../blink/tools/blinkpy/common/net/git_cl.py | 6 +- - .../blinkpy/common/net/results_fetcher.py | 4 +- + .../blinkpy/common/net/results_fetcher.py | 8 +- .../blink/tools/blinkpy/common/pretty_diff.py | 2 +- .../tools/blinkpy/common/system/filesystem.py | 2 +- .../tools/blinkpy/common/system/profiler.py | 2 +- .../blink/tools/blinkpy/style/filter.py | 2 +- + .../third_party/wpt/wpt/tools/lint/rules.py | 4 +- + .../tools/third_party/pywebsocket3/setup.py | 4 +- .../wpt/tools/webdriver/webdriver/client.py | 2 +- .../third_party/wpt/wpt/tools/wpt/android.py | 2 +- .../third_party/wpt/wpt/tools/wpt/browser.py | 28 +- .../third_party/wpt/wpt/tools/wpt/run.py | 4 +- + .../wpt/wpt/tools/wptrunner/requirements.txt | 2 +- + .../wpt/wpt/tools/wptrunner/setup.py | 2 +- + .../wptrunner/executors/executormarionette.py | 14 +- + .../wptrunner/formatters/chromium.py | 2 +- + .../blinkpy/tool/commands/flaky_tests.py | 6 +- .../tools/blinkpy/w3c/chromium_commit.py | 2 +- .../tools/blinkpy/w3c/chromium_commit_mock.py | 2 +- third_party/blink/tools/blinkpy/w3c/common.py | 4 +- + .../blinkpy/w3c/directory_owners_extractor.py | 2 +- .../tools/blinkpy/w3c/export_notifier.py | 4 +- third_party/blink/tools/blinkpy/w3c/gerrit.py | 6 +- .../tools/blinkpy/w3c/import_notifier.py | 4 +- @@ -1290,37 +1212,250 @@ Subject: Automated domain substitution .../blink/tools/blinkpy/w3c/test_importer.py | 12 +- third_party/blink/tools/move_blink_source.py | 2 +- .../print_stale_test_expectations_entries.py | 2 +- + third_party/boringssl/roll_boringssl.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- .../externs/chrome_extensions.js | 6 +- - .../util/misc/capture_context_win.asm | 4 +- - .../util/misc/capture_context_win_arm64.asm | 2 +- - third_party/google-truth/cipd.yaml | 2 +- - third_party/libxml/src/aclocal.m4 | 2 +- - third_party/mozilla/NSURL+Utils.m | 2 +- - third_party/mozilla/NSWorkspace+Utils.m | 4 +- - third_party/protobuf/configure.ac | 2 +- - .../protobuf/conformance/conformance_objc.m | 2 +- - .../protobuf/conformance/conformance_ruby.rb | 2 +- - .../protobuf/m4/ax_cxx_compile_stdcxx.m4 | 4 +- - third_party/protobuf/objectivec/GPBArray.m | 2 +- - .../protobuf/objectivec/GPBCodedInputStream.m | 4 +- - .../objectivec/GPBCodedOutputStream.m | 2 +- - .../protobuf/objectivec/GPBDescriptor.m | 2 +- - .../protobuf/objectivec/GPBDictionary.m | 2 +- - .../objectivec/GPBExtensionInternals.m | 2 +- - .../objectivec/GPBExtensionRegistry.m | 2 +- - third_party/protobuf/objectivec/GPBMessage.m | 2 +- - .../protobuf/objectivec/GPBProtocolBuffers.m | 2 +- - .../protobuf/objectivec/GPBRootObject.m | 2 +- - .../protobuf/objectivec/GPBUnknownField.m | 2 +- - .../protobuf/objectivec/GPBUnknownFieldSet.m | 2 +- - .../protobuf/objectivec/GPBUtilities.m | 2 +- - .../protobuf/objectivec/GPBWellKnownTypes.m | 4 +- - .../protobuf/objectivec/GPBWireFormat.m | 2 +- - .../protobuf/ruby/lib/google/protobuf.rb | 2 +- - .../ruby/lib/google/protobuf/message_exts.rb | 2 +- - .../lib/google/protobuf/repeated_field.rb | 2 +- - .../lib/google/protobuf/well_known_types.rb | 6 +- - third_party/tcmalloc/vendor/configure.ac | 4 +- + .../externs/command_line_private.js | 4 +- + .../crashpad/build/install_linux_sysroot.py | 2 +- + third_party/crashpad/crashpad/package.h | 4 +- + third_party/crashpad/update.py | 2 +- + third_party/dav1d/generate_source.py | 2 +- + .../protoc_plugins/util/plugin_protos.py | 4 +- + .../closure/bin/build/closurebuilder.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/depswriter.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- + .../closure/css/inlay/g-base.css | 4 +- + .../closure/css/inlay/g-fixed.css | 4 +- + .../closure/css/inlay/g-ratio.css | 4 +- + .../closure/goog/css/bubble.css | 18 +- + .../closure/goog/css/charpicker.css | 4 +- + .../closure/goog/css/checkbox.css | 6 +- + .../closure/goog/css/colorpalette.css | 2 +- + .../goog/css/colorpicker-simplegrid.css | 2 +- + .../closure/goog/css/combobox.css | 2 +- + .../closure/goog/css/css3button.css | 4 +- + .../closure/goog/css/css3menubutton.css | 2 +- + .../closure/goog/css/custombutton.css | 2 +- + .../closure/goog/css/dialog.css | 2 +- + .../closure/goog/css/dimensionpicker.css | 4 +- + .../closure/goog/css/dragdropdetector.css | 4 +- + .../closure/goog/css/editor/bubble.css | 2 +- + .../goog/css/editor/equationeditor.css | 6 +- + .../closure/goog/css/editortoolbar.css | 2 +- + .../closure/goog/css/filteredmenu.css | 2 +- + .../goog/css/filterobservingmenuitem.css | 2 +- + .../closure/goog/css/flatmenubutton.css | 2 +- + .../closure/goog/css/hovercard.css | 2 +- + .../closure/goog/css/hsvapalette.css | 8 +- + .../closure/goog/css/hsvpalette.css | 8 +- + .../closure/goog/css/imagelessmenubutton.css | 2 +- + .../closure/goog/css/inputdatepicker.css | 2 +- + .../closure/goog/css/menubutton.css | 4 +- + .../closure/goog/css/menuitem.css | 2 +- + .../closure/goog/css/multitestrunner.css | 2 +- + .../closure/goog/css/roundedtab.css | 2 +- + .../closure/goog/css/tablesorter.css | 2 +- + .../closure/goog/css/toolbar.css | 4 +- + .../closure/goog/css/tree.css | 10 +- + .../closure/goog/css/tristatemenuitem.css | 6 +- + .../goog/demos/autocompleterichremotedata.js | 16 +- + .../closure/goog/demos/css/demo.css | 2 +- + .../closure/goog/demos/css/emojipicker.css | 2 +- + .../closure/goog/demos/dialog.html | 4 +- + .../demos/graphics/advancedcoordinates.html | 2 +- + .../demos/graphics/advancedcoordinates2.html | 2 +- + .../goog/demos/graphics/basicelements.html | 4 +- + .../closure/goog/demos/history1.html | 2 +- + .../closure/goog/demos/history2.html | 2 +- + .../closure/goog/demos/history3.html | 2 +- + .../closure/goog/demos/hovercard.html | 18 +- + .../closure/goog/demos/splitpane.html | 2 +- + .../closure/goog/dom/controlrange_test.html | 4 +- + .../goog/dom/controlrange_test_dom.html | 4 +- + .../closure/goog/dom/range_test.html | 2 +- + .../closure/goog/dom/range_test_dom.html | 2 +- + .../closure/goog/dom/textrange_test.html | 8 +- + .../closure/goog/dom/textrange_test_dom.html | 8 +- + .../goog/editor/clicktoeditwrapper_test.html | 2 +- + .../editor/clicktoeditwrapper_test_dom.html | 2 +- + .../plugins/basictextformatter_test.html | 2 +- + .../plugins/basictextformatter_test_dom.html | 2 +- + .../goog/editor/plugins/linkbubble_test.html | 2 +- + .../editor/plugins/linkbubble_test_dom.html | 2 +- + .../plugins/linkshortcutplugin_test.html | 2 +- + .../plugins/linkshortcutplugin_test_dom.html | 2 +- + .../closure/goog/html/safeurl_test_vectors.js | 8 +- + .../goog/html/sanitizer/html_test_vectors.js | 2 +- + .../goog/labs/net/webchannel/netutils.js | 2 +- + .../labs/net/webchannel/webchannelbase.js | 4 +- + .../closure/goog/net/browserchannel.js | 4 +- + .../closure/goog/net/iframeio_test.html | 2 +- + .../closure/goog/net/iframeio_test_dom.html | 2 +- + .../closure/goog/net/networktester.js | 2 +- + .../closure/goog/net/tmpnetwork.js | 2 +- + .../closure/goog/soy/soy_testhelper.js | 4 +- + .../closure/goog/testing/performancetable.css | 4 +- + .../closure/goog/transpile.js | 158 +-- + .../closure/goog/ui/editor/linkdialog.js | 2 +- + .../closure/goog/ui/editor/messages.js | 2 +- + .../closure/goog/ui/hovercard_test.html | 6 +- + .../closure/goog/ui/hovercard_test_dom.html | 6 +- + .../goog/ui/keyboardshortcuthandler_test.html | 4 +- + .../ui/keyboardshortcuthandler_test_dom.html | 4 +- + .../closure/goog/ui/media/googlevideo.js | 6 +- + .../closure/goog/ui/media/mp3.js | 2 +- + .../closure/goog/ui/media/picasa.js | 8 +- + .../closure/goog/ui/media/youtube.js | 6 +- + .../goog/ui/menubutton_test_frame.html | 2 +- + .../closure/goog/ui/serverchart.js | 6 +- + .../closure/goog/window/window_test.html | 14 +- + .../closure/goog/window/window_test_dom.html | 14 +- + .../doc/_layouts/article.html | 2 +- + .../google-closure-library/doc/js/article.js | 2 +- + .../cloudstorage/cloudstorage_api.py | 2 +- + .../cloudstorage/errors.py | 2 +- + .../cloudstorage/storage_api.py | 10 +- + .../src/chrome/os/inputview/adapter.js | 4 +- + .../closure/bin/build/closurebuilder.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/depswriter.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- + .../closure_library/closure/bin/scopify.py | 2 +- + .../hunspell/src/hunspell/affentry.cxx | 2 +- + .../hunspell/src/hunspell/affentry.hxx | 2 +- + .../hunspell/src/hunspell/affixmgr.cxx | 2 +- + .../hunspell/src/hunspell/affixmgr.hxx | 2 +- + third_party/hunspell/src/hunspell/atypes.hxx | 2 +- + .../hunspell/src/hunspell/baseaffix.hxx | 2 +- + third_party/hunspell/src/hunspell/csutil.cxx | 2 +- + third_party/hunspell/src/hunspell/csutil.hxx | 2 +- + third_party/hunspell/src/hunspell/filemgr.cxx | 2 +- + third_party/hunspell/src/hunspell/filemgr.hxx | 2 +- + third_party/hunspell/src/hunspell/hashmgr.cxx | 2 +- + third_party/hunspell/src/hunspell/hashmgr.hxx | 2 +- + third_party/hunspell/src/hunspell/htypes.hxx | 2 +- + .../hunspell/src/hunspell/hunspell.cxx | 2 +- + .../hunspell/src/hunspell/hunspell.hxx | 2 +- + third_party/hunspell/src/hunspell/hunzip.cxx | 2 +- + third_party/hunspell/src/hunspell/hunzip.hxx | 2 +- + third_party/hunspell/src/hunspell/langnum.hxx | 2 +- + third_party/hunspell/src/hunspell/replist.cxx | 2 +- + third_party/hunspell/src/hunspell/replist.hxx | 2 +- + .../hunspell/src/hunspell/suggestmgr.cxx | 2 +- + .../hunspell/src/hunspell/suggestmgr.hxx | 2 +- + third_party/hunspell/src/hunspell/w_char.hxx | 2 +- + .../hunspell/src/parsers/firstparser.cxx | 2 +- + .../hunspell/src/parsers/firstparser.hxx | 2 +- + .../hunspell/src/parsers/htmlparser.cxx | 2 +- + .../hunspell/src/parsers/htmlparser.hxx | 2 +- + .../hunspell/src/parsers/latexparser.cxx | 2 +- + .../hunspell/src/parsers/latexparser.hxx | 2 +- + .../hunspell/src/parsers/manparser.cxx | 2 +- + .../hunspell/src/parsers/manparser.hxx | 2 +- + .../hunspell/src/parsers/odfparser.cxx | 2 +- + .../hunspell/src/parsers/odfparser.hxx | 2 +- + .../hunspell/src/parsers/testparser.cxx | 2 +- + .../hunspell/src/parsers/textparser.cxx | 2 +- + .../hunspell/src/parsers/textparser.hxx | 2 +- + .../hunspell/src/parsers/xmlparser.cxx | 2 +- + .../hunspell/src/parsers/xmlparser.hxx | 2 +- + .../src/be/hyph-be.lic.txt | 6 +- + .../src/hu/hyph-hu.lic.txt | 4 +- + .../src/hy/hyph-hy.lic.txt | 2 +- + third_party/iaccessible2/ia2_api_all.idl | 8 +- + third_party/inspector_protocol/roll.py | 4 +- + .../scripts/unpack_binaries.py | 2 +- + third_party/isimpledom/ISimpleDOMDocument.idl | 4 +- + third_party/isimpledom/ISimpleDOMNode.idl | 4 +- + third_party/isimpledom/ISimpleDOMText.idl | 2 +- + third_party/jstemplate/compile.py | 2 +- + .../jstemplate/jstemplate_example.html | 2 +- + third_party/jstemplate/jstemplate_jsunit.html | 10 +- + third_party/libaddressinput/BUILD.gn | 2 +- + .../chromium/tools/require_fields.py | 2 +- + third_party/libjingle_xmpp/xmpp/constants.cc | 24 +- + .../libpng/contrib/oss-fuzz/README.txt | 2 +- + .../libusb/src/libusb/os/windows_usb.c | 4 +- + third_party/libxslt/chromium/roll.py | 2 +- + third_party/metrics_proto/PRESUBMIT.py | 2 +- + third_party/mozilla/NSPasteboard+Utils.mm | 2 +- + third_party/mozilla/NSString+Utils.mm | 2 +- + third_party/opus/src/doc/opus_in_isobmff.html | 2 +- + third_party/opus/src/doc/release.txt | 6 +- + third_party/polymer/v1_0/PRESUBMIT.py | 2 +- + .../iron-flex-layout/iron-flex-layout.html | 2 +- + .../iron-icon/iron-icon.html | 2 +- + .../iron-location/iron-location-extracted.js | 2 +- + .../neon-animation/neon-animated-pages.html | 2 +- + .../paper-progress/paper-progress.html | 2 +- + .../paper-ripple/paper-ripple.html | 2 +- + .../paper-spinner/paper-spinner-lite.html | 2 +- + .../paper-tooltip/paper-tooltip.html | 2 +- + third_party/protobuf/CHANGES.txt | 12 +- + third_party/protobuf/CONTRIBUTORS.txt | 68 +- + third_party/protobuf/cmake/CMakeLists.txt | 2 +- + third_party/protobuf/composer.json | 2 +- + .../binary_json_conformance_suite.cc | 46 +- + .../protobuf/conformance/conformance_cpp.cc | 2 +- + .../text_format_conformance_suite.cc | 6 +- + .../Tests/GPBObjectiveCPlusPlusTest.mm | 2 +- + third_party/protobuf/php/composer.json | 2 +- + .../php/ext/google/protobuf/convert.c | 2 +- + .../protobuf/python/.repo-metadata.json | 4 +- + .../protobuf/python/docs/generate_docs.py | 2 +- + .../python/google/protobuf/descriptor.py | 2 +- + .../google/protobuf/descriptor_database.py | 2 +- + .../python/google/protobuf/descriptor_pool.py | 2 +- + .../protobuf/internal/_parameterized.py | 2 +- + .../google/protobuf/internal/containers.py | 2 +- + .../google/protobuf/internal/decoder.py | 2 +- + .../google/protobuf/internal/encoder.py | 2 +- + .../protobuf/internal/enum_type_wrapper.py | 2 +- + .../protobuf/internal/message_listener.py | 2 +- + .../protobuf/internal/python_message.py | 2 +- + .../google/protobuf/internal/test_util.py | 2 +- + .../google/protobuf/internal/type_checkers.py | 2 +- + .../protobuf/internal/well_known_types.py | 4 +- + .../google/protobuf/internal/wire_format.py | 2 +- + .../python/google/protobuf/json_format.py | 2 +- + .../python/google/protobuf/message.py | 2 +- + .../python/google/protobuf/message_factory.py | 2 +- + .../google/protobuf/pyext/cpp_message.py | 2 +- + .../python/google/protobuf/reflection.py | 2 +- + .../python/google/protobuf/service.py | 2 +- + .../google/protobuf/service_reflection.py | 2 +- + .../python/google/protobuf/text_format.py | 2 +- + .../generate_py_protobufs.py | 2 +- + .../python/protobuf_distutils/setup.py | 6 +- + third_party/protobuf/python/setup.py | 6 +- + .../ext/google/protobuf_c/encode_decode.c | 2 +- + .../protobuf/ruby/ext/google/protobuf_c/upb.c | 2 +- + .../protobuf/src/google/protobuf/any_lite.cc | 4 +- + .../protobuf/compiler/java/java_message.cc | 2 +- + .../compiler/js/well_known_types_embed.cc | 2 +- + .../src/google/protobuf/compiler/parser.cc | 8 +- + .../google/protobuf/util/internal/constants.h | 6 +- + .../util/internal/protostream_objectwriter.cc | 44 +- + .../src/google/protobuf/util/json_util.cc | 2 +- + third_party/protobuf/update_version.py | 4 +- + .../pycoverage/coverage/htmlfiles/pyfile.html | 2 +- + .../src/benchmarks/chromium.linux.json | 152 +-- + third_party/pyjson5/src/setup.py | 2 +- + .../tcmalloc/chromium/src/config_linux.h | 2 +- + .../tcmalloc/chromium/src/debugallocation.cc | 2 +- + .../chromium/src/windows/addr2line-pdb.c | 2 +- + .../tcmalloc/chromium/src/windows/config.h | 2 +- + .../tcmalloc/chromium/src/windows/nm-pdb.c | 2 +- + .../tcmalloc/vendor/README_windows.txt | 8 +- + .../tcmalloc/vendor/src/debugallocation.cc | 2 +- + .../vendor/src/windows/addr2line-pdb.c | 2 +- + .../tcmalloc/vendor/src/windows/config.h | 2 +- + .../tcmalloc/vendor/src/windows/nm-pdb.c | 2 +- tools/accessibility/nvda/README.txt | 2 +- tools/android/checkxmlstyle/PRESUBMIT.py | 2 +- tools/android/checkxmlstyle/checkxmlstyle.py | 6 +- @@ -1333,25 +1468,24 @@ Subject: Automated domain substitution .../dependency_analysis/js/src/load_graph.js | 2 +- .../js/src/package_view.html | 2 +- .../dependency_analysis/upload_html_viewer.py | 2 +- - .../plugin/NoAndroidAsyncTaskCheck.java | 2 +- - .../NoContextGetApplicationContext.java | 2 +- - .../plugin/NoRedundantFieldInitCheck.java | 2 +- tools/android/native_lib_memory/PRESUBMIT.py | 2 +- tools/android/sdk_updater/update_sdk.py | 2 +- tools/binary_size/PRESUBMIT.py | 2 +- tools/binary_size/diagnose_bloat.py | 4 +- - tools/binary_size/libsupersize/console.py | 4 +- + tools/binary_size/libsupersize/console.py | 2 +- + tools/binary_size/libsupersize/html_report.py | 2 +- .../libsupersize/static/auth-consts.js | 8 +- .../libsupersize/static/index.html | 2 +- .../binary_size/libsupersize/static/index.js | 2 +- .../libsupersize/static/tree-worker-wasm.js | 4 +- - .../libsupersize/static/viewer.html | 6 +- + .../libsupersize/static/viewer.html | 8 +- .../libsupersize/upload_html_viewer.py | 2 +- tools/binary_size/libsupersize/zip_util.py | 2 +- .../binary_size/trybot_commit_size_checker.py | 2 +- tools/bisect-builds.py | 28 +- tools/bisect_repackage/bisect_repackage.py | 4 +- .../bisect_repackage_utils.py | 4 +- + tools/boilerplate.py | 2 +- tools/check_git_config.py | 24 +- tools/checklicenses/checklicenses.py | 2 +- tools/checkperms/PRESUBMIT.py | 2 +- @@ -1371,7 +1505,6 @@ Subject: Automated domain substitution .../cygprofile/orderfile_generator_backend.py | 4 +- tools/download_optimization_profile.py | 2 +- .../dromaeo_benchmark_runner.py | 10 +- - tools/emacs/gn.el | 6 +- tools/emacs/trybot-mac.txt | 232 ++-- tools/find_runtime_symbols/PRESUBMIT.py | 2 +- tools/flags/list_flags.py | 4 +- @@ -1397,7 +1530,7 @@ Subject: Automated domain substitution tools/json_to_struct/PRESUBMIT.py | 2 +- tools/licenses.py | 38 +- tools/linux/PRESUBMIT.py | 2 +- - tools/mb/mb.py | 6 +- + tools/mb/mb.py | 4 +- tools/mb/mb_config.pyl | 6 +- tools/md_browser/base.css | 4 +- tools/md_browser/footer.html | 2 +- @@ -1423,133 +1556,11 @@ Subject: Automated domain substitution tools/metrics/ukm/xml_validations.py | 4 +- tools/nocompile_driver.py | 2 +- tools/omahaproxy.py | 2 +- - tools/perf/PRESUBMIT.py | 2 +- - tools/perf/benchmarks/blink_perf.py | 36 +- - tools/perf/benchmarks/dromaeo.py | 6 +- - tools/perf/benchmarks/dummy_benchmark.py | 6 +- - tools/perf/benchmarks/jetstream.py | 2 +- - tools/perf/benchmarks/jetstream2.py | 2 +- - tools/perf/benchmarks/kraken.py | 4 +- - tools/perf/benchmarks/loading.py | 4 +- - tools/perf/benchmarks/media.py | 8 +- - tools/perf/benchmarks/memory.py | 2 +- - tools/perf/benchmarks/octane.py | 2 +- - tools/perf/benchmarks/power.py | 2 +- - .../benchmarks/rasterize_and_record_micro.py | 8 +- - tools/perf/benchmarks/rendering.py | 8 +- - tools/perf/benchmarks/speedometer.py | 4 +- - tools/perf/benchmarks/speedometer2.py | 4 +- - tools/perf/benchmarks/startup_mobile.py | 2 +- - tools/perf/benchmarks/system_health.py | 26 +- - tools/perf/benchmarks/tab_search.py | 2 +- - tools/perf/benchmarks/tab_switching.py | 2 +- - tools/perf/benchmarks/tracing.py | 2 +- - tools/perf/benchmarks/v8.py | 2 +- - tools/perf/benchmarks/v8_browsing.py | 8 +- - tools/perf/benchmarks/webrtc.py | 6 +- - tools/perf/cli_tools/flakiness_cli/api.py | 2 +- - .../perf/cli_tools/pinboard/job_configs.json | 8 +- - tools/perf/cli_tools/pinpoint_traces.py | 4 +- - tools/perf/cli_tools/update_wpr/update_wpr.py | 2 +- - .../validate_tbmv3_metric.py | 4 +- - .../blink_layoutng_perf.py | 6 +- - .../blink_layoutng_perf/loading_layout_ng.py | 4 +- - .../cluster_telemetry/ad_tagging_ct.py | 2 +- - .../cluster_telemetry/ct_benchmarks_util.py | 2 +- - .../cluster_telemetry/generic_trace.py | 4 +- - .../cluster_telemetry/skpicture_printer.py | 2 +- - .../download_mobile/download_mobile.py | 6 +- - tools/perf/contrib/download_mobile/page.html | 4 +- - .../leak_detection/data/leak_detection.json | 20 +- - .../contrib/leak_detection/leak_detection.py | 2 +- - .../perf/contrib/leak_detection/page_sets.py | 18 +- - .../media_router_benchmarks.py | 4 +- - .../test_site/basic_test.html | 2 +- - .../contrib/memory_extras/memory_extras.py | 6 +- - tools/perf/contrib/orderfile/orderfile.py | 16 +- - .../perf/contrib/power_mobile/power_mobile.py | 4 +- - .../privacy_budget_perf.py | 2 +- - .../system_health_infinite_scroll.py | 2 +- - .../contrib/vr_benchmarks/vr_benchmarks.py | 2 +- - tools/perf/core/bot_platforms.py | 2 +- - tools/perf/core/perf_benchmark.py | 2 +- - tools/perf/core/perf_data_generator.py | 32 +- - tools/perf/core/results_dashboard.py | 12 +- - tools/perf/core/results_merger.py | 2 +- - .../formatters/json3_output.py | 2 +- - tools/perf/core/retrieve_story_timing.py | 2 +- - .../perf/core/services/buildbucket_service.py | 2 +- - tools/perf/core/services/dashboard_service.py | 4 +- - tools/perf/core/services/isolate_service.py | 2 +- - tools/perf/core/services/pinpoint_service.py | 2 +- - .../android-pixel2-perf_timing.json | 8 +- - .../android-pixel2_webview-perf_timing.json | 8 +- - .../android_nexus5x_webview_perf_timing.json | 8 +- - .../timing_data/linux-perf_timing.json | 8 +- - .../mac-10_12_laptop_low_end-perf_timing.json | 8 +- - ...mac-10_13_laptop_high_end-perf_timing.json | 8 +- - .../timing_data/win-10-perf_timing.json | 8 +- - .../win-10_laptop_low_end-perf_timing.json | 38 +- - .../core/test_data/benchmarks_to_shard.json | 44 +- - .../perf/core/test_data/test_timing_data.json | 52 +- - .../test_data/test_timing_data_1_build.json | 22 +- - tools/perf/examples/pinpoint_cli/try_job.json | 2 +- - .../adjust_upper_limits.py | 4 +- - .../generate_legacy_perf_dashboard_json.py | 2 +- - tools/perf/generate_perf_sharding.py | 2 +- - tools/perf/page_sets/alexa1-10000-urls.json | 124 +- - tools/perf/page_sets/cros_ui_cases.py | 2 +- - tools/perf/page_sets/data/intl_ar_fa_he.json | 4 +- - tools/perf/page_sets/data/intl_ja_zh.json | 4 +- - tools/perf/page_sets/data/kraken.json | 2 +- - .../data/long_running_idle_gmail_page.json | 2 +- - tools/perf/page_sets/data/top_10.json | 10 +- - tools/perf/page_sets/data/top_25.json | 18 +- - tools/perf/page_sets/data/v8_top_25.json | 30 +- - tools/perf/page_sets/desktop_power.py | 2 +- - tools/perf/page_sets/google_pages.py | 4 +- - tools/perf/page_sets/intl_ar_fa_he.py | 2 +- - tools/perf/page_sets/intl_ja_zh.py | 2 +- - .../perf/page_sets/key_mobile_sites_smooth.py | 8 +- - .../page_sets/key_silk_cases/font_wipe.html | 2 +- - .../page_sets/key_silk_cases/inbox_app.html | 2 +- - tools/perf/page_sets/kraken_pages.py | 2 +- - tools/perf/page_sets/loading_mobile.py | 12 +- - .../page_sets/login_helpers/chrome_login.py | 2 +- - .../page_sets/login_helpers/facebook_login.py | 6 +- - .../page_sets/login_helpers/google_login.py | 4 +- - .../page_sets/login_helpers/linkedin_login.py | 4 +- - .../login_helpers/pinterest_login.py | 2 +- - .../page_sets/maps_perf_test/performance.html | 2 +- - .../perf/page_sets/maps_perf_test/tracked.js | 4 +- - .../rendering/key_desktop_move_cases.py | 2 +- - .../page_sets/rendering/key_silk_cases.py | 12 +- - .../rendering/top_real_world_desktop.py | 16 +- - .../rendering/top_real_world_mobile.py | 10 +- - .../rendering/tough_animation_cases.py | 2 +- - .../page_sets/rendering/tough_canvas_cases.py | 18 +- - .../rendering/tough_filters_cases.py | 2 +- - .../rendering/tough_pinch_zoom_cases.py | 12 +- - .../tough_pinch_zoom_mobile_cases.py | 2 +- - .../system_health/accessibility_stories.py | 6 +- - .../system_health/background_stories.py | 2 +- - .../system_health/browsing_stories.py | 56 +- - .../system_health/loading_stories.py | 30 +- - .../system_health/long_running_stories.py | 4 +- - .../page_sets/system_health/media_stories.py | 4 +- - .../system_health/system_health_stories.py | 2 +- - .../page_sets/tab_search/tab_search_story.py | 10 +- - tools/perf/page_sets/top_10.py | 10 +- - tools/perf/page_sets/top_pages.py | 16 +- - .../mix_blend_mode_propagating_isolation.html | 2 +- - tools/perf/page_sets/v8_top_25.py | 28 +- - .../webrtc_cases/codec_constraints.html | 2 +- - tools/perf/process_perf_results.py | 2 +- tools/polymer/PRESUBMIT.py | 2 +- tools/python/google/gethash_timer.py | 2 +- tools/resources/find_unused_resources.py | 2 +- tools/roll_webgl_conformance.py | 2 +- - tools/run-swarmed.py | 14 +- + tools/run-swarmed.py | 10 +- tools/site_compare/commands/measure.py | 2 +- tools/site_compare/commands/scrape.py | 2 +- .../scrapers/chrome/chromebase.py | 4 +- @@ -1593,6 +1604,8 @@ Subject: Automated domain substitution .../keycodes/keyboard_code_conversion_mac.mm | 2 +- ui/file_manager/audio_player/manifest.json | 2 +- ui/file_manager/base/js/mock_chrome.js | 4 +- + ui/file_manager/base/tools/PRESUBMIT.py | 2 +- + .../js/volume_manager_unittest.m.js | 28 +- .../cws_widget/cws_widget_container.js | 4 +- .../foreground/elements/icons.html | 2 +- .../foreground/js/web_store_utils.js | 4 +- @@ -1617,9 +1630,8 @@ Subject: Automated domain substitution url/third_party/mozilla/LICENSE.txt | 4 +- weblayer/browser/default_search_engine.cc | 2 +- ...weblayer_security_blocking_page_factory.cc | 2 +- - .../weblayer/shell/WebLayerShellActivity.java | 4 +- weblayer/shell/app/shell_main_params.cc | 2 +- - 1616 files changed, 5258 insertions(+), 5258 deletions(-) + 1628 files changed, 4297 insertions(+), 4297 deletions(-) diff --git a/PRESUBMIT.py b/PRESUBMIT.py --- a/PRESUBMIT.py @@ -1633,7 +1645,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py for more details about the presubmit API built into depot_tools. """ PRESUBMIT_VERSION = '2.0.0' -@@ -170,7 +170,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -180,7 +180,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView addTrackingRect:owner:userData:assumeInside:] is' 'prohibited. Please use CrTrackingArea instead.', @@ -1642,7 +1654,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), False, ), -@@ -179,7 +179,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -189,7 +189,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of NSTrackingAreas is prohibited. Please use CrTrackingArea', 'instead.', @@ -1651,7 +1663,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), False, ), -@@ -188,7 +188,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -198,7 +198,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertPointFromBase:] is almost certainly wrong.', 'Please use |convertPoint:(point) fromView:nil| instead.', @@ -1660,7 +1672,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -197,7 +197,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -207,7 +207,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertPointToBase:] is almost certainly wrong.', 'Please use |convertPoint:(point) toView:nil| instead.', @@ -1669,7 +1681,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -206,7 +206,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -216,7 +216,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertRectFromBase:] is almost certainly wrong.', 'Please use |convertRect:(point) fromView:nil| instead.', @@ -1678,7 +1690,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -215,7 +215,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -225,7 +225,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertRectToBase:] is almost certainly wrong.', 'Please use |convertRect:(point) toView:nil| instead.', @@ -1687,7 +1699,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -224,7 +224,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -234,7 +234,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertSizeFromBase:] is almost certainly wrong.', 'Please use |convertSize:(point) fromView:nil| instead.', @@ -1696,7 +1708,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -233,7 +233,7 @@ _BANNED_OBJC_FUNCTIONS = ( +@@ -243,7 +243,7 @@ _BANNED_OBJC_FUNCTIONS = ( ( 'The use of -[NSView convertSizeToBase:] is almost certainly wrong.', 'Please use |convertSize:(point) toView:nil| instead.', @@ -1705,16 +1717,16 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ), True, ), -@@ -556,7 +556,7 @@ _BANNED_CPP_FUNCTIONS = ( +@@ -547,7 +547,7 @@ _BANNED_CPP_FUNCTIONS = ( ( "Don't use CallJavascriptFunctionUnsafe() in new code. Instead, use", 'AllowJavascript(), OnJavascriptAllowed()/OnJavascriptDisallowed(),', - 'and CallJavascriptFunction(). See https://goo.gl/qivavq.', -+ 'and CallJavascriptFunction(). See https://goo.gl.qjz9zk.qjz9zk/qivavq.', ++ 'and CallJavascriptFunction(). See https://goo.gl.qjz9zk/qivavq.', ), False, ( -@@ -1230,7 +1230,7 @@ _DEPRECATED_MOJO_TYPES = ( +@@ -1202,7 +1202,7 @@ _DEPRECATED_MOJO_TYPES = ( _IPC_ENUM_TRAITS_DEPRECATED = ( 'You are using IPC_ENUM_TRAITS() in your code. It has been deprecated.\n' @@ -1723,7 +1735,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'security-tips-for-ipc') _LONG_PATH_ERROR = ( -@@ -1382,7 +1382,7 @@ _KNOWN_ROBOTS = set( +@@ -1355,7 +1355,7 @@ _KNOWN_ROBOTS = set( 'wpt-autoroller', 'chrome-weblayer-builder') ) | set('%s@skia-public.iam.gserviceaccount.com' % s for s in ('chromium-autoroll', 'chromium-release-autoroll') @@ -1732,7 +1744,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py for s in ('chromium-internal-autoroll',)) -@@ -1738,7 +1738,7 @@ def CheckNoDEPSGIT(input_api, output_api): +@@ -1711,7 +1711,7 @@ def CheckNoDEPSGIT(input_api, output_api): 'Never commit changes to .DEPS.git. This file is maintained by an\n' 'automated system based on what\'s in DEPS and your changes will be\n' 'overwritten.\n' @@ -1741,7 +1753,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'get-the-code#Rolling_DEPS\n' 'for more information')] return [] -@@ -1947,7 +1947,7 @@ def CheckNoPragmaOnce(input_api, output_api): +@@ -1922,7 +1922,7 @@ def CheckNoPragmaOnce(input_api, output_api): if files: return [output_api.PresubmitError( 'Do not use #pragma once in header files.\n' @@ -1750,7 +1762,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py files)] return [] -@@ -2132,7 +2132,7 @@ def CheckForVersionControlConflicts(input_api, output_api): +@@ -2107,7 +2107,7 @@ def CheckForVersionControlConflicts(input_api, output_api): def CheckGoogleSupportAnswerUrlOnUpload(input_api, output_api): @@ -1759,7 +1771,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py errors = [] for f in input_api.AffectedFiles(): for line_num, line in f.ChangedContents(): -@@ -2241,7 +2241,7 @@ def CheckNoAbbreviationInPngFileName(input_api, output_api): +@@ -2216,7 +2216,7 @@ def CheckNoAbbreviationInPngFileName(input_api, output_api): results.append(output_api.PresubmitError( 'The name of PNG files should not have abbreviations. \n' 'Use _hover.png, _center.png, instead of _h.png, _c.png.\n' @@ -1768,7 +1780,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -@@ -2978,7 +2978,7 @@ def CheckSecurityOwners(input_api, output_api): +@@ -2965,7 +2965,7 @@ def CheckSecurityOwners(input_api, output_api): if to_check: # If there are any OWNERS files to check, there are IPC-related changes in # this CL. Auto-CC the review list. @@ -1777,7 +1789,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py # Go through the OWNERS files to check, filtering out rules that are already # present in that OWNERS file. -@@ -3276,7 +3276,7 @@ def _CheckAndroidToastUsage(input_api, output_api): +@@ -3263,7 +3263,7 @@ def _CheckAndroidToastUsage(input_api, output_api): 'android.widget.Toast usage is detected. Android toasts use hardware' ' acceleration, and can be\ncostly on low-end devices. Please use' ' org.chromium.ui.widget.Toast instead.\n' @@ -1786,7 +1798,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py errors)) return results -@@ -3410,7 +3410,7 @@ def _CheckAndroidTestJUnitFrameworkImport(input_api, output_api): +@@ -3397,7 +3397,7 @@ def _CheckAndroidTestJUnitFrameworkImport(input_api, output_api): if errors: results.append(output_api.PresubmitError( 'APIs from junit.framework.* are deprecated, please use JUnit4 framework' @@ -1795,7 +1807,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ' if you have any question.', errors)) return results -@@ -3441,7 +3441,7 @@ def _CheckAndroidTestJUnitInheritance(input_api, output_api): +@@ -3428,7 +3428,7 @@ def _CheckAndroidTestJUnitInheritance(input_api, output_api): results.append(output_api.PresubmitPromptWarning( 'The newly created files include Test classes that inherits from base' ' class. Please do not use inheritance in JUnit4 tests or add new' @@ -1804,7 +1816,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py ' questions.', errors)) return results -@@ -3465,7 +3465,7 @@ def _CheckAndroidTestAnnotationUsage(input_api, output_api): +@@ -3452,7 +3452,7 @@ def _CheckAndroidTestAnnotationUsage(input_api, output_api): 'Annotations in android.test.suitebuilder.annotation have been' ' deprecated since API level 24. Please use android.support.test.filters' ' from //third_party/android_support_test_runner:runner_java instead.' @@ -1813,7 +1825,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -@@ -3485,7 +3485,7 @@ def _CheckAndroidNewMdpiAssetLocation(input_api, output_api): +@@ -3472,7 +3472,7 @@ def _CheckAndroidNewMdpiAssetLocation(input_api, output_api): 'MDPI assets should be placed in /res/drawable-mdpi/ or ' '/res/drawable-ldrtl-mdpi/\ninstead of /res/drawable/ and' '/res/drawable-ldrtl/.\n' @@ -1822,7 +1834,16 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -@@ -4193,7 +4193,7 @@ def CheckFuzzTargetsOnUpload(input_api, output_api): +@@ -4007,7 +4007,7 @@ def CheckGnGlobForward(input_api, output_api): + long_text=('The variables "visibilty" and "test_only" should be ' + 'explicitly listed in forward_variables_from(). For more ' + 'details, see:\n' +- 'https://chromium.googlesource.com/chromium/src/+/HEAD/' ++ 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/' + 'build/docs/writing_gn_templates.md' + '#Using-forward_variables_from'))] + return [] +@@ -4210,7 +4210,7 @@ def CheckFuzzTargetsOnUpload(input_api, output_api): 'LLVMFuzzerInitialize should not be used, unless your fuzz target needs ' 'to access command line arguments passed to the fuzzer. Instead, prefer ' 'static initialization and shared resources as documented in ' @@ -1831,7 +1852,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'libfuzzer/efficient_fuzzing.md#simplifying-initialization_cleanup.\n' % ( ', '.join(EXPORTED_SYMBOLS), REQUIRED_HEADER) ) -@@ -4228,7 +4228,7 @@ def _CheckNewImagesWarning(input_api, output_api): +@@ -4245,7 +4245,7 @@ def _CheckNewImagesWarning(input_api, output_api): errors.append(output_api.PresubmitPromptWarning( 'It looks like you are trying to commit some images. If these are ' 'non-test-only images, please make sure to read and apply the tips in ' @@ -1840,7 +1861,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py 'binary_size/optimization_advice.md#optimizing-images\nThis check is ' 'FYI only and will not block your CL on the CQ.', image_paths)) return errors -@@ -4509,7 +4509,7 @@ def CheckForInvalidIfDefinedMacros(input_api, output_api): +@@ -4529,7 +4529,7 @@ def CheckForInvalidIfDefinedMacros(input_api, output_api): def CheckForIPCRules(input_api, output_api): """Check for same IPC rules described in @@ -1849,7 +1870,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py """ base_pattern = r'IPC_ENUM_TRAITS\(' inclusion_pattern = input_api.re.compile(r'(%s)' % base_pattern) -@@ -4753,7 +4753,7 @@ def CheckChangeOnCommit(input_api, output_api): +@@ -4773,7 +4773,7 @@ def CheckChangeOnCommit(input_api, output_api): results.extend(input_api.canned_checks.CheckTreeIsOpen( input_api, output_api, @@ -1858,7 +1879,7 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py results.extend( input_api.canned_checks.CheckPatchFormatted(input_api, output_api)) -@@ -5085,7 +5085,7 @@ def CheckStrings(input_api, output_api): +@@ -5105,7 +5105,7 @@ def CheckStrings(input_api, output_api): if icu_syntax_errors: results.append(output_api.PresubmitPromptWarning( 'ICU syntax errors were found in the following strings (problems or ' @@ -1867,18 +1888,6 @@ diff --git a/PRESUBMIT.py b/PRESUBMIT.py return results -diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/WebViewPackageError.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/WebViewPackageError.java ---- a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/WebViewPackageError.java -+++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/WebViewPackageError.java -@@ -44,7 +44,7 @@ public class WebViewPackageError { - private static final String NO_VALID_WEBVIEW_MESSAGE = - "Cannot find a valid WebView provider installed. " - + "Please install a valid WebView package. Contact " -- + "android-webview-dev@chromium.org for help."; -+ + "android-webview-dev@ch40m1um.qjz9zk for help."; - - /** - * @param context The {@link Activity} where the error is yield. diff --git a/android_webview/tools/cts_config/webview_cts_gcs_path.json b/android_webview/tools/cts_config/webview_cts_gcs_path.json --- a/android_webview/tools/cts_config/webview_cts_gcs_path.json +++ b/android_webview/tools/cts_config/webview_cts_gcs_path.json @@ -2050,22 +2059,10 @@ diff --git a/ash/app_list/PRESUBMIT.py b/ash/app_list/PRESUBMIT.py for more details about the presubmit API built into depot_tools. """ -diff --git a/ash/app_list/views/assistant/assistant_privacy_info_view.cc b/ash/app_list/views/assistant/assistant_privacy_info_view.cc ---- a/ash/app_list/views/assistant/assistant_privacy_info_view.cc -+++ b/ash/app_list/views/assistant/assistant_privacy_info_view.cc -@@ -28,7 +28,7 @@ void AssistantPrivacyInfoView::CloseButtonPressed() { - } - - void AssistantPrivacyInfoView::LinkClicked() { -- constexpr char url[] = "https://support.google.com/chromebook?p=assistant"; -+ constexpr char url[] = "https://support.9oo91e.qjz9zk/chromebook?p=assistant"; - AssistantController::Get()->OpenUrl( - assistant::util::CreateLocalizedGURL(url)); - } diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd -@@ -619,7 +619,7 @@ This file contains the strings for ash. +@@ -620,7 +620,7 @@ This file contains the strings for ash. @@ -2074,7 +2071,7 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd -@@ -972,7 +972,7 @@ This file contains the strings for ash. +@@ -994,7 +994,7 @@ This file contains the strings for ash. Supervised user @@ -2083,7 +2080,16 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd Account managed by $1user@example.com -@@ -2599,7 +2599,7 @@ This file contains the strings for ash. +@@ -1212,7 +1212,7 @@ This file contains the strings for ash. + Tap to configure + + +- Browser tab $11 of $22. $3Google, $4https://google.com ++ Browser tab $11 of $22. $3Google, $4https://9oo91e.qjz9zk + + + Connected devices settings +@@ -2688,7 +2688,7 @@ This file contains the strings for ash. Multiple sign-in has been disabled @@ -2092,7 +2098,7 @@ diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd Sign out -@@ -2922,7 +2922,7 @@ Here are some things you can try to get started. +@@ -3014,7 +3014,7 @@ Here are some things you can try to get started. Unlock device to perform the notification action @@ -2193,18 +2199,6 @@ diff --git a/ash/resources/PRESUBMIT.py b/ash/resources/PRESUBMIT.py for the rules we're checking against here. """ -diff --git a/ash/system/phonehub/ui_constants.h b/ash/system/phonehub/ui_constants.h ---- a/ash/system/phonehub/ui_constants.h -+++ b/ash/system/phonehub/ui_constants.h -@@ -14,7 +14,7 @@ constexpr int kBubbleBottomPaddingDip = 16; - // URLs. - // TODO(meilinw): replace it with the real one. - constexpr char kLearnMoreUrl[] = -- "https://support.google.com/chromebook/?p=multi_device"; -+ "https://support.9oo91e.qjz9zk/chromebook/?p=multi_device"; - - } // namespace ash - diff --git a/base/PRESUBMIT.py b/base/PRESUBMIT.py --- a/base/PRESUBMIT.py +++ b/base/PRESUBMIT.py @@ -2322,7 +2316,7 @@ diff --git a/build/android/PRESUBMIT.py b/build/android/PRESUBMIT.py diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/generate_gradle.py --- a/build/android/gradle/generate_gradle.py +++ b/build/android/gradle/generate_gradle.py -@@ -928,7 +928,7 @@ def main(): +@@ -924,7 +924,7 @@ def main(): logging.warning('Generated files will only appear once you\'ve built them.') logging.warning('Generated projects for Android Studio %s', channel) @@ -2358,7 +2352,7 @@ diff --git a/build/android/gyp/lint.py b/build/android/gyp/lint.py diff --git a/build/android/gyp/proguard.py b/build/android/gyp/proguard.py --- a/build/android/gyp/proguard.py +++ b/build/android/gyp/proguard.py -@@ -320,7 +320,7 @@ def _OptimizeWithR8(options, +@@ -327,7 +327,7 @@ def _OptimizeWithR8(options, fail_on_output=options.warnings_as_errors) except build_utils.CalledProcessError as err: debugging_link = ('\n\nR8 failed. Please see {}.'.format( @@ -2398,7 +2392,7 @@ diff --git a/build/android/gyp/util/protoresources.py b/build/android/gyp/util/p diff --git a/build/android/incremental_install/installer.py b/build/android/incremental_install/installer.py --- a/build/android/incremental_install/installer.py +++ b/build/android/incremental_install/installer.py -@@ -248,7 +248,7 @@ def Install(device, install_json, apk=None, enable_device_cache=False, +@@ -245,7 +245,7 @@ def Install(device, install_json, apk=None, enable_device_cache=False, if apis_allowed.strip() not in '01': msg = """\ Cannot use incremental installs on Android P+ without first enabling access to @@ -2419,18 +2413,6 @@ diff --git a/build/android/pylib/constants/__init__.py b/build/android/pylib/con # TODO(jbudorick): Remove once unused. DEVICE_LOCAL_PROPERTIES_PATH = '/data/local.prop' -diff --git a/build/android/pylib/device/commands/java/src/org/chromium/android/commands/unzip/Unzip.java b/build/android/pylib/device/commands/java/src/org/chromium/android/commands/unzip/Unzip.java ---- a/build/android/pylib/device/commands/java/src/org/chromium/android/commands/unzip/Unzip.java -+++ b/build/android/pylib/device/commands/java/src/org/chromium/android/commands/unzip/Unzip.java -@@ -2,7 +2,7 @@ - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. - --package org.chromium.android.commands.unzip; -+package org.chromium.8n6r01d.qjz9zkmands.unzip; - - import java.io.BufferedInputStream; - import java.io.BufferedOutputStream; diff --git a/build/android/pylib/device_settings.py b/build/android/pylib/device_settings.py --- a/build/android/pylib/device_settings.py +++ b/build/android/pylib/device_settings.py @@ -2596,7 +2578,7 @@ diff --git a/build/android/pylib/utils/simpleperf.py b/build/android/pylib/utils diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py --- a/build/android/resource_sizes.py +++ b/build/android/resource_sizes.py -@@ -109,7 +109,7 @@ def _ReadZipInfoExtraFieldLength(zip_file, zip_info): +@@ -146,7 +146,7 @@ def _ReadZipInfoExtraFieldLength(zip_file, zip_info): def _MeasureApkSignatureBlock(zip_file): """Measures the size of the v2 / v3 signing block. @@ -2632,7 +2614,7 @@ diff --git a/build/android/test_wrapper/logdog_wrapper.py b/build/android/test_w diff --git a/build/apple/tweak_info_plist.py b/build/apple/tweak_info_plist.py --- a/build/apple/tweak_info_plist.py +++ b/build/apple/tweak_info_plist.py -@@ -155,9 +155,9 @@ def _AddBreakpadKeys(plist, branding, platform, staging): +@@ -156,9 +156,9 @@ def _AddBreakpadKeys(plist, branding, platform, staging): plist['BreakpadProduct'] = '%s_%s' % (branding, platform) plist['BreakpadProductDisplay'] = branding if staging: @@ -2644,7 +2626,7 @@ diff --git a/build/apple/tweak_info_plist.py b/build/apple/tweak_info_plist.py # These are both deliberately strings and not boolean. plist['BreakpadSendAndExit'] = 'YES' -@@ -194,7 +194,7 @@ def _AddKeystoneKeys(plist, bundle_identifier, base_tag): +@@ -195,7 +195,7 @@ def _AddKeystoneKeys(plist, bundle_identifier, base_tag): also requires the |bundle_identifier| argument (com.example.product).""" plist['KSVersion'] = plist['CFBundleShortVersionString'] plist['KSProductID'] = bundle_identifier @@ -2668,7 +2650,7 @@ diff --git a/build/chromeos/PRESUBMIT.py b/build/chromeos/PRESUBMIT.py diff --git a/build/chromeos/test_runner.py b/build/chromeos/test_runner.py --- a/build/chromeos/test_runner.py +++ b/build/chromeos/test_runner.py -@@ -840,7 +840,7 @@ def main(): +@@ -876,7 +876,7 @@ def main(): tast_test_parser = subparsers.add_parser( 'tast', help='Runs a device-side set of Tast tests. For more details, see: ' @@ -2680,7 +2662,7 @@ diff --git a/build/chromeos/test_runner.py b/build/chromeos/test_runner.py diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni -@@ -1733,7 +1733,7 @@ if (enable_java_templates) { +@@ -1717,7 +1717,7 @@ if (enable_java_templates) { # * public.txt # * annotations.zip # * assets/ @@ -2689,18 +2671,6 @@ diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni # # Variables: # output: Path to the output .aar. -diff --git a/build/config/chrome_build.gni b/build/config/chrome_build.gni ---- a/build/config/chrome_build.gni -+++ b/build/config/chrome_build.gni -@@ -9,7 +9,7 @@ declare_args() { - is_chrome_branded = false - - # Turn this on to generate order files. See -- # https://chromium.googlesource.com/chromium/src/+/master/docs/win_order_files.md -+ # https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/win_order_files.md - generate_order_files = false - } - diff --git a/build/config/chromeos/args.gni b/build/config/chromeos/args.gni --- a/build/config/chromeos/args.gni +++ b/build/config/chromeos/args.gni @@ -2717,7 +2687,7 @@ diff --git a/build/config/chromeos/args.gni b/build/config/chromeos/args.gni diff --git a/build/config/chromeos/rules.gni b/build/config/chromeos/rules.gni --- a/build/config/chromeos/rules.gni +++ b/build/config/chromeos/rules.gni -@@ -233,7 +233,7 @@ template("tast_test") { +@@ -234,7 +234,7 @@ template("tast_test") { if (!defined(tast_attr_expr) && !defined(tast_tests)) { # The following expression filters out all non-critical tests. See the link # below for more details: @@ -2729,7 +2699,7 @@ diff --git a/build/config/chromeos/rules.gni b/build/config/chromeos/rules.gni diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni --- a/build/config/compiler/compiler.gni +++ b/build/config/compiler/compiler.gni -@@ -103,7 +103,7 @@ declare_args() { +@@ -105,7 +105,7 @@ declare_args() { # and hardware supports the feature and it's enabled by OS then additional # additional validation of return address will be performed as mitigation # against Return-oriented programming (ROP). @@ -2738,7 +2708,7 @@ diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler enable_cet_shadow_stack = false } -@@ -209,7 +209,7 @@ declare_args() { +@@ -215,7 +215,7 @@ declare_args() { # results independent of the checkout and build directory names, which # in turn is important for goma compile hit rate. # Setting this to true may make it harder to debug binaries on Linux, see @@ -2762,7 +2732,7 @@ diff --git a/build/config/nacl/rules.gni b/build/config/nacl/rules.gni diff --git a/build/config/sanitizers/sanitizers.gni b/build/config/sanitizers/sanitizers.gni --- a/build/config/sanitizers/sanitizers.gni +++ b/build/config/sanitizers/sanitizers.gni -@@ -73,7 +73,7 @@ declare_args() { +@@ -79,7 +79,7 @@ declare_args() { use_cfi_recover = false # Compile for fuzzing with LLVM LibFuzzer. @@ -2783,18 +2753,18 @@ diff --git a/build/config/win/control_flow_guard.gni b/build/config/win/control_ # /DYNAMICBASE (ASLR) is turned off in debug builds, therefore CFG can't be # turned on either. # ASan and CFG leads to slow process startup. Chromium's test runner uses -diff --git a/build/find_isolated_tests.py b/build/find_isolated_tests.py ---- a/build/find_isolated_tests.py -+++ b/build/find_isolated_tests.py -@@ -11,7 +11,7 @@ Used to figure out what tests were build in isolated mode to trigger these - tests to run on swarming. +diff --git a/build/fuchsia/binary_sizes.py b/build/fuchsia/binary_sizes.py +--- a/build/fuchsia/binary_sizes.py ++++ b/build/fuchsia/binary_sizes.py +@@ -90,7 +90,7 @@ def CreateTestResults(test_status, timestamp): + """Create test results data to write to JSON test results file. - For more info see: --https://sites.google.com/a/chromium.org/dev/developers/testing/isolated-testing -+https://sites.9oo91e.qjz9zk/a/ch40m1um.qjz9zk/dev/developers/testing/isolated-testing - """ + The JSON data format is defined in +- https://chromium.googlesource.com/chromium/src/+/master/docs/testing/json_test_results_format.md ++ https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/testing/json_test_results_format.md + """ - import glob + results = { diff --git a/build/linux/install-chromeos-fonts.py b/build/linux/install-chromeos-fonts.py --- a/build/linux/install-chromeos-fonts.py +++ b/build/linux/install-chromeos-fonts.py @@ -2843,20 +2813,6 @@ diff --git a/build/nocompile.gni b/build/nocompile.gni # # To use this, create a gyp target with the following form: # -diff --git a/build/run_swarming_xcode_install.py b/build/run_swarming_xcode_install.py ---- a/build/run_swarming_xcode_install.py -+++ b/build/run_swarming_xcode_install.py -@@ -11,8 +11,8 @@ need to upgrade all the swarming testers. It: - - Example usage: - $ ./build/run_swarming_xcode_install.py --luci_path ~/work/luci-py \ -- --swarming-server touch-swarming.appspot.com \ -- --isolate-server touch-isolate.appspot.com -+ --swarming-server touch-swarming.8pp2p8t.qjz9zk \ -+ --isolate-server touch-isolate.8pp2p8t.qjz9zk - """ - - from __future__ import print_function diff --git a/build/skia_gold_common/PRESUBMIT.py b/build/skia_gold_common/PRESUBMIT.py --- a/build/skia_gold_common/PRESUBMIT.py +++ b/build/skia_gold_common/PRESUBMIT.py @@ -2877,7 +2833,7 @@ diff --git a/build/toolchain/cros_toolchain.gni b/build/toolchain/cros_toolchain # # To perform a board-specific build, first obtain the correct system -# root (http://goo.gl/aFB4XH) for the board. Then configure GN to use it -+# root (http://goo.gl.qjz9zk.qjz9zk.qjz9zk/aFB4XH) for the board. Then configure GN to use it ++# root (http://goo.gl.qjz9zk/aFB4XH) for the board. Then configure GN to use it # by setting appropriate cross-compilation variables. # # For example, to compile a Chrome source tree in /g/src for an @@ -2988,18 +2944,6 @@ diff --git a/chrome/PRESUBMIT.py b/chrome/PRESUBMIT.py for more details about the presubmit API built into depot_tools. """ -diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java ---- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java -+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java -@@ -39,7 +39,7 @@ import java.util.Map; - public class AutofillAssistantClient { - /** OAuth2 scope that RPCs require. */ - private static final String AUTH_TOKEN_TYPE = -- "oauth2:https://www.googleapis.com/auth/userinfo.profile"; -+ "oauth2:https://www.9oo91eapis.qjz9zk/auth/userinfo.profile"; - - /** - * Pointer to the corresponding native autofill_assistant::ClientAndroid instance. Might be 0 if diff --git a/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd b/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd --- a/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd +++ b/chrome/android/features/autofill_assistant/java/strings/android_chrome_autofill_assistant_strings.grd @@ -3012,18 +2956,6 @@ diff --git a/chrome/android/features/autofill_assistant/java/strings/android_chr +@@ -323,7 +323,7 @@ If you update this file, be sure also to update google_chrome_strings.grd. --> To send a number from here to your Android phone, sign in to Chromium on both devices. @@ -3282,7 +3103,7 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd Make sure you are signed in to Chromium on your $1Pixel XL and then try sending again. -@@ -567,7 +567,7 @@ Chromium is unable to recover your settings. +@@ -570,7 +570,7 @@ Chromium is unable to recover your settings. @@ -3291,7 +3112,7 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd -@@ -674,10 +674,10 @@ Chromium is unable to recover your settings. +@@ -680,10 +680,10 @@ Chromium is unable to recover your settings. You're signed in to Chromium! @@ -3304,7 +3125,7 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd Someone previously signed in to Chromium on this computer as $1user@example.com. Please create a new Chromium user to keep your information separate. -@@ -710,7 +710,7 @@ Chromium is unable to recover your settings. +@@ -728,7 +728,7 @@ Chromium is unable to recover your settings. @@ -3313,6 +3134,15 @@ diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd +@@ -1112,7 +1112,7 @@ Chromium is unable to recover your settings. + + + +- You can manage this and other Google Accounts you've added for $1John from one place in <a id="osSettingsLink" href="$2https://google.com/">Settings</a>. ++ You can manage this and other Google Accounts you've added for $1John from one place in <a id="osSettingsLink" href="$2https://9oo91e.qjz9zk/">Settings</a>. + Permissions you have granted to websites in the Chromium browser and apps from Google Play may apply to all accounts. + + diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -3337,7 +3167,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources This file -@@ -556,7 +556,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -559,7 +559,7 @@ are declared in tools/grit/grit_rule.gni. Open link as @@ -3346,7 +3176,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Open link in $1Gmail App -@@ -703,7 +703,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -706,7 +706,7 @@ are declared in tools/grit/grit_rule.gni. &Search $1Google for image @@ -3355,7 +3185,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Suggest password... -@@ -778,7 +778,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -781,7 +781,7 @@ are declared in tools/grit/grit_rule.gni. Open Link as @@ -3364,7 +3194,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Open Link in $1Gmail App -@@ -937,7 +937,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -940,7 +940,7 @@ are declared in tools/grit/grit_rule.gni. &Search $1Google for Image @@ -3373,16 +3203,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Suggest Password... -@@ -1153,7 +1153,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -1156,7 +1156,7 @@ are declared in tools/grit/grit_rule.gni. - Move window to $1User name ($2john@google.com) + Move window to $1User name ($2john@9oo91e.qjz9zk) - - -@@ -1266,7 +1266,7 @@ are declared in tools/grit/grit_rule.gni. + + Move window to desk +@@ -1275,7 +1275,7 @@ are declared in tools/grit/grit_rule.gni. Review @@ -3391,7 +3221,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -2613,10 +2613,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -2617,10 +2617,10 @@ are declared in tools/grit/grit_rule.gni. Images were blocked on this page. @@ -3404,7 +3234,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking cookies -@@ -2625,7 +2625,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2629,7 +2629,7 @@ are declared in tools/grit/grit_rule.gni. Continue allowing cookies @@ -3413,7 +3243,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking images -@@ -2637,28 +2637,28 @@ are declared in tools/grit/grit_rule.gni. +@@ -2641,28 +2641,28 @@ are declared in tools/grit/grit_rule.gni. Pop-ups blocked: @@ -3449,7 +3279,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Always block camera and microphone access -@@ -2679,19 +2679,19 @@ are declared in tools/grit/grit_rule.gni. +@@ -2683,19 +2683,19 @@ are declared in tools/grit/grit_rule.gni. Continue blocking camera access @@ -3474,7 +3304,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pop-up blocked -@@ -2706,7 +2706,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2707,7 +2707,7 @@ are declared in tools/grit/grit_rule.gni. JavaScript was blocked on this page. @@ -3483,7 +3313,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking JavaScript -@@ -2724,7 +2724,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2716,7 +2716,7 @@ are declared in tools/grit/grit_rule.gni. Sound was muted on this page @@ -3492,7 +3322,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue muting sound -@@ -2827,7 +2827,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -2819,7 +2819,7 @@ are declared in tools/grit/grit_rule.gni. @@ -3501,7 +3331,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources &General -@@ -3357,13 +3357,13 @@ are declared in tools/grit/grit_rule.gni. +@@ -3349,13 +3349,13 @@ are declared in tools/grit/grit_rule.gni. @@ -3518,7 +3348,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Share this tab instead -@@ -3568,10 +3568,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -3560,10 +3560,10 @@ are declared in tools/grit/grit_rule.gni. Incognito Tab: $1Google @@ -3531,7 +3361,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Plugin: $1Unknown Plugin -@@ -3580,7 +3580,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -3572,7 +3572,7 @@ are declared in tools/grit/grit_rule.gni. Plugin Broker: $1Unknown Plugin @@ -3540,7 +3370,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Spare Renderer -@@ -3616,16 +3616,16 @@ are declared in tools/grit/grit_rule.gni. +@@ -3608,16 +3608,16 @@ are declared in tools/grit/grit_rule.gni. Print: $1Google Maps @@ -3561,7 +3391,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources App: $1com.android.systemui -@@ -3826,13 +3826,13 @@ are declared in tools/grit/grit_rule.gni. +@@ -3818,13 +3818,13 @@ are declared in tools/grit/grit_rule.gni. These items may be dangerous @@ -3577,7 +3407,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources The app "$1Gmail" was automatically removed. -@@ -3844,10 +3844,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -3836,10 +3836,10 @@ are declared in tools/grit/grit_rule.gni. @@ -3590,7 +3420,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources It can: -@@ -3986,22 +3986,22 @@ are declared in tools/grit/grit_rule.gni. +@@ -3978,22 +3978,22 @@ are declared in tools/grit/grit_rule.gni. Change your home page to: $1home.page.com/home.html @@ -3619,7 +3449,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Read and change your data on a number of websites -@@ -4010,10 +4010,10 @@ are declared in tools/grit/grit_rule.gni. +@@ -4002,10 +4002,10 @@ are declared in tools/grit/grit_rule.gni. Read your data on a number of websites @@ -3632,7 +3462,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Read and change anything you type -@@ -4365,7 +4365,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -4357,7 +4357,7 @@ are declared in tools/grit/grit_rule.gni. When you click the extension @@ -3641,7 +3471,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources On all sites -@@ -4418,7 +4418,7 @@ are declared in tools/grit/grit_rule.gni. +@@ -4410,7 +4410,7 @@ are declared in tools/grit/grit_rule.gni. When You Click the Extension @@ -3650,7 +3480,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources On All Sites -@@ -4703,7 +4703,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -4695,7 +4695,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Change back to $1DuckDuckGo? @@ -3659,7 +3489,20 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -5323,7 +5323,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -4938,10 +4938,10 @@ Keep your key file in a safe place. You will need it to create new versions of y + Update password for $1example.com? + + +- $1Username $2***** will be saved to your Google Account, $3user@gmail.com ++ $1Username $2***** will be saved to your Google Account, $3user@9ma1l.qjz9zk + + +- $1Username $2***** will be saved to $3user@gmail.com ++ $1Username $2***** will be saved to $3user@9ma1l.qjz9zk + + + Passwords are saved in your Google Account so you can use them on any device +@@ -5315,7 +5315,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3668,7 +3511,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pa&ste and search for “$1flowers” -@@ -5334,7 +5334,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5326,7 +5326,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3677,7 +3520,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pa&ste and Search for “$1flowers” -@@ -5344,7 +5344,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5336,7 +5336,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3686,7 +3529,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Press $1Tab to send commands to $2Google Talk -@@ -5353,16 +5353,16 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5345,16 +5345,16 @@ Keep your key file in a safe place. You will need it to create new versions of y Tab @@ -3706,7 +3549,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Clear input -@@ -5675,10 +5675,10 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5670,10 +5670,10 @@ Keep your key file in a safe place. You will need it to create new versions of y Why am I seeing this? @@ -3719,7 +3562,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Close -@@ -5845,7 +5845,7 @@ Keep your key file in a safe place. You will need it to create new versions of y +@@ -5879,7 +5879,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Stay in Chrome @@ -3728,7 +3571,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -5932,7 +5932,7 @@ the Bookmarks menu."> +@@ -5968,7 +5968,7 @@ Keep your key file in a safe place. You will need it to create new versions of y This site has been blocked from seeing text and images copied to the clipboard @@ -3737,7 +3580,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking this site from seeing the clipboard -@@ -6029,7 +6029,7 @@ the Bookmarks menu."> +@@ -6065,7 +6065,7 @@ Keep your key file in a safe place. You will need it to create new versions of y The page has become unresponsive. You can wait for it to become responsive or close it. @@ -3746,7 +3589,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Close -@@ -6066,7 +6066,7 @@ the Bookmarks menu."> +@@ -6102,7 +6102,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Automatically sign in to websites using stored credentials. When the feature is disabled, you will be asked for confirmation every time before signing in to a website. @@ -3755,7 +3598,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -6421,7 +6421,7 @@ the Bookmarks menu."> +@@ -6457,7 +6457,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Clear browsing data @@ -3764,7 +3607,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Cleared Chrome data -@@ -6431,7 +6431,7 @@ the Bookmarks menu."> +@@ -6467,7 +6467,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3773,7 +3616,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Some passwords were not deleted -@@ -6640,7 +6640,7 @@ the Bookmarks menu."> +@@ -6676,7 +6676,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Uploading ($127%)... @@ -3782,7 +3625,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -6942,31 +6942,31 @@ the Bookmarks menu."> +@@ -6978,31 +6978,31 @@ Keep your key file in a safe place. You will need it to create new versions of y $1html5rocks.com is sharing your screen. @@ -3819,7 +3662,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Hide -@@ -6994,7 +6994,7 @@ the Bookmarks menu."> +@@ -7030,7 +7030,7 @@ Keep your key file in a safe place. You will need it to create new versions of y @@ -3828,7 +3671,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -7002,10 +7002,10 @@ the Bookmarks menu."> +@@ -7038,10 +7038,10 @@ Keep your key file in a safe place. You will need it to create new versions of y Sign in to Security Device @@ -3841,16 +3684,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Please sign in to $1Software Security Device. -@@ -8027,7 +8027,7 @@ the Bookmarks menu."> - Switch to another profile? +@@ -8066,7 +8066,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Work - -- $2Bob's profile is already signed in to $1bob@gmail.com -+ $2Bob's profile is already signed in to $1bob@9ma1l.qjz9zk + +- $2Bob's profile is linked to $1bob@gmail.com ++ $2Bob's profile is linked to $1bob@9ma1l.qjz9zk -@@ -8036,10 +8036,10 @@ the Bookmarks menu."> +@@ -8075,10 +8075,10 @@ Keep your key file in a safe place. You will need it to create new versions of y Can't sign in @@ -3863,7 +3706,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Close -@@ -8064,13 +8064,13 @@ the Bookmarks menu."> +@@ -8103,13 +8103,13 @@ Keep your key file in a safe place. You will need it to create new versions of y This wasn't me. @@ -3879,7 +3722,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Cancel -@@ -8119,7 +8119,7 @@ the Bookmarks menu."> +@@ -8158,7 +8158,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Open $1Adobe Acrobat? @@ -3888,7 +3731,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources A website wants to open this application. -@@ -8130,8 +8130,8 @@ the Bookmarks menu."> +@@ -8169,8 +8169,8 @@ Keep your key file in a safe place. You will need it to create new versions of y Cancel @@ -3899,7 +3742,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -8156,7 +8156,7 @@ the Bookmarks menu."> +@@ -8195,7 +8195,7 @@ Keep your key file in a safe place. You will need it to create new versions of y Date Modified @@ -3908,7 +3751,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -8295,7 +8295,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -8334,7 +8334,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -3917,7 +3760,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources On - sync everything -@@ -8718,7 +8718,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -8767,7 +8767,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Wrong index. @@ -3926,7 +3769,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -9135,7 +9135,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9184,7 +9184,7 @@ Please help our engineers fix this problem. Tell us what happened right before y This site has been blocked from accessing your location. @@ -3935,7 +3778,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking this site from accessing your location -@@ -9175,7 +9175,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9224,7 +9224,7 @@ Please help our engineers fix this problem. Tell us what happened right before y This site has been blocked from having full control of MIDI devices. @@ -3944,7 +3787,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking this site from having full control of MIDI devices -@@ -9264,7 +9264,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9313,7 +9313,7 @@ Please help our engineers fix this problem. Tell us what happened right before y View and manage saved passwords in your $1Google Account @@ -3953,7 +3796,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -9296,10 +9296,10 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9345,10 +9345,10 @@ Please help our engineers fix this problem. Tell us what happened right before y Undo @@ -3966,7 +3809,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -9410,19 +9410,19 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9459,19 +9459,19 @@ Please help our engineers fix this problem. Tell us what happened right before y An extension triggered full screen. @@ -3989,7 +3832,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources This page has disabled your mouse cursor. -@@ -9446,10 +9446,10 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9495,10 +9495,10 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4002,7 +3845,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Open $1search links -@@ -9486,7 +9486,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9535,7 +9535,7 @@ Please help our engineers fix this problem. Tell us what happened right before y This site has been blocked from using motion sensors. @@ -4011,7 +3854,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Continue blocking sensor access -@@ -9513,7 +9513,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9562,7 +9562,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Continue allowing sensor access @@ -4020,7 +3863,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -9750,7 +9750,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9781,7 +9781,7 @@ Please help our engineers fix this problem. Tell us what happened right before y $1Google Hangouts wants to share the contents of your screen. Choose what you'd like to share. @@ -4029,7 +3872,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Share audio -@@ -9792,7 +9792,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9804,7 +9804,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Share this tab + + +- $1https://google.com is asking for permission to capture the contents of this tab. ++ $1https://9oo91e.qjz9zk is asking for permission to capture the contents of this tab. + + + Share audio +@@ -9838,7 +9838,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4038,7 +3890,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -9864,8 +9864,8 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -9910,8 +9910,8 @@ Please help our engineers fix this problem. Tell us what happened right before y $1Google Photos - Serial port connected @@ -4049,7 +3901,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources $1Google Search - Crashed -@@ -10049,7 +10049,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10104,7 +10104,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4058,7 +3910,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources $1Nexus 5 detected -@@ -10090,7 +10090,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10145,7 +10145,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4067,7 +3919,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to pair -@@ -10136,7 +10136,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10188,7 +10188,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4076,7 +3928,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to connect -@@ -10170,7 +10170,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10228,7 +10228,7 @@ Please help our engineers fix this problem. Tell us what happened right before y No nearby devices found. @@ -4085,7 +3937,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Allow -@@ -10202,7 +10202,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10260,7 +10260,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4094,7 +3946,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to connect to a serial port -@@ -10221,7 +10221,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10285,7 +10285,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4103,7 +3955,16 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources "$1Chrome Extension Name" wants to connect to a HID device -@@ -10386,7 +10386,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10307,7 +10307,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1www.google.com wants to use local fonts ++ $1www.9oo91e.qjz9zk wants to use local fonts + + + No matching font found. +@@ -10481,7 +10481,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4112,7 +3973,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources wants to see the make and model of your Security Key -@@ -10561,13 +10561,13 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10656,13 +10656,13 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4128,7 +3989,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Pick an option -@@ -10747,7 +10747,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10850,7 +10850,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4137,7 +3998,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Select an account to sign in -@@ -10760,7 +10760,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10863,7 +10863,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Your security key can't be used with this site @@ -4146,7 +4007,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Your security key does not have enough space for any more accounts. -@@ -10769,7 +10769,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -10872,7 +10872,7 @@ Please help our engineers fix this problem. Tell us what happened right before y Allow this site to see your security key? @@ -4155,7 +4016,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources Allow -@@ -10956,7 +10956,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11059,7 +11059,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4164,7 +4025,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources -@@ -11045,7 +11045,7 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -11148,7 +11148,7 @@ Please help our engineers fix this problem. Tell us what happened right before y @@ -4173,7 +4034,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources @@ -4185,7 +4046,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd -@@ -326,7 +326,7 @@ chromium_strings.grd. --> +@@ -329,7 +329,7 @@ chromium_strings.grd. --> To send a number from here to your Android phone, sign in to Chrome on both devices. @@ -4194,7 +4055,7 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str Make sure you are signed in to Chrome on your $1Pixel XL and then try sending again. -@@ -574,7 +574,7 @@ Google Chrome is unable to recover your settings. +@@ -577,7 +577,7 @@ Google Chrome is unable to recover your settings. @@ -4203,7 +4064,7 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str -@@ -681,10 +681,10 @@ Google Chrome is unable to recover your settings. +@@ -687,10 +687,10 @@ Google Chrome is unable to recover your settings. You're signed in to Chrome! @@ -4216,7 +4077,7 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str Someone previously signed in to Chrome on this computer as $1user@example.com. Please create a new Chrome user to keep your information separate. -@@ -717,7 +717,7 @@ Google Chrome is unable to recover your settings. +@@ -735,7 +735,7 @@ Google Chrome is unable to recover your settings. @@ -4225,6 +4086,15 @@ diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_str +@@ -1126,7 +1126,7 @@ Google Chrome is unable to recover your settings. + + + +- You can manage this and other Google Accounts you've added for $1John from one place in <a id="osSettingsLink" href="$2https://google.com/">Settings</a>. ++ You can manage this and other Google Accounts you've added for $1John from one place in <a id="osSettingsLink" href="$2https://9oo91e.qjz9zk/">Settings</a>. + Permissions you have granted to websites in the Chrome browser and apps from Google Play may apply to all accounts. + + diff --git a/chrome/app/resources/locale_settings.grd b/chrome/app/resources/locale_settings.grd --- a/chrome/app/resources/locale_settings.grd +++ b/chrome/app/resources/locale_settings.grd @@ -4283,7 +4153,7 @@ diff --git a/chrome/app/theme/PRESUBMIT.py b/chrome/app/theme/PRESUBMIT.py diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -309,14 +309,14 @@ const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = { +@@ -316,14 +316,14 @@ const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = { const FeatureEntry::Choice kTraceUploadURL[] = { {flags_ui::kGenericExperimentChoiceDisabled, "", ""}, {flag_descriptions::kTraceUploadUrlChoiceOther, switches::kTraceUploadURL, @@ -4302,7 +4172,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc const FeatureEntry::Choice kPassiveListenersChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, -@@ -3340,7 +3340,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3504,7 +3504,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSyncSandboxDescription, kOsAll, SINGLE_VALUE_TYPE_AND_VALUE( switches::kSyncServiceURL, @@ -4311,7 +4181,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc #if !defined(OS_ANDROID) {"load-media-router-component-extension", flag_descriptions::kLoadMediaRouterComponentExtensionName, -@@ -3593,7 +3593,7 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3750,7 +3750,7 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSetMarketUrlForTestingName, flag_descriptions::kSetMarketUrlForTestingDescription, kOsAndroid, SINGLE_VALUE_TYPE_AND_VALUE(switches::kMarketUrlForTesting, @@ -4359,7 +4229,7 @@ diff --git a/chrome/browser/android/vr/PRESUBMIT.py b/chrome/browser/android/vr/ diff --git a/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc b/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc --- a/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc +++ b/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc -@@ -14,7 +14,7 @@ +@@ -16,7 +16,7 @@ namespace { @@ -4419,6 +4289,37 @@ diff --git a/chrome/browser/browser_switcher/browser_switcher_service.cc b/chrom "/what-is-enterprise-mode" trigger: "1 minute after browser startup, and then refreshes every 30 " +diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_service.cc +--- a/chrome/browser/cart/cart_service.cc ++++ b/chrome/browser/cart/cart_service.cc +@@ -218,23 +218,23 @@ void CartService::AddCartsWithFakeData() { + // Polulate and add some carts with fake data. + double time_now = base::Time::Now().ToDoubleT(); + cart_db::ChromeCartContentProto dummy_proto1; +- GURL dummy_url1 = GURL("https://www.google.com/"); ++ GURL dummy_url1 = GURL("https://www.9oo91e.qjz9zk/"); + dummy_proto1.set_key(std::string(kFakeDataPrefix) + eTLDPlusOne(dummy_url1)); + dummy_proto1.set_merchant("Cart Foo"); + dummy_proto1.set_merchant_cart_url(dummy_url1.spec()); + dummy_proto1.set_timestamp(time_now + 6); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn1.gstatic.com/" ++ "https://encrypted-tbn1.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" + "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" + "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); diff --git a/chrome/browser/chrome_browser_application_mac.mm b/chrome/browser/chrome_browser_application_mac.mm --- a/chrome/browser/chrome_browser_application_mac.mm +++ b/chrome/browser/chrome_browser_application_mac.mm @@ -4608,7 +4509,7 @@ diff --git a/chrome/browser/chromeos/child_accounts/time_limits/web_time_limit_e diff --git a/chrome/browser/chromeos/crostini/crostini_util.cc b/chrome/browser/chromeos/crostini/crostini_util.cc --- a/chrome/browser/chromeos/crostini/crostini_util.cc +++ b/chrome/browser/chromeos/crostini/crostini_util.cc -@@ -63,7 +63,7 @@ const char kCrostiniDefaultUsername[] = "emperor"; +@@ -65,7 +65,7 @@ const char kCrostiniDefaultUsername[] = "emperor"; // Generated using crx_file::id_util::GenerateId("LinuxAppsFolder") const char kCrostiniFolderId[] = "ddolnhmblagmcagkedkbfejapapdimlk"; const char kCrostiniDefaultImageServerUrl[] = @@ -4656,7 +4557,7 @@ diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.c diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc -@@ -81,7 +81,7 @@ namespace { +@@ -82,7 +82,7 @@ namespace { using api::file_manager_private::ProfileInfo; @@ -4736,7 +4637,7 @@ diff --git a/chrome/browser/chromeos/hats/hats_dialog.cc b/chrome/browser/chrome diff --git a/chrome/browser/chromeos/input_method/assistive_suggester.cc b/chrome/browser/chromeos/input_method/assistive_suggester.cc --- a/chrome/browser/chromeos/input_method/assistive_suggester.cc +++ b/chrome/browser/chromeos/input_method/assistive_suggester.cc -@@ -29,16 +29,16 @@ const char kKeydown[] = "keydown"; +@@ -28,16 +28,16 @@ const char kMaxTextBeforeCursorLength = 50; const char* kAllowedDomainsForPersonalInfoSuggester[] = { "discord.com", "messenger.com", "web.whatsapp.com", @@ -4814,7 +4715,7 @@ diff --git a/chrome/browser/chromeos/login/screens/recommend_apps/recommend_apps diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc -@@ -1202,7 +1202,7 @@ void ShowSupervisedUserDeprecationNotification(Profile* profile, +@@ -1214,7 +1214,7 @@ void ShowSupervisedUserDeprecationNotification(Profile* profile, NavigateParams params( profile, @@ -4891,6 +4792,38 @@ diff --git a/chrome/browser/chromeos/net/network_diagnostics/network_diagnostics return *fixed_hostnames; } +@@ -200,10 +200,10 @@ std::vector GetTcpPortsForCustomStunServer() { + + std::vector GetDefaultMediaUrls() { + const char* const kHostnames[] = { +- "https://apis.google.com", "https://talkgadget.google.com", +- "https://clients6.google.com", "https://hangouts.google.com", +- "https://client-channel.google.com", "https://googleapis.com", +- "https://accounts.google.com", "https://clients4.google.com"}; ++ "https://apis.9oo91e.qjz9zk", "https://talkgadget.9oo91e.qjz9zk", ++ "https://clients6.9oo91e.qjz9zk", "https://hangouts.9oo91e.qjz9zk", ++ "https://client-channel.9oo91e.qjz9zk", "https://9oo91eapis.qjz9zk", ++ "https://accounts.9oo91e.qjz9zk", "https://clients4.9oo91e.qjz9zk"}; + std::vector hostnames; + for (auto* const& hostname : kHostnames) { + hostnames.push_back(GURL(hostname)); +diff --git a/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc +--- a/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc ++++ b/chrome/browser/chromeos/net/network_diagnostics/video_conferencing_routine.cc +@@ -22,11 +22,11 @@ namespace network_diagnostics { + + namespace { + +-const char kDefaultStunServer[] = "stun.l.google.com"; ++const char kDefaultStunServer[] = "stun.l.9oo91e.qjz9zk"; + + } // namespace + +-const char kSupportDetails[] = "https://support.google.com/a/answer/1279090"; ++const char kSupportDetails[] = "https://support.9oo91e.qjz9zk/a/answer/1279090"; + const base::TimeDelta kTimeoutAfterHostResolution = + base::TimeDelta::FromSeconds(10); + diff --git a/chrome/browser/chromeos/plugin_vm/plugin_vm_license_checker.cc b/chrome/browser/chromeos/plugin_vm/plugin_vm_license_checker.cc --- a/chrome/browser/chromeos/plugin_vm/plugin_vm_license_checker.cc +++ b/chrome/browser/chromeos/plugin_vm/plugin_vm_license_checker.cc @@ -4956,7 +4889,7 @@ diff --git a/chrome/browser/chromeos/policy/powerwash_requirements_checker.cc b/ - "https://support.google.com/chromebook?p=factory_reset"; + "https://support.9oo91e.qjz9zk/chromebook?p=factory_reset"; - base::string16 GetEnterpriseDisplayDomain() { + base::string16 GetEnterpriseManager() { policy::BrowserPolicyConnectorChromeOS* connector = diff --git a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc b/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc --- a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc @@ -5002,7 +4935,7 @@ diff --git a/chrome/browser/chromeos/u2f_notification.cc b/chrome/browser/chrome diff --git a/chrome/browser/custom_handlers/protocol_handler_registry.cc b/chrome/browser/custom_handlers/protocol_handler_registry.cc --- a/chrome/browser/custom_handlers/protocol_handler_registry.cc +++ b/chrome/browser/custom_handlers/protocol_handler_registry.cc -@@ -220,11 +220,11 @@ void ProtocolHandlerRegistry::InstallDefaultsForChromeOS() { +@@ -222,11 +222,11 @@ void ProtocolHandlerRegistry::InstallDefaultsForChromeOS() { AddPredefinedHandler( ProtocolHandler::CreateProtocolHandler( "mailto", @@ -5019,7 +4952,7 @@ diff --git a/chrome/browser/custom_handlers/protocol_handler_registry.cc b/chrom diff --git a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc --- a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc +++ b/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.cc -@@ -59,7 +59,7 @@ +@@ -61,7 +61,7 @@ namespace { // Assume that any proxy host ending with this suffix is a Data Reduction Proxy. @@ -5028,7 +4961,7 @@ diff --git a/chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_set // Searches |proxy_list| for any Data Reduction Proxies, even if they don't // match a currently configured Data Reduction Proxy. -@@ -176,7 +176,7 @@ DataReductionProxyChromeSettings::MigrateDataReductionProxyOffProxyPrefsHelper( +@@ -178,7 +178,7 @@ DataReductionProxyChromeSettings::MigrateDataReductionProxyOffProxyPrefsHelper( // could be implied, so searching for ".googlezip.net:" in the PAC script // indicates whether there's a proxy in that PAC script with a host of the // form "*.googlezip.net". @@ -5062,10 +4995,10 @@ diff --git a/chrome/browser/download/mixed_content_download_blocking.cc b/chrome "protecting-users-from-insecure.html" " for more details.", data.initiator_->GetURL().spec().c_str(), -diff --git a/chrome/browser/enterprise/connectors/connectors_manager.cc b/chrome/browser/enterprise/connectors/connectors_manager.cc ---- a/chrome/browser/enterprise/connectors/connectors_manager.cc -+++ b/chrome/browser/enterprise/connectors/connectors_manager.cc -@@ -31,7 +31,7 @@ const char kServiceProviderConfig[] = R"({ +diff --git a/chrome/browser/enterprise/connectors/connectors_service.cc b/chrome/browser/enterprise/connectors/connectors_service.cc +--- a/chrome/browser/enterprise/connectors/connectors_service.cc ++++ b/chrome/browser/enterprise/connectors/connectors_service.cc +@@ -43,7 +43,7 @@ const char kServiceProviderConfig[] = R"({ "version": { "1": { "analysis": { @@ -5074,7 +5007,7 @@ diff --git a/chrome/browser/enterprise/connectors/connectors_manager.cc b/chrome "supported_tags": [ { "name": "malware", -@@ -84,7 +84,7 @@ const char kServiceProviderConfig[] = R"({ +@@ -96,7 +96,7 @@ const char kServiceProviderConfig[] = R"({ ] }, "reporting": { @@ -5107,7 +5040,7 @@ diff --git a/chrome/browser/enterprise/reporting/extension_request/extension_req diff --git a/chrome/browser/error_reporting/chrome_js_error_report_processor.cc b/chrome/browser/error_reporting/chrome_js_error_report_processor.cc --- a/chrome/browser/error_reporting/chrome_js_error_report_processor.cc +++ b/chrome/browser/error_reporting/chrome_js_error_report_processor.cc -@@ -34,9 +34,9 @@ +@@ -40,9 +40,9 @@ namespace { @@ -5122,9 +5055,9 @@ diff --git a/chrome/browser/error_reporting/chrome_js_error_report_processor.cc diff --git a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc --- a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc +++ b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc -@@ -58,10 +58,10 @@ enum class U2FAttestationPromptResult { - kMaxValue = kBlocked, - }; +@@ -40,10 +40,10 @@ namespace api { + + namespace { -const char kGoogleDotCom[] = "google.com"; +const char kGoogleDotCom[] = "9oo91e.qjz9zk"; @@ -5136,18 +5069,6 @@ diff --git a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_priva // ContainsAppIdByHash returns true iff the SHA-256 hash of one of the // elements of |list| equals |hash|. -diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc ---- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc -+++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc -@@ -137,7 +137,7 @@ void ImportPrivateKeyPKCS8ToSlot(const unsigned char* pkcs8_der, - const char kTestExtensionID[] = "aecpbnckhoppanpmefllkdkohionpmig"; - const char kTestExtensionUpdateManifest[] = - R"( -- -+ - - - diff --git a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc b/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc --- a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc +++ b/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc @@ -5163,14 +5084,14 @@ diff --git a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flo diff --git a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc --- a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc +++ b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc -@@ -78,7 +78,7 @@ namespace { +@@ -79,7 +79,7 @@ namespace { - #if defined(OS_CHROMEOS) + #if BUILDFLAG(IS_CHROMEOS_ASH) const char kPlayIntentPrefix[] = - "https://play.google.com/store/apps/details?id="; + "https://play.9oo91e.qjz9zk/store/apps/details?id="; const char kChromeWebStoreReferrer[] = "&referrer=chrome_web_store"; - #endif // OS_CHROMEOS + #endif // BUILDFLAG(IS_CHROMEOS_ASH) diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc --- a/chrome/browser/extensions/api/tab_capture/tab_capture_performance_test_base.cc @@ -5198,7 +5119,7 @@ diff --git a/chrome/browser/extensions/chrome_extension_browser_constants.cc b/c diff --git a/chrome/browser/extensions/external_pref_loader.cc b/chrome/browser/extensions/external_pref_loader.cc --- a/chrome/browser/extensions/external_pref_loader.cc +++ b/chrome/browser/extensions/external_pref_loader.cc -@@ -330,7 +330,7 @@ void ExternalPrefLoader::LoadOnFileThread() { +@@ -331,7 +331,7 @@ void ExternalPrefLoader::LoadOnFileThread() { if (!prefs->empty()) LOG(WARNING) << "You are using an old-style extension deployment method " "(external_extensions.json), which will soon be " @@ -5210,7 +5131,7 @@ diff --git a/chrome/browser/extensions/external_pref_loader.cc b/chrome/browser/ diff --git a/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc b/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc --- a/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc +++ b/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc -@@ -30,7 +30,7 @@ const char ForceInstalledTestBase::kExtensionId2[] = +@@ -28,7 +28,7 @@ const char ForceInstalledTestBase::kExtensionId2[] = const char ForceInstalledTestBase::kExtensionName1[] = "name1"; const char ForceInstalledTestBase::kExtensionName2[] = "name2"; const char ForceInstalledTestBase::kExtensionUpdateUrl[] = @@ -5246,7 +5167,7 @@ diff --git a/chrome/browser/extensions/updater/chrome_extension_downloader_facto diff --git a/chrome/browser/extensions/updater/chrome_update_client_config.cc b/chrome/browser/extensions/updater/chrome_update_client_config.cc --- a/chrome/browser/extensions/updater/chrome_update_client_config.cc +++ b/chrome/browser/extensions/updater/chrome_update_client_config.cc -@@ -188,7 +188,7 @@ ChromeUpdateClientConfig::GetNetworkFetcherFactory() { +@@ -216,7 +216,7 @@ ChromeUpdateClientConfig::GetNetworkFetcherFactory() { // from chrome.google.com, so send cookies if and only if that is // the download domain. base::BindRepeating([](const GURL& url) { @@ -5270,7 +5191,7 @@ diff --git a/chrome/browser/federated_learning/floc_remote_permission_service.cc diff --git a/chrome/browser/feedback/feedback_uploader_chrome.cc b/chrome/browser/feedback/feedback_uploader_chrome.cc --- a/chrome/browser/feedback/feedback_uploader_chrome.cc +++ b/chrome/browser/feedback/feedback_uploader_chrome.cc -@@ -34,7 +34,7 @@ constexpr char kAuthenticationErrorLogMessage[] = +@@ -35,7 +35,7 @@ constexpr char kAuthenticationErrorLogMessage[] = constexpr char kConsumer[] = "feedback_uploader_chrome"; @@ -5282,7 +5203,7 @@ diff --git a/chrome/browser/feedback/feedback_uploader_chrome.cc b/chrome/browse diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -471,7 +471,7 @@ const char kDetectTargetEmbeddingLookalikesName[] = +@@ -488,7 +488,7 @@ const char kDetectTargetEmbeddingLookalikesName[] = "Detect target embedding domains as lookalikes."; const char kDetectTargetEmbeddingLookalikesDescription[] = "Shows a lookalike interstitial when navigating to target embedding domains" @@ -5291,16 +5212,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti const char kDeviceDiscoveryNotificationsName[] = "Device Discovery Notifications"; -@@ -874,7 +874,7 @@ const char kForceEmptyCorbAndCorsAllowlistDescription[] = - "Removes all Chrome Extensions from the CORB and CORS allowlist. " - "For more information about the allowlist and the changes to the " - "security model of content scripts, please see: " -- "https://www.chromium.org/Home/chromium-security/" -+ "https://www.ch40m1um.qjz9zk/Home/chromium-security/" - "extension-content-script-fetches"; - - const char kCrossOriginOpenerPolicyReportingName[] = -@@ -1994,7 +1994,7 @@ const char kIntensiveWakeUpThrottlingName[] = +@@ -2039,7 +2039,7 @@ const char kIntensiveWakeUpThrottlingName[] = const char kIntensiveWakeUpThrottlingDescription[] = "When enabled, wake ups from DOM Timers are limited to 1 per minute in a " "page that has been hidden for 5 minutes. For additional details, see " @@ -5445,6 +5357,56 @@ diff --git a/chrome/browser/installable/quality_enforcer.cc b/chrome/browser/ins "quick-start"; } // namespace +diff --git a/chrome/browser/lacros/cert_db_initializer_impl.cc b/chrome/browser/lacros/cert_db_initializer_impl.cc +--- a/chrome/browser/lacros/cert_db_initializer_impl.cc ++++ b/chrome/browser/lacros/cert_db_initializer_impl.cc +@@ -33,26 +33,26 @@ namespace { + // everyone when the policy stack is ready (expected to happen before Feb 2021). + bool IsEnabledForEarlyAccess(Profile* profile) { + static base::NoDestructor> allowlist{ +- {"bartfab@google.com", "darin@google.com", +- "dhaddock@google.com", "edcourtney@google.com", +- "erikchen@google.com", "fangzhoug@google.com", +- "fukino@google.com", "gianluca@google.com", +- "heiserya@google.com", "hidehiko@google.com", +- "huangs@google.com", "huanr@google.com", +- "igorcov@google.com", "jamescook@google.com", +- "jennyz@google.com", "jorgelo@google.com", +- "ketakid@google.com", "lakpamarthy@google.com", +- "leolai@google.com", "liaoyuke@google.com", +- "maguschen@google.com", "marinakz@google.com", +- "miersh@google.com", "mkarkada@google.com", +- "okalitova@google.com", "oshima@google.com", +- "pmarko@google.com", "pucchakayala@google.com", +- "rbock@google.com", "rjkroege@google.com", +- "rogerta@google.com", "satorux@google.com", +- "sinhak@google.com", "songsuk@google.com", +- "srinivassista@google.com", "svenzheng@google.com", +- "willmcleod@google.com", "ythjkt@google.com", +- "yusukes@google.com"}}; ++ {"bartfab@9oo91e.qjz9zk", "darin@9oo91e.qjz9zk", ++ "dhaddock@9oo91e.qjz9zk", "edcourtney@9oo91e.qjz9zk", ++ "erikchen@9oo91e.qjz9zk", "fangzhoug@9oo91e.qjz9zk", ++ "fukino@9oo91e.qjz9zk", "gianluca@9oo91e.qjz9zk", ++ "heiserya@9oo91e.qjz9zk", "hidehiko@9oo91e.qjz9zk", ++ "huangs@9oo91e.qjz9zk", "huanr@9oo91e.qjz9zk", ++ "igorcov@9oo91e.qjz9zk", "jamescook@9oo91e.qjz9zk", ++ "jennyz@9oo91e.qjz9zk", "jorgelo@9oo91e.qjz9zk", ++ "ketakid@9oo91e.qjz9zk", "lakpamarthy@9oo91e.qjz9zk", ++ "leolai@9oo91e.qjz9zk", "liaoyuke@9oo91e.qjz9zk", ++ "maguschen@9oo91e.qjz9zk", "marinakz@9oo91e.qjz9zk", ++ "miersh@9oo91e.qjz9zk", "mkarkada@9oo91e.qjz9zk", ++ "okalitova@9oo91e.qjz9zk", "oshima@9oo91e.qjz9zk", ++ "pmarko@9oo91e.qjz9zk", "pucchakayala@9oo91e.qjz9zk", ++ "rbock@9oo91e.qjz9zk", "rjkroege@9oo91e.qjz9zk", ++ "rogerta@9oo91e.qjz9zk", "satorux@9oo91e.qjz9zk", ++ "sinhak@9oo91e.qjz9zk", "songsuk@9oo91e.qjz9zk", ++ "srinivassista@9oo91e.qjz9zk", "svenzheng@9oo91e.qjz9zk", ++ "willmcleod@9oo91e.qjz9zk", "ythjkt@9oo91e.qjz9zk", ++ "yusukes@9oo91e.qjz9zk"}}; + signin::IdentityManager* identity_manager = + IdentityManagerFactory::GetForProfile(profile); + return base::Contains(*allowlist, identity_manager diff --git a/chrome/browser/local_discovery/service_discovery_client_mac.mm b/chrome/browser/local_discovery/service_discovery_client_mac.mm --- a/chrome/browser/local_discovery/service_discovery_client_mac.mm +++ b/chrome/browser/local_discovery/service_discovery_client_mac.mm @@ -5466,63 +5428,6 @@ diff --git a/chrome/browser/local_discovery/service_discovery_client_mac.mm b/ch [_service setDelegate:nil]; _service.reset(); } -diff --git a/chrome/browser/media/kaleidoscope/kaleidoscope_data_provider_impl.cc b/chrome/browser/media/kaleidoscope/kaleidoscope_data_provider_impl.cc ---- a/chrome/browser/media/kaleidoscope/kaleidoscope_data_provider_impl.cc -+++ b/chrome/browser/media/kaleidoscope/kaleidoscope_data_provider_impl.cc -@@ -43,7 +43,7 @@ constexpr int kMediaFeedsFetchedItemsMin = 4; - constexpr int kMediaFeedsItemsMaxCount = 20; - - constexpr char kChromeMediaRecommendationsOAuth2Scope[] = -- "https://www.googleapis.com/auth/chrome-media-recommendations"; -+ "https://www.9oo91eapis.qjz9zk/auth/chrome-media-recommendations"; - - // The minimum watch time needed in media history for a provider to be - // considered high watch time. -diff --git a/chrome/browser/media/kaleidoscope/kaleidoscope_switches.cc b/chrome/browser/media/kaleidoscope/kaleidoscope_switches.cc ---- a/chrome/browser/media/kaleidoscope/kaleidoscope_switches.cc -+++ b/chrome/browser/media/kaleidoscope/kaleidoscope_switches.cc -@@ -15,17 +15,17 @@ const char kKaleidoscopeBackendUrl[] = "kaleidoscope-backend-url"; - // The command line alias and URL for the "prod" environment. - const char kKaleidoscopeBackendUrlProdAlias[] = "prod"; - const char kKaleidoscopeBackendUrlProdUrl[] = -- "https://chromemediarecommendations-pa.googleapis.com"; -+ "https://chromemediarecommendations-pa.9oo91eapis.qjz9zk"; - - // The command line alias and URL for the "staging" environment. - const char kKaleidoscopeBackendUrlStagingAlias[] = "staging"; - const char kKaleidoscopeBackendUrlStagingUrl[] = -- "https://staging-chromemediarecommendations-pa.sandbox.googleapis.com"; -+ "https://staging-chromemediarecommendations-pa.sandbox.9oo91eapis.qjz9zk"; - - // The command line alias and URL for the "autopush" environment. - const char kKaleidoscopeBackendUrlAutopushAlias[] = "autopush"; - const char kKaleidoscopeBackendUrlAutopushUrl[] = -- "https://autopush-chromemediarecommendations-pa.sandbox.googleapis.com"; -+ "https://autopush-chromemediarecommendations-pa.sandbox.9oo91eapis.qjz9zk"; - - } // namespace switches - -diff --git a/chrome/browser/media/kaleidoscope/kaleidoscope_ui.cc b/chrome/browser/media/kaleidoscope/kaleidoscope_ui.cc ---- a/chrome/browser/media/kaleidoscope/kaleidoscope_ui.cc -+++ b/chrome/browser/media/kaleidoscope/kaleidoscope_ui.cc -@@ -211,7 +211,7 @@ content::WebUIDataSource* CreateUntrustedPALChildWebUIDataSource() { - // Allow scripts from Google. - untrusted_source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::ScriptSrc, -- "script-src https://imasdk.googleapis.com 'unsafe-inline' 'self';"); -+ "script-src https://imasdk.9oo91eapis.qjz9zk 'unsafe-inline' 'self';"); - untrusted_source->DisableTrustedTypesCSP(); - - #if BUILDFLAG(ENABLE_KALEIDOSCOPE) -@@ -335,7 +335,7 @@ content::WebUIDataSource* KaleidoscopeUI::CreateUntrustedWebUIDataSource() { - // Allow YouTube videos to be embedded. - untrusted_source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::ChildSrc, -- "child-src https://www.youtube.com " -+ "child-src https://www.y0u1ub3.qjz9zk " - "chrome-untrusted://kaleidoscope-pal-generator;"); - - // Add the URL to the backend. diff --git a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc --- a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc +++ b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc @@ -5540,9 +5445,9 @@ diff --git a/chrome/browser/media/router/providers/cast/cast_media_route_provide diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc --- a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc +++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc -@@ -650,12 +650,12 @@ std::vector DialMediaRouteProvider::GetOrigins( +@@ -692,12 +692,12 @@ std::vector DialMediaRouteProvider::GetOrigins( base::flat_map>> - origin_white_list( + origin_allowlist( {{"YouTube", - {CreateOrigin("https://tv.youtube.com"), - CreateOrigin("https://tv-green-qa.youtube.com"), @@ -5562,7 +5467,7 @@ diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provide diff --git a/chrome/browser/media/webrtc/webrtc_browsertest_common.cc b/chrome/browser/media/webrtc/webrtc_browsertest_common.cc --- a/chrome/browser/media/webrtc/webrtc_browsertest_common.cc +++ b/chrome/browser/media/webrtc/webrtc_browsertest_common.cc -@@ -36,7 +36,7 @@ const char kAdviseOnGclientSolution[] = +@@ -37,7 +37,7 @@ const char kAdviseOnGclientSolution[] = "You also need to add this solution to your .gclient:\n" "{\n" " \"name\" : \"webrtc.DEPS\",\n" @@ -5574,7 +5479,7 @@ diff --git a/chrome/browser/media/webrtc/webrtc_browsertest_common.cc b/chrome/b diff --git a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc --- a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc +++ b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc -@@ -121,7 +121,7 @@ void OnURLLoadUploadProgress(uint64_t current, uint64_t total) { +@@ -122,7 +122,7 @@ void OnURLLoadUploadProgress(uint64_t current, uint64_t total) { } // namespace const char WebRtcEventLogUploaderImpl::kUploadURL[] = @@ -5586,7 +5491,7 @@ diff --git a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc b/chrome/b diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_log_uploader.cc --- a/chrome/browser/media/webrtc/webrtc_log_uploader.cc +++ b/chrome/browser/media/webrtc/webrtc_log_uploader.cc -@@ -463,7 +463,7 @@ void WebRtcLogUploader::UploadCompressedLog( +@@ -466,7 +466,7 @@ void WebRtcLogUploader::UploadCompressedLog( "Not implemented, it would be good to do so." })"); @@ -5598,7 +5503,7 @@ diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser diff --git a/chrome/browser/metrics/testing/sync_metrics_test_utils.cc b/chrome/browser/metrics/testing/sync_metrics_test_utils.cc --- a/chrome/browser/metrics/testing/sync_metrics_test_utils.cc +++ b/chrome/browser/metrics/testing/sync_metrics_test_utils.cc -@@ -33,7 +33,7 @@ std::unique_ptr InitializeProfileForSync( +@@ -34,7 +34,7 @@ std::unique_ptr InitializeProfileForSync( username = info.email; #endif if (username.empty()) { @@ -5683,7 +5588,7 @@ diff --git a/chrome/browser/notifications/notification_platform_bridge_mac.mm b/ diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc --- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc -@@ -127,7 +127,7 @@ void RecordFeatureUsage(content::RenderFrameHost* rfh, +@@ -129,7 +129,7 @@ void RecordFeatureUsage(content::RenderFrameHost* rfh, std::string GetHeavyAdReportMessage(const ad_metrics::FrameTreeData& frame_data, bool will_unload_adframe) { const char kChromeStatusMessage[] = @@ -5719,14 +5624,9 @@ diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observ diff --git a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc --- a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc -@@ -133,11 +133,11 @@ const char kHistogramNoServiceWorkerFirstContentfulPaintDocs[] = +@@ -97,7 +97,7 @@ const char kHistogramNoServiceWorkerFirstContentfulPaintDocs[] = namespace { - bool IsInboxSite(const GURL& url) { -- return url.host_piece() == "inbox.google.com"; -+ return url.host_piece() == "inbox.9oo91e.qjz9zk"; - } - bool IsDocsSite(const GURL& url) { - return url.host_piece() == "docs.google.com"; + return url.host_piece() == "docs.9oo91e.qjz9zk"; @@ -5760,7 +5660,7 @@ diff --git a/chrome/browser/pepper_broker_infobar_delegate.cc b/chrome/browser/p diff --git a/chrome/browser/performance_hints/performance_hints_features.cc b/chrome/browser/performance_hints/performance_hints_features.cc --- a/chrome/browser/performance_hints/performance_hints_features.cc +++ b/chrome/browser/performance_hints/performance_hints_features.cc -@@ -18,7 +18,7 @@ const base::Feature kPerformanceHintsHandleRewrites{ +@@ -19,7 +19,7 @@ const base::Feature kPerformanceHintsHandleRewrites{ "PerformanceHintsHandleRewrites", base::FEATURE_ENABLED_BY_DEFAULT}; constexpr base::FeatureParam kRewriteConfig{ &kPerformanceHintsHandleRewrites, "rewrite_config", @@ -5784,7 +5684,7 @@ diff --git a/chrome/browser/permissions/grouped_permission_infobar_delegate_andr diff --git a/chrome/browser/policy/extension_force_install_mixin.cc b/chrome/browser/policy/extension_force_install_mixin.cc --- a/chrome/browser/policy/extension_force_install_mixin.cc +++ b/chrome/browser/policy/extension_force_install_mixin.cc -@@ -67,7 +67,7 @@ constexpr char kUpdateManifestFileNameTemplate[] = "%s.xml"; +@@ -72,7 +72,7 @@ constexpr char kUpdateManifestFileNameTemplate[] = "%s.xml"; // Template for the update manifest contents. constexpr char kUpdateManifestTemplate[] = R"( @@ -5796,7 +5696,7 @@ diff --git a/chrome/browser/policy/extension_force_install_mixin.cc b/chrome/bro diff --git a/chrome/browser/policy/policy_test_utils.cc b/chrome/browser/policy/policy_test_utils.cc --- a/chrome/browser/policy/policy_test_utils.cc +++ b/chrome/browser/policy/policy_test_utils.cc -@@ -245,7 +245,7 @@ void PolicyTest::ClearEnableFlag(const keyboard::KeyboardEnableFlag& flag) { +@@ -248,7 +248,7 @@ void PolicyTest::ClearEnableFlag(const keyboard::KeyboardEnableFlag& flag) { // static GURL PolicyTest::GetExpectedSearchURL(bool expect_safe_search) { @@ -5808,7 +5708,7 @@ diff --git a/chrome/browser/policy/policy_test_utils.cc b/chrome/browser/policy/ diff --git a/chrome/browser/policy/policy_test_utils.h b/chrome/browser/policy/policy_test_utils.h --- a/chrome/browser/policy/policy_test_utils.h +++ b/chrome/browser/policy/policy_test_utils.h -@@ -81,7 +81,7 @@ class PolicyTest : public InProcessBrowserTest { +@@ -90,7 +90,7 @@ class PolicyTest : public InProcessBrowserTest { static void CheckSafeSearch(Browser* browser, bool expect_safe_search, @@ -5862,7 +5762,7 @@ diff --git a/chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_params.cc b/c diff --git a/chrome/browser/profiles/profile_window.cc b/chrome/browser/profiles/profile_window.cc --- a/chrome/browser/profiles/profile_window.cc +++ b/chrome/browser/profiles/profile_window.cc -@@ -364,7 +364,7 @@ bool IsLockAvailable(Profile* profile) { +@@ -360,7 +360,7 @@ bool IsLockAvailable(Profile* profile) { // TODO(mlerman): Prohibit only users who authenticate using SAML. Until then, // prohibited users who use hosted domains (aside from google.com). @@ -5891,7 +5791,7 @@ diff --git a/chrome/browser/push_messaging/push_messaging_service_impl.cc b/chro "result in user-visible messages. You can indicate this by calling " "pushManager.subscribe({userVisibleOnly: true}) instead. See " - "https://goo.gl/yqv4Q4 for more details."; -+ "https://goo.gl.qjz9zk.qjz9zk.qjz9zk/yqv4Q4 for more details."; ++ "https://goo.gl.qjz9zk/yqv4Q4 for more details."; // Message displayed in the console (as an error) when a GCM Sender ID is used // to create a subscription, which is unsupported. The subscription request will @@ -6096,7 +5996,7 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/opt diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js -@@ -14,7 +14,7 @@ const SELECT_TO_SPEAK_TRAY_CLASS_NAME = +@@ -47,7 +47,7 @@ const FLOATING_MENU_BUTTON_CLASS_NAME = 'FloatingMenuButton'; // Matches one of the known GSuite apps which need the clipboard to find and // read selected text. Includes sandbox and non-sandbox versions. const GSUITE_APP_REGEXP = @@ -6105,7 +6005,7 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/sel // A RGBA hex string for the default background shading color, which is black at // 40% opacity (hex 66). This should be equivalent to using -@@ -134,7 +134,7 @@ class SelectToSpeak { +@@ -253,7 +253,7 @@ export class SelectToSpeak { this.enableLanguageDetectionIntegration_ = false; // TODO(chrishall): do we want to (also?) expose this in preferences? @@ -6114,7 +6014,7 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/sel 'enable-experimental-accessibility-language-detection', (result) => { this.enableLanguageDetectionIntegration_ = result; }); -@@ -468,8 +468,8 @@ class SelectToSpeak { +@@ -893,8 +893,8 @@ export class SelectToSpeak { chrome.tabs.query( { url: [ @@ -6125,22 +6025,10 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/sel ] }, (tabs) => { -diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/test_support.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/test_support.js ---- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/test_support.js -+++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/test_support.js -@@ -41,7 +41,7 @@ chrome.metricsPrivate = { - MetricTypeType: {HISTOGRAM_LINEAR: 1} - }; - --chrome.commandLinePrivate = { -+ch40me.qjz9zkmandLinePrivate = { - hasSwitch() {} - }; - diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 --- a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 +++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 -@@ -37,8 +37,8 @@ +@@ -20,8 +20,8 @@ "storage", "tabs", "tts", @@ -6151,7 +6039,7 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_man "clipboard", "clipboardRead", "clipboardWrite" -@@ -50,8 +50,8 @@ +@@ -33,8 +33,8 @@ "options_page": "select_to_speak/options.html", "content_scripts": [ { @@ -6161,11 +6049,11 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_man + "https://docs.sandbox.9oo91e.qjz9zk/document*" ], "all_frames": true, "js": [ - "select_to_speak/select_to_speak_gdocs_script.js" + "common/gdocs_script.js" diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js --- a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js -@@ -29,7 +29,7 @@ class SwitchAccess { +@@ -38,7 +38,7 @@ export class SwitchAccess { */ this.enableImprovedTextInput_ = false; @@ -6174,10 +6062,24 @@ diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/switc 'enable-experimental-accessibility-switch-access-text', (result) => { this.enableImprovedTextInput_ = result; }); -diff --git a/chrome/browser/resources/chromeos/add_supervision/add_supervision.js b/chrome/browser/resources/chromeos/add_supervision/add_supervision.js ---- a/chrome/browser/resources/chromeos/add_supervision/add_supervision.js -+++ b/chrome/browser/resources/chromeos/add_supervision/add_supervision.js -@@ -7,15 +7,15 @@ +diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 +--- a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 ++++ b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 +@@ -28,8 +28,8 @@ + "default_locale": "en", + "content_scripts": [ + { +- "matches": [ "https://docs.google.com/document*", +- "https://docs.sandbox.google.com/document*" ], ++ "matches": [ "https://docs.9oo91e.qjz9zk/document*", ++ "https://docs.sandbox.9oo91e.qjz9zk/document*" ], + "all_frames": true, + "js": [ + "common/gdocs_script.js" +diff --git a/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js b/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js +--- a/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js ++++ b/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js +@@ -16,15 +16,15 @@ import {AddSupervisionAPIServer} from './add_supervision_api_server.js'; * @const {!Array} */ const ALLOWED_HOSTS = [ @@ -6582,7 +6484,7 @@ diff --git a/chrome/browser/resources/chromeos/echo/manifest.json b/chrome/brows diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js --- a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js +++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js -@@ -103,7 +103,7 @@ Polymer({ +@@ -111,7 +111,7 @@ Polymer({ // Don't show the "Next" button if the EDU authentication got forwarded to // a non-Google SSO page. @@ -6591,6 +6493,18 @@ diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_u } else { // Hide the GAIA Buttons. +diff --git a/chrome/browser/resources/chromeos/emoji_picker/icons.html b/chrome/browser/resources/chromeos/emoji_picker/icons.html +--- a/chrome/browser/resources/chromeos/emoji_picker/icons.html ++++ b/chrome/browser/resources/chromeos/emoji_picker/icons.html +@@ -2,7 +2,7 @@ + + + + diff --git a/chrome/browser/resources/chromeos/emulator/icons.html b/chrome/browser/resources/chromeos/emulator/icons.html --- a/chrome/browser/resources/chromeos/emulator/icons.html +++ b/chrome/browser/resources/chromeos/emulator/icons.html @@ -6599,7 +6513,7 @@ diff --git a/chrome/browser/resources/chromeos/emulator/icons.html b/chrome/brow @@ -6630,10 +6544,43 @@ diff --git a/chrome/browser/resources/chromeos/input_method/google_xkb_manifest. ], "js": [ "chos_inject-debug.js" -diff --git a/chrome/browser/resources/chromeos/login/offline_gaia.html b/chrome/browser/resources/chromeos/login/offline_gaia.html ---- a/chrome/browser/resources/chromeos/login/offline_gaia.html -+++ b/chrome/browser/resources/chromeos/login/offline_gaia.html -@@ -31,7 +31,7 @@ +diff --git a/chrome/browser/resources/chromeos/login/arc_terms_of_service.js b/chrome/browser/resources/chromeos/login/arc_terms_of_service.js +--- a/chrome/browser/resources/chromeos/login/arc_terms_of_service.js ++++ b/chrome/browser/resources/chromeos/login/arc_terms_of_service.js +@@ -178,7 +178,7 @@ Polymer({ + * The hostname of the url where the terms of service will be fetched. + * Overwritten by tests to load terms of service from local test server. + */ +- termsOfServiceHostName_: 'https://play.google.com', ++ termsOfServiceHostName_: 'https://play.9oo91e.qjz9zk', + + /** @override */ + ready() { +@@ -722,7 +722,7 @@ Polymer({ + if (results && results.length == 1 && typeof results[0] == 'string') { + self.showUrlOverlay(results[0]); + } else { +- var defaultLink = 'https://www.google.com/intl/' + ++ var defaultLink = 'https://www.9oo91e.qjz9zk/intl/' + + self.getCurrentLanguage_() + '/policies/privacy/'; + self.showUrlOverlay(defaultLink); + } +diff --git a/chrome/browser/resources/chromeos/login/marketing_opt_in.html b/chrome/browser/resources/chromeos/login/marketing_opt_in.html +--- a/chrome/browser/resources/chromeos/login/marketing_opt_in.html ++++ b/chrome/browser/resources/chromeos/login/marketing_opt_in.html +@@ -75,7 +75,7 @@ + + + + +diff --git a/chrome/browser/resources/chromeos/login/offline_login.html b/chrome/browser/resources/chromeos/login/offline_login.html +--- a/chrome/browser/resources/chromeos/login/offline_login.html ++++ b/chrome/browser/resources/chromeos/login/offline_login.html +@@ -32,7 +32,7 @@ 'email': , 'password': } If user did not type domain |email| will be added by @@ -6642,30 +6589,18 @@ diff --git a/chrome/browser/resources/chromeos/login/offline_gaia.html b/chrome/ Methods: 'focus' - focuses current screen (email input or password input); 'setEmail' - accepts an argument |email|. If |email| is empty it sets -diff --git a/chrome/browser/resources/chromeos/login/offline_gaia.js b/chrome/browser/resources/chromeos/login/offline_gaia.js ---- a/chrome/browser/resources/chromeos/login/offline_gaia.js -+++ b/chrome/browser/resources/chromeos/login/offline_gaia.js -@@ -3,7 +3,7 @@ - // found in the LICENSE file. +diff --git a/chrome/browser/resources/chromeos/login/offline_login.js b/chrome/browser/resources/chromeos/login/offline_login.js +--- a/chrome/browser/resources/chromeos/login/offline_login.js ++++ b/chrome/browser/resources/chromeos/login/offline_login.js +@@ -4,7 +4,7 @@ - { -- const DEFAULT_EMAIL_DOMAIN = '@gmail.com'; -+ const DEFAULT_EMAIL_DOMAIN = '@9ma1l.qjz9zk'; - const INPUT_EMAIL_PATTERN = '^[a-zA-Z0-9.!#$%&\'*+=?^_`{|}~-]+(@[^\\s@]+)?$'; + (function() { - /** @enum */ -diff --git a/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js b/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js ---- a/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js -+++ b/chrome/browser/resources/chromeos/login/screen_arc_terms_of_service.js -@@ -22,7 +22,7 @@ login.createScreen('ArcTermsOfServiceScreen', 'arc-tos', function() { +-const DEFAULT_EMAIL_DOMAIN = '@gmail.com'; ++const DEFAULT_EMAIL_DOMAIN = '@9ma1l.qjz9zk'; + const INPUT_EMAIL_PATTERN = '^[a-zA-Z0-9.!#$%&\'*+=?^_`{|}~-]+(@[^\\s@]+)?$'; - /* The hostname of the url where the terms of service will be fetched. - * Overwritten by tests to load terms of service from local test server.*/ -- this.termsOfServiceHostName_ = 'https://play.google.com'; -+ this.termsOfServiceHostName_ = 'https://play.9oo91e.qjz9zk'; - if (loadTimeData.valueExists('arcTosHostNameForTesting')) { - this.setTosHostNameForTesting_( - loadTimeData.getString('arcTosHostNameForTesting')); + Polymer({ diff --git a/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js b/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js --- a/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js +++ b/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js @@ -6712,22 +6647,6 @@ diff --git a/chrome/browser/resources/chromeos/zip_archiver/unpacker-test/cpp/Ma .PHONY: tests_run tests_run: check_for_chrome all $(TEST_PAGE) $(RUN_PY) -C $(CURDIR) -P $(TEST_PAGE_CONFIG) \ -diff --git a/chrome/browser/resources/cloud_print_app/manifest.json b/chrome/browser/resources/cloud_print_app/manifest.json ---- a/chrome/browser/resources/cloud_print_app/manifest.json -+++ b/chrome/browser/resources/cloud_print_app/manifest.json -@@ -7,10 +7,10 @@ - }, - "app": { - "launch": { -- "web_url": "https://www.google.com/cloudprint" -+ "web_url": "https://www.9oo91e.qjz9zk/cloudprint" - }, - "urls": [ -- "https://www.google.com/cloudprint/enable_chrome_connector" -+ "https://www.9oo91e.qjz9zk/cloudprint/enable_chrome_connector" - ] - }, - "permissions": [ diff --git a/chrome/browser/resources/cryptotoken/enroller.js b/chrome/browser/resources/cryptotoken/enroller.js --- a/chrome/browser/resources/cryptotoken/enroller.js +++ b/chrome/browser/resources/cryptotoken/enroller.js @@ -6743,17 +6662,19 @@ diff --git a/chrome/browser/resources/cryptotoken/enroller.js b/chrome/browser/r diff --git a/chrome/browser/resources/default_apps/external_extensions.json b/chrome/browser/resources/default_apps/external_extensions.json --- a/chrome/browser/resources/default_apps/external_extensions.json +++ b/chrome/browser/resources/default_apps/external_extensions.json -@@ -24,15 +24,15 @@ +@@ -27,17 +27,17 @@ }, // Google Sheets "aapocclcgogkmnckokdopfmhonfmgoek" : { -- "external_update_url": "https://clients2.google.com/service/update2/crx" -+ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx" +- "external_update_url": "https://clients2.google.com/service/update2/crx", ++ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx", + "web_app_migration_flag": "MigrateDefaultChromeAppToWebAppsGSuite" }, // Google Slides "felcaaldnbdncclmgdcncolpebgiejap" : { -- "external_update_url": "https://clients2.google.com/service/update2/crx" -+ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx" +- "external_update_url": "https://clients2.google.com/service/update2/crx", ++ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx", + "web_app_migration_flag": "MigrateDefaultChromeAppToWebAppsGSuite" }, // Drive extension "ghbmnnjooekpmoecnnnilnnbdlolhkhi" : { @@ -6782,7 +6703,7 @@ diff --git a/chrome/browser/resources/downloads/icons.html b/chrome/browser/reso @@ -6827,7 +6748,7 @@ diff --git a/chrome/browser/resources/feedback/js/feedback_util.js b/chrome/brow diff --git a/chrome/browser/resources/gaia_auth_host/authenticator.js b/chrome/browser/resources/gaia_auth_host/authenticator.js --- a/chrome/browser/resources/gaia_auth_host/authenticator.js +++ b/chrome/browser/resources/gaia_auth_host/authenticator.js -@@ -617,7 +617,7 @@ cr.define('cr.login', function() { +@@ -664,7 +664,7 @@ cr.define('cr.login', function() { url = appendParam( url, 'continue', data.gaiaUrl + 'programmatic_auth_chromeos?hl=' + data.hl + @@ -6836,7 +6757,7 @@ diff --git a/chrome/browser/resources/gaia_auth_host/authenticator.js b/chrome/b 'client_id=' + encodeURIComponent(data.clientId) + '&access_type=offline'); -@@ -942,7 +942,7 @@ cr.define('cr.login', function() { +@@ -999,7 +999,7 @@ cr.define('cr.login', function() { // TODO(https://crbug.com/837107): remove this once API is fully // stabilized. // @example.com is used in tests. @@ -6864,11 +6785,11 @@ diff --git a/chrome/browser/resources/hangout_services/manifest.json b/chrome/br "manifest_version": 2, "externally_connectable": { "matches": [ -- "https://*.google.com/*", -+ "https://*.9oo91e.qjz9zk/*", - // For tests. - "*://localhost/*" +- "https://*.google.com/*" ++ "https://*.9oo91e.qjz9zk/*" ] + }, + "background": { diff --git a/chrome/browser/resources/hats/hats.html b/chrome/browser/resources/hats/hats.html --- a/chrome/browser/resources/hats/hats.html +++ b/chrome/browser/resources/hats/hats.html @@ -7037,56 +6958,10 @@ diff --git a/chrome/browser/resources/media/webrtc_logs.js b/chrome/browser/reso for (const param in params) { href = appendParam(href, param, params[param]); } -diff --git a/chrome/browser/resources/media_router/extension/manifest.yaml b/chrome/browser/resources/media_router/extension/manifest.yaml ---- a/chrome/browser/resources/media_router/extension/manifest.yaml -+++ b/chrome/browser/resources/media_router/extension/manifest.yaml -@@ -38,14 +38,14 @@ - }, - - # Google Feedback requires: -- # script-src: https://feedback.googleusercontent.com https://www.google.com -- # https://www.gstatic.com/feedback -- # child-src: https://www.google.com -+ # script-src: https://feedback.9oo91eusercontent.qjz9zk https://www.9oo91e.qjz9zk -+ # https://www.95tat1c.qjz9zk/feedback -+ # child-src: https://www.9oo91e.qjz9zk - # - # Webview elements are implemented as a custom elements that loads - # dynamic plugin data. Without an "object-src 'self'" permission in the CSP, - # webview elements fail to attach to extension pages (crbug.com/509854). -- "content_security_policy": "default-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; script-src 'self' https://feedback.googleusercontent.com https://www.google.com https://www.gstatic.com; child-src https://www.google.com; connect-src 'self' http://*:* https://*:*; font-src https://fonts.gstatic.com; object-src 'self';", -+ "content_security_policy": "default-src 'self'; style-src 'self' 'unsafe-inline' https://f0ntz.9oo91e8p1.qjz9zk; script-src 'self' https://feedback.9oo91eusercontent.qjz9zk https://www.9oo91e.qjz9zk https://www.95tat1c.qjz9zk; child-src https://www.9oo91e.qjz9zk; connect-src 'self' http://*:* https://*:*; font-src https://fonts.95tat1c.qjz9zk; object-src 'self';", - - # Setting the public key fixes the extension id to: - # enhhojjnijigcajfphajepfemndkmdlo -diff --git a/chrome/browser/resources/nearby_share/icons.html b/chrome/browser/resources/nearby_share/icons.html ---- a/chrome/browser/resources/nearby_share/icons.html -+++ b/chrome/browser/resources/nearby_share/icons.html -@@ -6,7 +6,7 @@ - - - - -diff --git a/chrome/browser/resources/nearby_share/nearby_discovery_page.html b/chrome/browser/resources/nearby_share/nearby_discovery_page.html ---- a/chrome/browser/resources/nearby_share/nearby_discovery_page.html -+++ b/chrome/browser/resources/nearby_share/nearby_discovery_page.html -@@ -118,7 +118,7 @@ - - -
-+ inner-h-t-m-l="[[getAriaLabelledHelpText_('https://9oo91e.qjz9zk')]]"> -
- - +@@ -44,7 +44,7 @@ + + + + diff --git a/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html b/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html --- a/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html +++ b/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html @@ -7118,19 +7002,7 @@ diff --git a/chrome/browser/resources/nearby_share/shared/nearby_shared_share_ty + Keep these in sorted order by id="". See also http://goo.gl.qjz9zk/Y1OdAq --> - -diff --git a/chrome/browser/resources/nearby_share/shared/nearby_visibility_page.js b/chrome/browser/resources/nearby_share/shared/nearby_visibility_page.js ---- a/chrome/browser/resources/nearby_share/shared/nearby_visibility_page.js -+++ b/chrome/browser/resources/nearby_share/shared/nearby_visibility_page.js -@@ -40,7 +40,7 @@ Polymer({ - /** @private */ - onManageContacts_() { - // TODO(vecore): this is not a final link -- window.open('https://contacts.google.com', '_blank'); -+ window.open('https://contacts.9oo91e.qjz9zk', '_blank'); - }, - - }); + diff --git a/chrome/browser/resources/net_internals/domain_security_policy_view.html b/chrome/browser/resources/net_internals/domain_security_policy_view.html --- a/chrome/browser/resources/net_internals/domain_security_policy_view.html +++ b/chrome/browser/resources/net_internals/domain_security_policy_view.html @@ -7245,7 +7117,7 @@ diff --git a/chrome/browser/resources/pdf/elements/icons.html b/chrome/browser/r @@ -7306,12 +7178,12 @@ diff --git a/chrome/browser/resources/plugin_metadata/plugins_win.json b/chrome/ diff --git a/chrome/browser/resources/print_preview/ui/icons.html b/chrome/browser/resources/print_preview/ui/icons.html --- a/chrome/browser/resources/print_preview/ui/icons.html +++ b/chrome/browser/resources/print_preview/ui/icons.html -@@ -38,7 +38,7 @@ +@@ -50,7 +50,7 @@ @@ -7344,7 +7216,7 @@ diff --git a/chrome/browser/resources/proxy_config.html b/chrome/browser/resourc diff --git a/chrome/browser/resources/settings/a11y_page/a11y_page.js b/chrome/browser/resources/settings/a11y_page/a11y_page.js --- a/chrome/browser/resources/settings/a11y_page/a11y_page.js +++ b/chrome/browser/resources/settings/a11y_page/a11y_page.js -@@ -219,7 +219,7 @@ Polymer({ +@@ -226,7 +226,7 @@ Polymer({ /** private */ onMoreFeaturesLinkClick_() { window.open( @@ -7436,22 +7308,10 @@ diff --git a/chrome/browser/resources/settings/chromeos/device_page/stylus.js b/ 'collection/promotion_30023cb_stylus_apps'; Polymer({ -diff --git a/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_high_visibility_page.html b/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_high_visibility_page.html ---- a/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_high_visibility_page.html -+++ b/chrome/browser/resources/settings/chromeos/nearby_share_page/nearby_share_high_visibility_page.html -@@ -59,7 +59,7 @@ - - -+ link-url="https://9oo91e.qjz9zk"> - - - diff --git a/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.html b/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.html --- a/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.html +++ b/chrome/browser/resources/settings/chromeos/os_a11y_page/manage_a11y_page.html -@@ -334,7 +334,7 @@ +@@ -343,7 +343,7 @@ if="[[shouldShowAdditionalFeaturesLink_(isGuest_, isKioskModeActive_)]]"> diff --git a/chrome/browser/resources/settings/chromeos/os_icons.html b/chrome/browser/resources/settings/chromeos/os_icons.html --- a/chrome/browser/resources/settings/chromeos/os_icons.html +++ b/chrome/browser/resources/settings/chromeos/os_icons.html -@@ -75,7 +75,7 @@ These icons may appear blurry. +@@ -88,7 +88,7 @@ These icons may appear blurry. @@ -7523,12 +7383,12 @@ diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/users_add diff --git a/chrome/browser/resources/settings/icons.html b/chrome/browser/resources/settings/icons.html --- a/chrome/browser/resources/settings/icons.html +++ b/chrome/browser/resources/settings/icons.html -@@ -71,7 +71,7 @@ NOTE: Chrome OS icons go in ./chromeos/os_icons.html. +@@ -72,7 +72,7 @@ NOTE: Chrome OS icons go in ./chromeos/os_icons.html. @@ -7593,10 +7453,25 @@ diff --git a/chrome/browser/safe_browsing/chrome_cleaner/srt_field_trial_win.cc "/softwareremovaltool/win/x64/stable/chrome_cleanup_tool.exe"; } // namespace +diff --git a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.cc b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.cc +--- a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.cc ++++ b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service.cc +@@ -87,9 +87,9 @@ GURL ChromeEnterpriseRealTimeUrlLookupService::GetRealTimeLookupUrl() const { + bool is_ga_endpoint_enabled = + base::FeatureList::IsEnabled(kRealTimeUrlLookupEnterpriseGaEndpoint); + std::string endpoint = is_ga_endpoint_enabled +- ? "https://enterprise-safebrowsing.googleapis.com/" ++ ? "https://enterprise-safebrowsing.9oo91eapis.qjz9zk/" + "safebrowsing/clientreport/realtime" +- : "https://safebrowsing.google.com/safebrowsing/" ++ : "https://safebrowsing.9oo91e.qjz9zk/safebrowsing/" + "clientreport/realtime"; + return GURL(endpoint); + } diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc --- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc -@@ -892,7 +892,7 @@ GURL ChromePasswordProtectionService::GetDefaultChangePasswordURL() const { +@@ -888,7 +888,7 @@ GURL ChromePasswordProtectionService::GetDefaultChangePasswordURL() const { std::string account_email = account_info.email; // This page will prompt for re-auth and then will prompt for a new password. std::string account_url = @@ -7605,7 +7480,7 @@ diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc "password?utm_source=Google&utm_campaign=PhishGuard"; url::RawCanonOutputT percent_encoded_email; url::RawCanonOutputT percent_encoded_account_url; -@@ -901,7 +901,7 @@ GURL ChromePasswordProtectionService::GetDefaultChangePasswordURL() const { +@@ -897,7 +897,7 @@ GURL ChromePasswordProtectionService::GetDefaultChangePasswordURL() const { url::EncodeURIComponent(account_url.c_str(), account_url.length(), &percent_encoded_account_url); GURL change_password_url = GURL(base::StringPrintf( @@ -7614,18 +7489,6 @@ diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc "AccountChooser?Email=%s&continue=%s", std::string(percent_encoded_email.data(), percent_encoded_email.length()) .c_str(), -diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chrome/browser/safe_browsing/client_side_detection_service.cc ---- a/chrome/browser/safe_browsing/client_side_detection_service.cc -+++ b/chrome/browser/safe_browsing/client_side_detection_service.cc -@@ -57,7 +57,7 @@ const int ClientSideDetectionService::kNegativeCacheIntervalDays = 1; - const int ClientSideDetectionService::kPositiveCacheIntervalMinutes = 30; - - const char ClientSideDetectionService::kClientReportPhishingUrl[] = -- "https://sb-ssl.google.com/safebrowsing/clientreport/phishing"; -+ "https://sb-ssl.9oo91e.qjz9zk/safebrowsing/clientreport/phishing"; - - struct ClientSideDetectionService::ClientPhishingReportInfo { - std::unique_ptr loader; diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc --- a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc @@ -7645,7 +7508,7 @@ diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_s diff --git a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc --- a/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc +++ b/chrome/browser/safe_browsing/download_protection/check_client_download_request_base.cc -@@ -591,14 +591,14 @@ void CheckClientDownloadRequestBase::SendRequest() { +@@ -467,14 +467,14 @@ void CheckClientDownloadRequestBase::SendRequest() { "This request is triggered when a download is about to complete, " "the download is not whitelisted, and its file extension is " "supported by download protection service (e.g. executables, " @@ -7812,7 +7675,7 @@ diff --git a/chrome/browser/search/background/ntp_backgrounds.cc b/chrome/browse diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc --- a/chrome/browser/search/local_ntp_source.cc +++ b/chrome/browser/search/local_ntp_source.cc -@@ -97,7 +97,7 @@ const int kLocalResource = -1; +@@ -96,7 +96,7 @@ const int kLocalResource = -1; const char kConfigDataFilename[] = "config.js"; const char kDoodleScriptFilename[] = "doodle.js"; @@ -7821,7 +7684,7 @@ diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/l const char kMainHtmlFilename[] = "local-ntp.html"; const char kNtpBackgroundCollectionScriptFilename[] = "ntp-background-collections.js"; -@@ -961,7 +961,7 @@ void LocalNtpSource::StartDataRequest( +@@ -960,7 +960,7 @@ void LocalNtpSource::StartDataRequest( base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); command_line->AppendSwitchASCII( search_provider_logos::switches::kGoogleDoodleUrl, @@ -7830,7 +7693,7 @@ diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/l force_doodle_param + ".json"); } -@@ -1133,7 +1133,7 @@ std::string LocalNtpSource::GetContentSecurityPolicyForNTP() { +@@ -1132,7 +1132,7 @@ std::string LocalNtpSource::GetContentSecurityPolicyForNTP() { // switcher and the notifications dropdown from the One Google Bar, and/or // the iframe for interactive Doodles. std::string child_src_csp = base::StringPrintf( @@ -7854,7 +7717,7 @@ diff --git a/chrome/browser/search/ntp_icon_source.cc b/chrome/browser/search/nt diff --git a/chrome/browser/search_engines/template_url_service_test_util.cc b/chrome/browser/search_engines/template_url_service_test_util.cc --- a/chrome/browser/search_engines/template_url_service_test_util.cc +++ b/chrome/browser/search_engines/template_url_service_test_util.cc -@@ -130,7 +130,7 @@ void TemplateURLServiceTestUtil::ResetModel(bool verify_load) { +@@ -158,7 +158,7 @@ void TemplateURLServiceTestUtil::ResetModel(bool verify_load) { ClearModel(); model_.reset(new TemplateURLService( profile()->GetPrefs(), @@ -7928,7 +7791,7 @@ diff --git a/chrome/browser/sharing/webrtc/ice_config_fetcher.cc b/chrome/browse diff --git a/chrome/browser/signin/signin_ui_util.cc b/chrome/browser/signin/signin_ui_util.cc --- a/chrome/browser/signin/signin_ui_util.cc +++ b/chrome/browser/signin/signin_ui_util.cc -@@ -192,7 +192,7 @@ void InitializePrefsForProfile(Profile* profile) { +@@ -193,7 +193,7 @@ void InitializePrefsForProfile(Profile* profile) { void ShowSigninErrorLearnMorePage(Profile* profile) { static const char kSigninErrorLearnMoreUrl[] = @@ -7961,6 +7824,18 @@ diff --git a/chrome/browser/ssl/sct_reporting_service.cc b/chrome/browser/ssl/sc "chrome-sct-auditing"; // static +diff --git a/chrome/browser/subresource_redirect/subresource_redirect_util.cc b/chrome/browser/subresource_redirect/subresource_redirect_util.cc +--- a/chrome/browser/subresource_redirect/subresource_redirect_util.cc ++++ b/chrome/browser/subresource_redirect/subresource_redirect_util.cc +@@ -100,7 +100,7 @@ GURL GetRobotsServerURL(const url::Origin& origin) { + auto lite_page_robots_origin = base::GetFieldTrialParamValueByFeature( + blink::features::kSubresourceRedirect, "lite_page_robots_origin"); + GURL lite_page_robots_url(lite_page_robots_origin.empty() +- ? "https://litepages.googlezip.net/" ++ ? "https://litepages.9oo91e21p.qjz9zk/" + : lite_page_robots_origin); + + std::string query_str = diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc --- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc +++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc @@ -8028,7 +7903,7 @@ diff --git a/chrome/browser/supervised_user/supervised_user_error_page/resources diff --git a/chrome/browser/supervised_user/supervised_user_service.cc b/chrome/browser/supervised_user/supervised_user_service.cc --- a/chrome/browser/supervised_user/supervised_user_service.cc +++ b/chrome/browser/supervised_user/supervised_user_service.cc -@@ -86,7 +86,7 @@ namespace { +@@ -85,7 +85,7 @@ namespace { // The URL from which to download a host denylist if no local one exists yet. const char kDenylistURL[] = @@ -8088,7 +7963,7 @@ diff --git a/chrome/browser/supervised_user/supervised_user_url_filter.cc b/chro diff --git a/chrome/browser/tracing/crash_service_uploader.cc b/chrome/browser/tracing/crash_service_uploader.cc --- a/chrome/browser/tracing/crash_service_uploader.cc +++ b/chrome/browser/tracing/crash_service_uploader.cc -@@ -40,7 +40,7 @@ using std::string; +@@ -41,7 +41,7 @@ using std::string; namespace { @@ -8109,7 +7984,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro CHAR-LIMIT guidelines: Certain strings need character limits to prevent a long translation from breaking the UI. -@@ -834,7 +834,7 @@ For example, some websites may respond to this request by showing you ads that a +@@ -846,7 +846,7 @@ For example, some websites may respond to this request by showing you ads that a Choose another provider @@ -8118,7 +7993,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro This setting is disabled on managed browsers -@@ -864,7 +864,7 @@ For example, some websites may respond to this request by showing you ads that a +@@ -876,7 +876,7 @@ For example, some websites may respond to this request by showing you ads that a The selected data has been removed from Chrome and your synced devices. @@ -8127,7 +8002,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Cached images and files -@@ -898,10 +898,10 @@ Your Google account may have other forms of browsing history like searches and a +@@ -910,10 +910,10 @@ Your Google account may have other forms of browsing history like searches and a Record history even in incognito mode @@ -8140,7 +8015,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Saved passwords -@@ -961,7 +961,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -973,7 +973,7 @@ Your Google account may have other forms of browsing history like searches and a Basic @@ -8149,7 +8024,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Blocked site -@@ -1353,7 +1353,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1359,7 +1359,7 @@ Your Google account may have other forms of browsing history like searches and a In Lite mode, Chrome loads pages faster and uses up to 60 percent less data. To optimize the pages that you visit, Chrome sends your web traffic to Google. <link>Learn more</link> @@ -8158,7 +8033,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Turn on Lite mode -@@ -1522,10 +1522,10 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1528,10 +1528,10 @@ Your Google account may have other forms of browsing history like searches and a Waiting for details of parents. @@ -8171,12 +8046,12 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Content -@@ -1584,22 +1584,22 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1590,22 +1590,22 @@ Your Google account may have other forms of browsing history like searches and a Google Terms of Service -- https://policies.google.com/terms -+ https://policies.9oo91e.qjz9zk/terms +- https://policies.google.com/terms/embedded ++ https://policies.9oo91e.qjz9zk/terms/embedded Chrome & Chrome OS Additional Terms of Service @@ -8198,7 +8073,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro -@@ -1616,7 +1616,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1622,7 +1622,7 @@ Your Google account may have other forms of browsing history like searches and a Also clear your Chrome data from this device @@ -8207,7 +8082,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Contacting Google. This may take a minute… -@@ -1764,7 +1764,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

@@ -8216,7 +8091,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro <link>Get help</link> while scanning for devices… -@@ -1809,7 +1809,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

@@ -8225,7 +8100,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Unknown or unsupported device (%1$sA1:B2:C3:D4:E5:F6) -@@ -2268,7 +2268,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

@@ -8234,7 +8109,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro You are viewing a preview of this page -@@ -3581,7 +3581,7 @@ Data from your Incognito session will only be cleared from Chrome when you @@ -8243,7 +8118,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro No compatible devices found -@@ -3620,7 +3620,7 @@ Data from your Incognito session will only be cleared from Chrome when you @@ -8252,7 +8127,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Got it -@@ -3875,7 +3875,7 @@ Data from your Incognito session will only be cleared from Chrome when you %1$sTanya's Pixel 2... @@ -8300,7 +8175,7 @@ diff --git a/chrome/browser/ui/app_list/search/files/item_suggest_cache.h b/chro diff --git a/chrome/browser/ui/app_list/search/omnibox_provider.cc b/chrome/browser/ui/app_list/search/omnibox_provider.cc --- a/chrome/browser/ui/app_list/search/omnibox_provider.cc +++ b/chrome/browser/ui/app_list/search/omnibox_provider.cc -@@ -24,7 +24,7 @@ namespace { +@@ -25,7 +25,7 @@ namespace { bool IsDriveUrl(const GURL& url) { // Returns true if the |url| points to a Drive Web host. const std::string& host = url.host(); @@ -8344,7 +8219,7 @@ diff --git a/chrome/browser/ui/ash/assistant/assistant_test_mixin.cc b/chrome/br -constexpr const char kTestUser[] = "test_user@gmail.com"; +constexpr const char kTestUser[] = "test_user@9ma1l.qjz9zk"; - constexpr const char kTestUserGaiaId[] = "test_user@gaia.id"; + constexpr const char kTestUserGaiaId[] = "test_user_gaia_id"; LoginManagerMixin::TestUserInfo GetTestUserInfo() { diff --git a/chrome/browser/ui/ash/assistant/conversation_starters_client_impl.cc b/chrome/browser/ui/ash/assistant/conversation_starters_client_impl.cc @@ -8362,7 +8237,7 @@ diff --git a/chrome/browser/ui/ash/assistant/conversation_starters_client_impl.c diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc --- a/chrome/browser/ui/ash/chrome_shell_delegate.cc +++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc -@@ -43,7 +43,7 @@ +@@ -46,7 +46,7 @@ namespace { const char kKeyboardShortcutHelpPageUrl[] = @@ -8484,8 +8359,8 @@ diff --git a/chrome/browser/ui/hats/hats_survey_status_checker.cc b/chrome/brows + GURL cookie_url = GURL("https://www.9oo91e.qjz9zk"); auto survey_cookie = net::CanonicalCookie::Create( cookie_url, "PAIDCONTENT=0", base::Time::Now(), base::nullopt); - network::mojom::CookieManager* cookie_manager = -@@ -124,7 +124,7 @@ base::OnceClosure HatsSurveyStatusChecker::CreateTimeoutCallbackForTesting() { + DCHECK(survey_cookie); +@@ -125,7 +125,7 @@ base::OnceClosure HatsSurveyStatusChecker::CreateTimeoutCallbackForTesting() { HatsSurveyStatusChecker::HatsSurveyStatusChecker() = default; std::string HatsSurveyStatusChecker::HatsSurveyURLWithoutId() { @@ -8536,29 +8411,10 @@ diff --git a/chrome/browser/ui/toolbar/media_router_contextual_menu.cc b/chrome/ switch (command_id) { case IDC_MEDIA_ROUTER_ABOUT: -diff --git a/chrome/browser/ui/views/accessibility/invert_bubble_view.cc b/chrome/browser/ui/views/accessibility/invert_bubble_view.cc ---- a/chrome/browser/ui/views/accessibility/invert_bubble_view.cc -+++ b/chrome/browser/ui/views/accessibility/invert_bubble_view.cc -@@ -36,12 +36,12 @@ - namespace { - - constexpr char kHighContrastExtensionUrl[] = -- "https://chrome.google.com/webstore/detail/" -+ "https://chrome.9oo91e.qjz9zk/webstore/detail/" - "djcfdncoelnlbldjfhinnjlhdjlikmph"; - constexpr char kDarkThemeSearchUrl[] = -- "https://chrome.google.com/webstore/category/collection/dark_themes"; -+ "https://chrome.9oo91e.qjz9zk/webstore/category/collection/dark_themes"; - constexpr char kLearnMoreUrl[] = -- "https://groups.google.com/a/googleproductforums.com/d/topic/chrome/" -+ "https://groups.9oo91e.qjz9zk/a/9oo91eproductforums.qjz9zk/d/topic/chrome/" - "Xrco2HsXS-8/discussion"; - - class InvertBubbleView : public views::BubbleDialogDelegateView { diff --git a/chrome/browser/ui/views/apps/app_dialog/app_uninstall_dialog_view.cc b/chrome/browser/ui/views/apps/app_dialog/app_uninstall_dialog_view.cc --- a/chrome/browser/ui/views/apps/app_dialog/app_uninstall_dialog_view.cc +++ b/chrome/browser/ui/views/apps/app_dialog/app_uninstall_dialog_view.cc -@@ -227,7 +227,7 @@ void AppUninstallDialogView::InitializeCheckbox(const GURL& app_start_url) { +@@ -229,7 +229,7 @@ void AppUninstallDialogView::InitializeCheckbox(const GURL& app_start_url) { [](Profile* profile) { NavigateParams params( profile, @@ -8570,7 +8426,7 @@ diff --git a/chrome/browser/ui/views/apps/app_dialog/app_uninstall_dialog_view.c diff --git a/chrome/browser/ui/views/hats/hats_next_web_dialog.cc b/chrome/browser/ui/views/hats/hats_next_web_dialog.cc --- a/chrome/browser/ui/views/hats/hats_next_web_dialog.cc +++ b/chrome/browser/ui/views/hats/hats_next_web_dialog.cc -@@ -119,7 +119,7 @@ HatsNextWebDialog::HatsNextWebDialog(Browser* browser, +@@ -120,7 +120,7 @@ HatsNextWebDialog::HatsNextWebDialog(Browser* browser, : HatsNextWebDialog( browser, trigger_id, @@ -8608,7 +8464,7 @@ diff --git a/chrome/browser/ui/views/hats/hats_web_dialog.cc b/chrome/browser/ui diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc --- a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc +++ b/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chromeos.cc -@@ -239,7 +239,7 @@ class IntentPickerBubbleViewBrowserTestChromeOS : public InProcessBrowserTest { +@@ -241,7 +241,7 @@ class IntentPickerBubbleViewBrowserTestChromeOS : public InProcessBrowserTest { // Test that the intent picker bubble will pop out for ARC apps. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, BubblePopOut) { @@ -8617,7 +8473,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -279,7 +279,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -281,7 +281,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // bubble. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, OutOfScopeDoesNotShowBubble) { @@ -8626,7 +8482,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom GURL out_of_scope_url("https://www.example.com/"); std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); -@@ -304,7 +304,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -306,7 +306,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // candidates. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, PWAOnlyShowBubble) { @@ -8635,7 +8491,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = InstallWebApp(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -345,7 +345,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -346,7 +346,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // Test that intent picker bubble will not pop up for non-link navigation. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, NotLinkDoesNotShowBubble) { @@ -8644,7 +8500,7 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); -@@ -384,7 +384,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, +@@ -385,7 +385,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, // apps. IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, DismissBubble) { @@ -8653,6 +8509,27 @@ diff --git a/chrome/browser/ui/views/intent_picker_bubble_view_browsertest_chrom std::string app_name = "test_name"; auto app_id = AddArcAppWithIntentFilter(app_name, test_url); PageActionIconView* intent_picker_view = GetIntentPickerIcon(); +@@ -542,7 +542,7 @@ IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, + // Test that reload a page after app installation will show intent picker. + IN_PROC_BROWSER_TEST_F(IntentPickerBubbleViewBrowserTestChromeOS, + ReloadAfterInstall) { +- GURL test_url("https://www.google.com/"); ++ GURL test_url("https://www.9oo91e.qjz9zk/"); + PageActionIconView* intent_picker_view = GetIntentPickerIcon(); + + chrome::NewTab(browser()); +diff --git a/chrome/browser/ui/views/media_router/cast_dialog_sink_button.cc b/chrome/browser/ui/views/media_router/cast_dialog_sink_button.cc +--- a/chrome/browser/ui/views/media_router/cast_dialog_sink_button.cc ++++ b/chrome/browser/ui/views/media_router/cast_dialog_sink_button.cc +@@ -130,7 +130,7 @@ base::Optional FindTabWithUrlPrefix(TabStripModel* tabs, + // showing the start page of Google Meet. + void ShowMeetTab(Profile* profile, + const base::Optional& meeting_id) { +- const GURL origin("https://meet.google.com"); ++ const GURL origin("https://meet.9oo91e.qjz9zk"); + const std::string path = meeting_id ? "/" + *meeting_id : std::string(); + + const auto& browsers = *BrowserList::GetInstance(); diff --git a/chrome/browser/ui/views/network_profile_bubble_view.cc b/chrome/browser/ui/views/network_profile_bubble_view.cc --- a/chrome/browser/ui/views/network_profile_bubble_view.cc +++ b/chrome/browser/ui/views/network_profile_bubble_view.cc @@ -8683,10 +8560,10 @@ diff --git a/chrome/browser/ui/views/plugin_vm/plugin_vm_installer_view.cc b/chr @@ -229,7 +229,7 @@ void PluginVmInstallerView::OnStateUpdated(InstallingState new_state) { void PluginVmInstallerView::OnLinkClicked() { - NavigateParams params( -- profile_, GURL("https://support.google.com/chromebook/?p=pluginvm"), -+ profile_, GURL("https://support.9oo91e.qjz9zk/chromebook/?p=pluginvm"), - ui::PAGE_TRANSITION_LINK); + NavigateParams params(profile_, +- GURL("https://support.google.com/chrome/a/?p=pluginvm"), ++ GURL("https://support.9oo91e.qjz9zk/chrome/a/?p=pluginvm"), + ui::PAGE_TRANSITION_LINK); params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; Navigate(¶ms); diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.cc b/chrome/browser/ui/views/session_crashed_bubble_view.cc @@ -8704,7 +8581,7 @@ diff --git a/chrome/browser/ui/views/session_crashed_bubble_view.cc b/chrome/bro diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc --- a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc +++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc -@@ -261,7 +261,7 @@ void ProfileSigninConfirmationDialogViews::ContinueSigninButtonPressed() { +@@ -357,7 +357,7 @@ void ProfileSigninConfirmationDialogViews::ContinueSigninButtonPressed() { void ProfileSigninConfirmationDialogViews::LearnMoreClicked( const ui::Event& event) { NavigateParams params( @@ -8773,12 +8650,12 @@ diff --git a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ut diff --git a/chrome/browser/ui/webui/chromeos/edu_coexistence_login_handler_chromeos.cc b/chrome/browser/ui/webui/chromeos/edu_coexistence_login_handler_chromeos.cc --- a/chrome/browser/ui/webui/chromeos/edu_coexistence_login_handler_chromeos.cc +++ b/chrome/browser/ui/webui/chromeos/edu_coexistence_login_handler_chromeos.cc -@@ -50,7 +50,7 @@ namespace { +@@ -52,7 +52,7 @@ namespace { constexpr char kEduCoexistenceLoginURLSwitch[] = "edu-coexistence-url"; constexpr char kEduCoexistenceLoginDefaultURL[] = -- "https://families.google.com/supervision/coexistence"; -+ "https://families.9oo91e.qjz9zk/supervision/coexistence"; +- "https://families.google.com/supervision/coexistence/intro"; ++ "https://families.9oo91e.qjz9zk/supervision/coexistence/intro"; constexpr char kOobe[] = "oobe"; constexpr char kInSession[] = "in_session"; constexpr char kOnErrorWebUIListener[] = "show-error-screen"; @@ -8794,10 +8671,10 @@ diff --git a/chrome/browser/ui/webui/interstitials/interstitial_ui.cc b/chrome/b // Not initialized to a default value, since non-empty wifi_ssid is // considered a wifi connection, even if is_wifi_connection is false. std::string wifi_ssid; -diff --git a/chrome/browser/ui/webui/management_ui_handler.cc b/chrome/browser/ui/webui/management_ui_handler.cc ---- a/chrome/browser/ui/webui/management_ui_handler.cc -+++ b/chrome/browser/ui/webui/management_ui_handler.cc -@@ -338,7 +338,7 @@ std::string GetAccountDomain(Profile* profile) { +diff --git a/chrome/browser/ui/webui/management/management_ui_handler.cc b/chrome/browser/ui/webui/management/management_ui_handler.cc +--- a/chrome/browser/ui/webui/management/management_ui_handler.cc ++++ b/chrome/browser/ui/webui/management/management_ui_handler.cc +@@ -339,7 +339,7 @@ std::string GetAccountDomain(Profile* profile) { const std::string domain = gaia::ExtractDomainName(std::move(username)); @@ -8851,7 +8728,7 @@ diff --git a/chrome/browser/ui/webui/new_tab_page/foo/foo_handler.cc b/chrome/br diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc -@@ -208,11 +208,11 @@ content::WebUIDataSource* CreateNewTabPageUiHtmlSource(Profile* profile) { +@@ -234,11 +234,11 @@ content::WebUIDataSource* CreateNewTabPageUiHtmlSource(Profile* profile) { source->AddString("modulesTasksInfo1", l10n_util::GetStringFUTF16( IDS_NTP_MODULES_SHOPPING_TASKS_INFO_1, @@ -8868,7 +8745,7 @@ diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/br diff --git a/chrome/browser/ui/webui/ntp/new_tab_ui.cc b/chrome/browser/ui/webui/ntp/new_tab_ui.cc --- a/chrome/browser/ui/webui/ntp/new_tab_ui.cc +++ b/chrome/browser/ui/webui/ntp/new_tab_ui.cc -@@ -199,7 +199,7 @@ std::string NewTabUI::NewTabHTMLSource::GetContentSecurityPolicy( +@@ -200,7 +200,7 @@ std::string NewTabUI::NewTabHTMLSource::GetContentSecurityPolicy( if (directive == network::mojom::CSPDirectiveName::ScriptSrc) { // 'unsafe-inline' and google resources are added to script-src. return "script-src chrome://resources 'self' 'unsafe-eval' 'unsafe-inline' " @@ -8880,10 +8757,10 @@ diff --git a/chrome/browser/ui/webui/ntp/new_tab_ui.cc b/chrome/browser/ui/webui diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc --- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc +++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc -@@ -78,22 +78,22 @@ namespace { +@@ -81,22 +81,22 @@ namespace { // The URL for the the Learn More page shown on incognito new tab. const char kLearnMoreIncognitoUrl[] = - #if defined(OS_CHROMEOS) + #if BUILDFLAG(IS_CHROMEOS_ASH) - "https://support.google.com/chromebook/?p=incognito"; + "https://support.9oo91e.qjz9zk/chromebook/?p=incognito"; #else @@ -8893,7 +8770,7 @@ diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chrome/browser/ // The URL for the Learn More page shown on guest session new tab. const char kLearnMoreGuestSessionUrl[] = - #if defined(OS_CHROMEOS) + #if BUILDFLAG(IS_CHROMEOS_ASH) - "https://support.google.com/chromebook/?p=chromebook_guest"; + "https://support.9oo91e.qjz9zk/chromebook/?p=chromebook_guest"; #else @@ -8923,10 +8800,10 @@ diff --git a/chrome/browser/ui/webui/settings/chromeos/parental_controls_handler diff --git a/chrome/browser/ui/webui/settings/reset_settings_handler.cc b/chrome/browser/ui/webui/settings/reset_settings_handler.cc --- a/chrome/browser/ui/webui/settings/reset_settings_handler.cc +++ b/chrome/browser/ui/webui/settings/reset_settings_handler.cc -@@ -208,7 +208,7 @@ void ResetSettingsHandler::OnShowResetProfileDialog( +@@ -209,7 +209,7 @@ void ResetSettingsHandler::OnShowResetProfileDialog( ->GetURLLoaderFactory(), - base::Bind(&ResetSettingsHandler::OnSettingsFetched, - base::Unretained(this)), + base::BindOnce(&ResetSettingsHandler::OnSettingsFetched, + base::Unretained(this)), - GURL("https://tools.google.com/service/update2"), brandcode_); + GURL("https://tools.9oo91e.qjz9zk/service/update2"), brandcode_); } @@ -8935,7 +8812,7 @@ diff --git a/chrome/browser/ui/webui/settings/reset_settings_handler.cc b/chrome diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -1423,7 +1423,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, +@@ -1429,7 +1429,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, // The link to the Advanced Protection Program landing page, with a referrer // from Chrome settings. GURL advanced_protection_url( @@ -9029,10 +8906,56 @@ diff --git a/chrome/browser/vr/PRESUBMIT.py b/chrome/browser/vr/PRESUBMIT.py for more details about the presubmit API built into depot_tools. """ +diff --git a/chrome/browser/web_applications/preinstalled_web_apps/gmail.cc b/chrome/browser/web_applications/preinstalled_web_apps/gmail.cc +--- a/chrome/browser/web_applications/preinstalled_web_apps/gmail.cc ++++ b/chrome/browser/web_applications/preinstalled_web_apps/gmail.cc +@@ -16,7 +16,7 @@ namespace web_app { + ExternalInstallOptions GetConfigForGmail() { + ExternalInstallOptions options( + /*install_url=*/GURL( +- "https://mail.google.com/mail/installwebapp?usp=chrome_default"), ++ "https://mail.9oo91e.qjz9zk/mail/installwebapp?usp=chrome_default"), + /*user_display_mode=*/DisplayMode::kBrowser, + /*install_source=*/ExternalInstallSource::kExternalDefault); + +@@ -29,8 +29,8 @@ ExternalInstallOptions GetConfigForGmail() { + options.app_info_factory = base::BindRepeating([]() { + auto info = std::make_unique(); + info->title = base::UTF8ToUTF16("Gmail"); +- info->start_url = GURL("https://mail.google.com/?usp=installed_webapp"); +- info->scope = GURL("https://mail.google.com/"); ++ info->start_url = GURL("https://mail.9oo91e.qjz9zk/?usp=installed_webapp"); ++ info->scope = GURL("https://mail.9oo91e.qjz9zk/"); + info->display_mode = DisplayMode::kBrowser; + info->icon_bitmaps_any = + LoadBundledIcons({IDR_PREINSTALLED_WEB_APPS_GMAIL_ICON_192_PNG}); +diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_calendar.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_calendar.cc +--- a/chrome/browser/web_applications/preinstalled_web_apps/google_calendar.cc ++++ b/chrome/browser/web_applications/preinstalled_web_apps/google_calendar.cc +@@ -98,7 +98,7 @@ constexpr Translation kNameTranslations[] = { + + ExternalInstallOptions GetConfigForGoogleCalendar() { + ExternalInstallOptions options( +- /*install_url=*/GURL("https://calendar.google.com/calendar/" ++ /*install_url=*/GURL("https://calendar.9oo91e.qjz9zk/calendar/" + "installwebapp?usp=chrome_default"), + /*user_display_mode=*/DisplayMode::kBrowser, + /*install_source=*/ExternalInstallSource::kExternalDefault); +@@ -115,8 +115,8 @@ ExternalInstallOptions GetConfigForGoogleCalendar() { + auto info = std::make_unique(); + info->title = base::UTF8ToUTF16( + GetTranslatedName("Google Calendar", kNameTranslations)); +- info->start_url = GURL("https://calendar.google.com/calendar/r"); +- info->scope = GURL("https://calendar.google.com/calendar/"); ++ info->start_url = GURL("https://calendar.9oo91e.qjz9zk/calendar/r"); ++ info->scope = GURL("https://calendar.9oo91e.qjz9zk/calendar/"); + info->display_mode = DisplayMode::kStandalone; + info->icon_bitmaps_any = LoadBundledIcons( + {IDR_PREINSTALLED_WEB_APPS_GOOGLE_CALENDAR_ICON_192_PNG}); diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_docs.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_docs.cc --- a/chrome/browser/web_applications/preinstalled_web_apps/google_docs.cc +++ b/chrome/browser/web_applications/preinstalled_web_apps/google_docs.cc -@@ -15,7 +15,7 @@ namespace web_app { +@@ -100,7 +100,7 @@ constexpr Translation kNameTranslations[] = { ExternalInstallOptions GetConfigForGoogleDocs() { ExternalInstallOptions options( /*install_url=*/GURL( @@ -9041,9 +8964,9 @@ diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_docs.c /*user_display_mode=*/DisplayMode::kBrowser, /*install_source=*/ExternalInstallSource::kExternalDefault); -@@ -32,8 +32,8 @@ ExternalInstallOptions GetConfigForGoogleDocs() { - auto info = std::make_unique(); - info->title = base::UTF8ToUTF16("Docs"); +@@ -114,8 +114,8 @@ ExternalInstallOptions GetConfigForGoogleDocs() { + info->title = + base::UTF8ToUTF16(GetTranslatedName("Docs", kNameTranslations)); info->start_url = - GURL("https://docs.google.com/document/?usp=installed_webapp"); - info->scope = GURL("https://docs.google.com/document/"); @@ -9052,11 +8975,103 @@ diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_docs.c info->display_mode = DisplayMode::kBrowser; info->icon_bitmaps_any = LoadBundledIcons({IDR_PREINSTALLED_WEB_APPS_GOOGLE_DOCS_ICON_192_PNG}); +diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_drive.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_drive.cc +--- a/chrome/browser/web_applications/preinstalled_web_apps/google_drive.cc ++++ b/chrome/browser/web_applications/preinstalled_web_apps/google_drive.cc +@@ -103,7 +103,7 @@ constexpr Translation kNameTranslations[] = { + ExternalInstallOptions GetConfigForGoogleDrive() { + ExternalInstallOptions options( + /*install_url=*/GURL( +- "https://drive.google.com/drive/installwebapp?usp=chrome_default"), ++ "https://drive.9oo91e.qjz9zk/drive/installwebapp?usp=chrome_default"), + /*user_display_mode=*/DisplayMode::kBrowser, + /*install_source=*/ExternalInstallSource::kExternalDefault); + +@@ -118,8 +118,8 @@ ExternalInstallOptions GetConfigForGoogleDrive() { + auto info = std::make_unique(); + info->title = + base::UTF8ToUTF16(GetTranslatedName("Google Drive", kNameTranslations)); +- info->start_url = GURL("https://drive.google.com/?lfhs=2"); +- info->scope = GURL("https://drive.google.com/"); ++ info->start_url = GURL("https://drive.9oo91e.qjz9zk/?lfhs=2"); ++ info->scope = GURL("https://drive.9oo91e.qjz9zk/"); + info->display_mode = DisplayMode::kStandalone; + info->icon_bitmaps_any = + LoadBundledIcons({IDR_PREINSTALLED_WEB_APPS_GOOGLE_DRIVE_ICON_192_PNG}); +diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_sheets.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_sheets.cc +--- a/chrome/browser/web_applications/preinstalled_web_apps/google_sheets.cc ++++ b/chrome/browser/web_applications/preinstalled_web_apps/google_sheets.cc +@@ -97,7 +97,7 @@ constexpr Translation kNameTranslations[] = { + + ExternalInstallOptions GetConfigForGoogleSheets() { + ExternalInstallOptions options( +- /*install_url=*/GURL("https://docs.google.com/spreadsheets/" ++ /*install_url=*/GURL("https://docs.9oo91e.qjz9zk/spreadsheets/" + "installwebapp?usp=chrome_default"), + /*user_display_mode=*/DisplayMode::kBrowser, + /*install_source=*/ExternalInstallSource::kExternalDefault); +@@ -113,8 +113,8 @@ ExternalInstallOptions GetConfigForGoogleSheets() { + base::UTF8ToUTF16(GetTranslatedName("Sheets", kNameTranslations)); + + info->start_url = +- GURL("https://docs.google.com/spreadsheets/?usp=installed_webapp"); +- info->scope = GURL("https://docs.google.com/spreadsheets/"); ++ GURL("https://docs.9oo91e.qjz9zk/spreadsheets/?usp=installed_webapp"); ++ info->scope = GURL("https://docs.9oo91e.qjz9zk/spreadsheets/"); + info->display_mode = DisplayMode::kBrowser; + info->icon_bitmaps_any = LoadBundledIcons( + {IDR_PREINSTALLED_WEB_APPS_GOOGLE_SHEETS_ICON_192_PNG}); +diff --git a/chrome/browser/web_applications/preinstalled_web_apps/google_slides.cc b/chrome/browser/web_applications/preinstalled_web_apps/google_slides.cc +--- a/chrome/browser/web_applications/preinstalled_web_apps/google_slides.cc ++++ b/chrome/browser/web_applications/preinstalled_web_apps/google_slides.cc +@@ -97,7 +97,7 @@ constexpr Translation kNameTranslations[] = { + + ExternalInstallOptions GetConfigForGoogleSlides() { + ExternalInstallOptions options( +- /*install_url=*/GURL("https://docs.google.com/presentation/" ++ /*install_url=*/GURL("https://docs.9oo91e.qjz9zk/presentation/" + "installwebapp?usp=chrome_default"), + /*user_display_mode=*/DisplayMode::kBrowser, + /*install_source=*/ExternalInstallSource::kExternalDefault); +@@ -112,8 +112,8 @@ ExternalInstallOptions GetConfigForGoogleSlides() { + info->title = + base::UTF8ToUTF16(GetTranslatedName("Slides", kNameTranslations)); + info->start_url = +- GURL("https://docs.google.com/presentation/?usp=installed_webapp"); +- info->scope = GURL("https://docs.google.com/presentation/"); ++ GURL("https://docs.9oo91e.qjz9zk/presentation/?usp=installed_webapp"); ++ info->scope = GURL("https://docs.9oo91e.qjz9zk/presentation/"); + info->display_mode = DisplayMode::kBrowser; + info->icon_bitmaps_any = LoadBundledIcons( + {IDR_PREINSTALLED_WEB_APPS_GOOGLE_SLIDES_ICON_192_PNG}); +diff --git a/chrome/browser/web_applications/preinstalled_web_apps/youtube.cc b/chrome/browser/web_applications/preinstalled_web_apps/youtube.cc +--- a/chrome/browser/web_applications/preinstalled_web_apps/youtube.cc ++++ b/chrome/browser/web_applications/preinstalled_web_apps/youtube.cc +@@ -16,7 +16,7 @@ namespace web_app { + ExternalInstallOptions GetConfigForYouTube() { + ExternalInstallOptions options( + /*install_url=*/GURL( +- "https://www.youtube.com/s/notifications/manifest/cr_install.html"), ++ "https://www.y0u1ub3.qjz9zk/s/notifications/manifest/cr_install.html"), + #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) + /*user_display_mode=*/DisplayMode::kStandalone, + #else +@@ -33,8 +33,8 @@ ExternalInstallOptions GetConfigForYouTube() { + options.app_info_factory = base::BindRepeating([]() { + auto info = std::make_unique(); + info->title = base::UTF8ToUTF16("YouTube"); +- info->start_url = GURL("https://www.youtube.com/?feature=ytca"); +- info->scope = GURL("https://www.youtube.com/"); ++ info->start_url = GURL("https://www.y0u1ub3.qjz9zk/?feature=ytca"); ++ info->scope = GURL("https://www.y0u1ub3.qjz9zk/"); + info->display_mode = DisplayMode::kMinimalUi; + info->icon_bitmaps_any = + LoadBundledIcons({IDR_PREINSTALLED_WEB_APPS_YOUTUBE_ICON_192_PNG}); diff --git a/chrome/browser/web_applications/web_app_install_task.cc b/chrome/browser/web_applications/web_app_install_task.cc --- a/chrome/browser/web_applications/web_app_install_task.cc +++ b/chrome/browser/web_applications/web_app_install_task.cc -@@ -50,7 +50,7 @@ namespace { - #if defined(OS_CHROMEOS) +@@ -53,7 +53,7 @@ namespace { + #if BUILDFLAG(IS_CHROMEOS_ASH) const char kChromeOsPlayPlatform[] = "chromeos_play"; const char kPlayIntentPrefix[] = - "https://play.google.com/store/apps/details?id="; @@ -9067,7 +9082,7 @@ diff --git a/chrome/browser/web_applications/web_app_install_task.cc b/chrome/br diff --git a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc --- a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc +++ b/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc -@@ -294,7 +294,7 @@ void ChromeAuthenticatorRequestDelegate::RegisterActionCallbacks( +@@ -310,7 +310,7 @@ void ChromeAuthenticatorRequestDelegate::RegisterActionCallbacks( bool ChromeAuthenticatorRequestDelegate::ShouldPermitIndividualAttestation( const std::string& relying_party_id) { constexpr char kGoogleCorpAppId[] = @@ -9076,7 +9091,7 @@ diff --git a/chrome/browser/webauthn/chrome_authenticator_request_delegate.cc b/ // If the RP ID is actually the Google corp App ID (because the request is // actually a U2F request originating from cryptotoken), or is listed in the -@@ -643,11 +643,11 @@ bool ChromeAuthenticatorRequestDelegate::ShouldPermitCableExtension( +@@ -660,11 +660,11 @@ bool ChromeAuthenticatorRequestDelegate::ShouldPermitCableExtension( // everything to QR-code or sync-based pairing, we don't want use of the // extension to spread without consideration. Therefore it's limited to // origins that are already depending on it and test sites. @@ -9222,18 +9237,6 @@ diff --git a/chrome/chrome_cleaner/logging/reporter_logging_service.cc b/chrome/ destination: GOOGLE_OWNED_SERVICE } policy { -diff --git a/chrome/chrome_cleaner/mojom/engine_requests.mojom b/chrome/chrome_cleaner/mojom/engine_requests.mojom ---- a/chrome/chrome_cleaner/mojom/engine_requests.mojom -+++ b/chrome/chrome_cleaner/mojom/engine_requests.mojom -@@ -37,7 +37,7 @@ struct UserInformation { - WString name; - WString domain; - // User account type (SID_NAME_USE). See -- // https://msdn.microsoft.com/en-us/library/windows/desktop/aa379601(v=vs.85).aspx -+ // https://msdn.m1cr050ft.qjz9zk/en-us/library/windows/desktop/aa379601(v=vs.85).aspx - uint32 account_type; - }; - diff --git a/chrome/common/apps/platform_apps/api/PRESUBMIT.py b/chrome/common/apps/platform_apps/api/PRESUBMIT.py --- a/chrome/common/apps/platform_apps/api/PRESUBMIT.py +++ b/chrome/common/apps/platform_apps/api/PRESUBMIT.py @@ -9249,10 +9252,10 @@ diff --git a/chrome/common/apps/platform_apps/api/PRESUBMIT.py b/chrome/common/a diff --git a/chrome/common/cloud_print/cloud_print_constants.cc b/chrome/common/cloud_print/cloud_print_constants.cc --- a/chrome/common/cloud_print/cloud_print_constants.cc +++ b/chrome/common/cloud_print/cloud_print_constants.cc -@@ -8,7 +8,7 @@ namespace cloud_print { - +@@ -9,7 +9,7 @@ namespace cloud_print { const char kCloudPrintUserAgent[] = "GoogleCloudPrintProxy"; - const char kChromeCloudPrintProxyHeader[] = "X-CloudPrint-Proxy: Chrome"; + const char kChromeCloudPrintProxyHeaderName[] = "X-CloudPrint-Proxy"; + const char kChromeCloudPrintProxyHeaderValue[] = "Chrome"; -const char kCloudPrintPushNotificationsSource[] = "cloudprint.google.com"; +const char kCloudPrintPushNotificationsSource[] = "cloudprint.9oo91e.qjz9zk"; @@ -9294,7 +9297,7 @@ diff --git a/chrome/common/extensions/api/_api_features.json b/chrome/common/ext "browserAction.openPopup": [{ "channel": "dev", "dependencies": ["manifest:browser_action"], -@@ -290,7 +290,7 @@ +@@ -286,7 +286,7 @@ "dashboardPrivate": [{ "channel": "stable", "contexts": ["blessed_web_page", "web_page"], @@ -9435,7 +9438,7 @@ diff --git a/chrome/common/extensions/api/i18n.json b/chrome/common/extensions/a diff --git a/chrome/common/extensions/api/identity.idl b/chrome/common/extensions/api/identity.idl --- a/chrome/common/extensions/api/identity.idl +++ b/chrome/common/extensions/api/identity.idl -@@ -176,7 +176,7 @@ namespace identity { +@@ -177,7 +177,7 @@ namespace identity { // providers by launching a web view and navigating it to the // first URL in the provider's auth flow. When the provider // redirects to a URL matching the pattern @@ -9444,7 +9447,7 @@ diff --git a/chrome/common/extensions/api/identity.idl b/chrome/common/extension // window will close, and the final redirect URL will be passed to // the callback function. // -@@ -194,7 +194,7 @@ namespace identity { +@@ -195,7 +195,7 @@ namespace identity { // Generates a redirect URL to be used in |launchWebAuthFlow|. // // The generated URLs match the pattern @@ -9461,7 +9464,7 @@ diff --git a/chrome/common/extensions/api/image_writer_private.idl b/chrome/comm // // See the design doc for a detailed description of this API. -// https://goo.gl/KzMEFq -+// https://goo.gl.qjz9zk.qjz9zk.qjz9zk/KzMEFq ++// https://goo.gl.qjz9zk/KzMEFq namespace imageWriterPrivate { // The different stages of a write call. // @@ -9514,8 +9517,8 @@ diff --git a/chrome/common/extensions/api/scripting.idl b/chrome/common/extensio callback InjectedFunction = void(); // The origin for a style change. -- // See style origins -+ // See style origins +- // See style origins ++ // See style origins // for more info. enum StyleOrigin { AUTHOR, @@ -9523,8 +9526,8 @@ diff --git a/chrome/common/extensions/api/scripting.idl b/chrome/common/extensio // The ID of the tab into which to inject. long tabId; -- // The IDs -+ // The IDs +- // The IDs ++ // The IDs // of specific frames to inject into. long[]? frameIds; @@ -9569,7 +9572,7 @@ diff --git a/chrome/common/extensions/api/webrtc_audio_private.idl b/chrome/comm // extensions). // -// See http://goo.gl/8rOmgk for further documentation of this API. -+// See http://goo.gl.qjz9zk.qjz9zk.qjz9zk/8rOmgk for further documentation of this API. ++// See http://goo.gl.qjz9zk/8rOmgk for further documentation of this API. namespace webrtcAudioPrivate { @@ -9609,7 +9612,7 @@ diff --git a/chrome/common/extensions/api/windows.json b/chrome/common/extension diff --git a/chrome/common/extensions/chrome_extensions_client.cc b/chrome/common/extensions/chrome_extensions_client.cc --- a/chrome/common/extensions/chrome_extensions_client.cc +++ b/chrome/common/extensions/chrome_extensions_client.cc -@@ -46,9 +46,9 @@ namespace { +@@ -44,9 +44,9 @@ namespace { // TODO(battre): Delete the HTTP URL once the blocklist is downloaded via HTTPS. const char kExtensionBlocklistUrlPrefix[] = @@ -9621,6364 +9624,10 @@ diff --git a/chrome/common/extensions/chrome_extensions_client.cc b/chrome/commo const char kThumbsWhiteListedExtension[] = "khopmbdjffemhegeeobelklnbglcdgfh"; -diff --git a/chrome/common/extensions/docs/examples/api/bookmarks/basic/manifest.json b/chrome/common/extensions/docs/examples/api/bookmarks/basic/manifest.json ---- a/chrome/common/extensions/docs/examples/api/bookmarks/basic/manifest.json -+++ b/chrome/common/extensions/docs/examples/api/bookmarks/basic/manifest.json -@@ -11,5 +11,5 @@ - "default_popup": "popup.html" - }, - "manifest_version": 2, -- "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'" -+ "content_security_policy": "script-src 'self' https://ajax.9oo91eapis.qjz9zk; object-src 'self'" - } -diff --git a/chrome/common/extensions/docs/examples/api/bookmarks/basic/popup.html b/chrome/common/extensions/docs/examples/api/bookmarks/basic/popup.html ---- a/chrome/common/extensions/docs/examples/api/bookmarks/basic/popup.html -+++ b/chrome/common/extensions/docs/examples/api/bookmarks/basic/popup.html -@@ -1,6 +1,6 @@ - - -- -+ - - - -diff --git a/chrome/common/extensions/docs/examples/api/commands/background.js b/chrome/common/extensions/docs/examples/api/commands/background.js ---- a/chrome/common/extensions/docs/examples/api/commands/background.js -+++ b/chrome/common/extensions/docs/examples/api/commands/background.js -@@ -2,6 +2,6 @@ - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. - --chrome.commands.onCommand.addListener(function(command) { -+ch40me.qjz9zkmands.onCommand.addListener(function(command) { - console.log('onCommand event received for message: ', command); - }); -diff --git a/chrome/common/extensions/docs/examples/api/default_command_override/background.js b/chrome/common/extensions/docs/examples/api/default_command_override/background.js ---- a/chrome/common/extensions/docs/examples/api/default_command_override/background.js -+++ b/chrome/common/extensions/docs/examples/api/default_command_override/background.js -@@ -1,7 +1,7 @@ - // Copyright 2017 The Chromium Authors. All rights reserved. - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. --chrome.commands.onCommand.addListener(function(command) { -+ch40me.qjz9zkmands.onCommand.addListener(function(command) { - chrome.tabs.query({currentWindow: true}, function(tabs) { - // Sort tabs according to their index in the window. - tabs.sort((a, b) => { return a.index < b.index; }); -diff --git a/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json b/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json ---- a/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json -+++ b/chrome/common/extensions/docs/examples/api/deviceInfo/basic/manifest.json -@@ -11,5 +11,5 @@ - "default_popup": "popup.html" - }, - "manifest_version": 2, -- "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'" -+ "content_security_policy": "script-src 'self' https://ajax.9oo91eapis.qjz9zk; object-src 'self'" - } -diff --git a/chrome/common/extensions/docs/examples/api/deviceInfo/basic/popup.html b/chrome/common/extensions/docs/examples/api/deviceInfo/basic/popup.html ---- a/chrome/common/extensions/docs/examples/api/deviceInfo/basic/popup.html -+++ b/chrome/common/extensions/docs/examples/api/deviceInfo/basic/popup.html -@@ -1,6 +1,6 @@ - - -- -+ - - - -diff --git a/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/options.html b/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/options.html ---- a/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/options.html -+++ b/chrome/common/extensions/docs/examples/api/downloads/download_filename_controller/options.html -@@ -27,8 +27,8 @@ - - - - -diff --git a/chrome/common/extensions/docs/examples/api/downloads/download_manager/popup.html b/chrome/common/extensions/docs/examples/api/downloads/download_manager/popup.html ---- a/chrome/common/extensions/docs/examples/api/downloads/download_manager/popup.html -+++ b/chrome/common/extensions/docs/examples/api/downloads/download_manager/popup.html -@@ -10,7 +10,7 @@ -

- +diff --git a/third_party/google-closure-library/closure/goog/dom/controlrange_test.html b/third_party/google-closure-library/closure/goog/dom/controlrange_test.html +--- a/third_party/google-closure-library/closure/goog/dom/controlrange_test.html ++++ b/third_party/google-closure-library/closure/goog/dom/controlrange_test.html +@@ -16,7 +16,7 @@ See the COPYING file for details. + --> +
+
+- ++ +
+ +
ab
cd
+@@ -27,7 +27,7 @@ See the COPYING file for details. + + + foo +- ++ + bar + + +diff --git a/third_party/google-closure-library/closure/goog/dom/controlrange_test_dom.html b/third_party/google-closure-library/closure/goog/dom/controlrange_test_dom.html +--- a/third_party/google-closure-library/closure/goog/dom/controlrange_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/dom/controlrange_test_dom.html +@@ -6,7 +6,7 @@ See the COPYING file for details. + --> +
+
+- ++ +
+ + + + +diff --git a/third_party/google-closure-library/closure/goog/dom/range_test.html b/third_party/google-closure-library/closure/goog/dom/range_test.html +--- a/third_party/google-closure-library/closure/goog/dom/range_test.html ++++ b/third_party/google-closure-library/closure/goog/dom/range_test.html +@@ -26,7 +26,7 @@ See the COPYING file for details. +
a + foo +- ++ + bar +
12
+
  • 1
  • 2
+
  1. 1
  2. 2
+- ++ +
Will be removed
+ +
+diff --git a/third_party/google-closure-library/closure/goog/dom/range_test_dom.html b/third_party/google-closure-library/closure/goog/dom/range_test_dom.html +--- a/third_party/google-closure-library/closure/goog/dom/range_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/dom/range_test_dom.html +@@ -16,7 +16,7 @@ See the COPYING file for details. +
12
+
  • 1
  • 2
+
  1. 1
  2. 2
+- ++ +
Will be removed
+ +
+diff --git a/third_party/google-closure-library/closure/goog/dom/textrange_test.html b/third_party/google-closure-library/closure/goog/dom/textrange_test.html +--- a/third_party/google-closure-library/closure/goog/dom/textrange_test.html ++++ b/third_party/google-closure-library/closure/goog/dom/textrange_test.html +@@ -16,7 +16,7 @@ See the COPYING file for details. + --> +
+
+- ++ +
+ +
ab
cd
+@@ -26,12 +26,12 @@ See the COPYING file for details. + + + +-
foobar
++
foobar
+ + + + +-
positiontest
++
positiontest
+ +-
positiontest
++
positiontest
+ +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/dom/textrange_test_dom.html b/third_party/google-closure-library/closure/goog/dom/textrange_test_dom.html +--- a/third_party/google-closure-library/closure/goog/dom/textrange_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/dom/textrange_test_dom.html +@@ -6,7 +6,7 @@ See the COPYING file for details. + --> +
+
+- ++ +
+ + + + +
a +
foobar
++ src="http://www.9oo91e.qjz9zk/intl/en_ALL/images/logo.gif">bar +
+ +
positiontest
+ +
positiontest
+diff --git a/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test.html b/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test.html +--- a/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test.html ++++ b/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test.html +@@ -16,6 +16,6 @@ See the COPYING file for details. + --> +
+
I am text with a +- link.
++ link.
+
+ +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test_dom.html b/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test_dom.html +--- a/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/editor/clicktoeditwrapper_test_dom.html +@@ -6,5 +6,5 @@ See the COPYING file for details. + --> +
+
I am text with a +- link.
++ link.
+ +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test.html b/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test.html +@@ -77,7 +77,7 @@ See the COPYING file for details. + five + + +- ++ + + +
+diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test_dom.html b/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test_dom.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/basictextformatter_test_dom.html +@@ -67,7 +67,7 @@ See the COPYING file for details. + five + + +- ++ + + +
+diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test.html b/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test.html +@@ -14,5 +14,5 @@ Copyright 2017 The Closure Library Authors. All Rights Reserved. + Use of this source code is governed by the Apache License, Version 2.0. + See the COPYING file for details. + --> +- ++ + +\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test_dom.html b/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test_dom.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/linkbubble_test_dom.html +@@ -4,4 +4,4 @@ Copyright 2017 The Closure Library Authors. All Rights Reserved. + Use of this source code is governed by the Apache License, Version 2.0. + See the COPYING file for details. + --> +- ++ +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test.html b/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test.html +@@ -16,6 +16,6 @@ See the COPYING file for details. + --> +
+
+- http://www.google.com/ ++ http://www.9oo91e.qjz9zk/ +
+
+\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test_dom.html b/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test_dom.html +--- a/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/editor/plugins/linkshortcutplugin_test_dom.html +@@ -6,6 +6,6 @@ See the COPYING file for details. + --> +
+
+- http://www.google.com/ ++ http://www.9oo91e.qjz9zk/ +
+
+\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js b/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js +--- a/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js ++++ b/third_party/google-closure-library/closure/goog/html/safeurl_test_vectors.js +@@ -70,7 +70,7 @@ goog.html.safeUrlTestVectors.BASE_VECTORS = [ + {input: 'geo:37.7,42.0', expected: 'about:invalid#zClosurez', safe: false}, + {input: 'skype:chat?jid=foo', expected: 'about:invalid#zClosurez', safe: false}, + {input: 'whatsapp://send?text=Hello', expected: 'about:invalid#zClosurez', safe: false}, +- {input: 'ssh://cloud.google.com', expected: 'about:invalid#zClosurez', safe: false}, ++ {input: 'ssh://cloud.9oo91e.qjz9zk', expected: 'about:invalid#zClosurez', safe: false}, + {input: ':', expected: 'about:invalid#zClosurez', safe: false}, + {input: '\\:', expected: 'about:invalid#zClosurez', safe: false}, + {input: ':/:', expected: 'about:invalid#zClosurez', safe: false}, +@@ -113,10 +113,10 @@ goog.html.safeUrlTestVectors.SMS_VECTORS = [ + ]; + + goog.html.safeUrlTestVectors.SSH_VECTORS = [ +- {input: 'ssh://cloud.google.com', expected: 'ssh://cloud.google.com', safe: true}, ++ {input: 'ssh://cloud.9oo91e.qjz9zk', expected: 'ssh://cloud.9oo91e.qjz9zk', safe: true}, + {input: '', expected: 'about:invalid#zClosurez', safe: false}, + {input: ':', expected: 'about:invalid#zClosurez', safe: false}, +- {input: 'ssh:cloud.google.com', expected: 'about:invalid#zClosurez', safe: false}, +- {input: ' ssh://cloud.google.com', expected: 'about:invalid#zClosurez', safe: false}, ++ {input: 'ssh:cloud.9oo91e.qjz9zk', expected: 'about:invalid#zClosurez', safe: false}, ++ {input: ' ssh://cloud.9oo91e.qjz9zk', expected: 'about:invalid#zClosurez', safe: false}, + {input: 'javascript:evil()', expected: 'about:invalid#zClosurez', safe: false} + ]; +diff --git a/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js b/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js +--- a/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js ++++ b/third_party/google-closure-library/closure/goog/html/sanitizer/html_test_vectors.js +@@ -238,7 +238,7 @@ goog.html.htmlTestVectors.HTML_TEST_VECTORS = [ + "", + ], + name: "script_title"}, +- {input: "", ++ {input: "", + acceptable: [ + "", + ], +diff --git a/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js b/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js +--- a/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js ++++ b/third_party/google-closure-library/closure/goog/labs/net/webchannel/netutils.js +@@ -50,7 +50,7 @@ netUtils.testNetwork = function(callback, opt_imageUri) { + var uri = opt_imageUri; + if (!uri) { + // default google.com image +- uri = new goog.Uri('//www.google.com/images/cleardot.gif'); ++ uri = new goog.Uri('//www.9oo91e.qjz9zk/images/cleardot.gif'); + + if (!(goog.global.location && goog.global.location.protocol == 'http')) { + uri.setScheme('https'); // e.g. chrome-extension +diff --git a/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js b/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js +--- a/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js ++++ b/third_party/google-closure-library/closure/goog/labs/net/webchannel/webchannelbase.js +@@ -2155,10 +2155,10 @@ WebChannelBase.prototype.signalError_ = function(error) { + */ + WebChannelBase.prototype.testNetworkCallback_ = function(networkUp) { + if (networkUp) { +- this.channelDebug_.info('Successfully pinged google.com'); ++ this.channelDebug_.info('Successfully pinged 9oo91e.qjz9zk'); + requestStats.notifyStatEvent(requestStats.Stat.ERROR_OTHER); + } else { +- this.channelDebug_.info('Failed to ping google.com'); ++ this.channelDebug_.info('Failed to ping 9oo91e.qjz9zk'); + requestStats.notifyStatEvent(requestStats.Stat.ERROR_NETWORK); + // Do not call onError_ again to eliminate duplicated Error events. + } +diff --git a/third_party/google-closure-library/closure/goog/net/browserchannel.js b/third_party/google-closure-library/closure/goog/net/browserchannel.js +--- a/third_party/google-closure-library/closure/goog/net/browserchannel.js ++++ b/third_party/google-closure-library/closure/goog/net/browserchannel.js +@@ -2210,11 +2210,11 @@ goog.net.BrowserChannel.prototype.signalError_ = function(error) { + */ + goog.net.BrowserChannel.prototype.testGoogleComCallback_ = function(networkUp) { + if (networkUp) { +- this.channelDebug_.info('Successfully pinged google.com'); ++ this.channelDebug_.info('Successfully pinged 9oo91e.qjz9zk'); + goog.net.BrowserChannel.notifyStatEvent( + goog.net.BrowserChannel.Stat.ERROR_OTHER); + } else { +- this.channelDebug_.info('Failed to ping google.com'); ++ this.channelDebug_.info('Failed to ping 9oo91e.qjz9zk'); + goog.net.BrowserChannel.notifyStatEvent( + goog.net.BrowserChannel.Stat.ERROR_NETWORK); + // We call onError_ here instead of signalError_ because the latter just +diff --git a/third_party/google-closure-library/closure/goog/net/iframeio_test.html b/third_party/google-closure-library/closure/goog/net/iframeio_test.html +--- a/third_party/google-closure-library/closure/goog/net/iframeio_test.html ++++ b/third_party/google-closure-library/closure/goog/net/iframeio_test.html +@@ -111,7 +111,7 @@ See the COPYING file for details. + +
+ +- Redirect (google.com) ++ Redirect (9oo91e.qjz9zk) + +
+ +diff --git a/third_party/google-closure-library/closure/goog/net/iframeio_test_dom.html b/third_party/google-closure-library/closure/goog/net/iframeio_test_dom.html +--- a/third_party/google-closure-library/closure/goog/net/iframeio_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/net/iframeio_test_dom.html +@@ -101,7 +101,7 @@ See the COPYING file for details. + +
+ +- Redirect (google.com) ++ Redirect (9oo91e.qjz9zk) + +
+ +diff --git a/third_party/google-closure-library/closure/goog/net/networktester.js b/third_party/google-closure-library/closure/goog/net/networktester.js +--- a/third_party/google-closure-library/closure/goog/net/networktester.js ++++ b/third_party/google-closure-library/closure/goog/net/networktester.js +@@ -58,7 +58,7 @@ goog.net.NetworkTester = function(callback, opt_handler, opt_uri) { + // We need to add a 'rand' to make sure the response is not fulfilled + // by browser cache. Use protocol-relative URLs to avoid insecure content + // warnings in IE. +- opt_uri = new goog.Uri('//www.google.com/images/cleardot.gif'); ++ opt_uri = new goog.Uri('//www.9oo91e.qjz9zk/images/cleardot.gif'); + opt_uri.makeUnique(); + } + +diff --git a/third_party/google-closure-library/closure/goog/net/tmpnetwork.js b/third_party/google-closure-library/closure/goog/net/tmpnetwork.js +--- a/third_party/google-closure-library/closure/goog/net/tmpnetwork.js ++++ b/third_party/google-closure-library/closure/goog/net/tmpnetwork.js +@@ -40,7 +40,7 @@ goog.net.tmpnetwork.GOOGLECOM_TIMEOUT = 10000; + * Use protocol-relative URLs to avoid insecure content warnings in IE. + */ + goog.net.tmpnetwork.TEST_URL = goog.define( +- 'goog.net.tmpnetwork.TEST_URL', '//www.google.com/images/cleardot.gif'); ++ 'goog.net.tmpnetwork.TEST_URL', '//www.9oo91e.qjz9zk/images/cleardot.gif'); + + + /** +diff --git a/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js b/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js +--- a/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js ++++ b/third_party/google-closure-library/closure/goog/soy/soy_testhelper.js +@@ -236,7 +236,7 @@ example.sanitizedSmsUrlTemplate = function(data, opt_sb, opt_injectedData) { + example.sanitizedHttpUrlTemplate = function(data, opt_sb, opt_injectedData) { + // Test the SanitizedContent constructor. + const sanitized = makeSanitizedContent( +- 'https://google.com/foo?n=917', goog.soy.data.SanitizedContentKind.URI); ++ 'https://9oo91e.qjz9zk/foo?n=917', goog.soy.data.SanitizedContentKind.URI); + return sanitized; + }; + +@@ -249,7 +249,7 @@ example.sanitizedHttpUrlTemplate = function(data, opt_sb, opt_injectedData) { + */ + example.sanitizedTrustedResourceUriTemplate = function( + data, opt_sb, opt_injectedData) { +- return new SanitizedTrustedResourceUriSubclass('https://google.com/a.js'); ++ return new SanitizedTrustedResourceUriSubclass('https://9oo91e.qjz9zk/a.js'); + }; + + +diff --git a/third_party/google-closure-library/closure/goog/testing/performancetable.css b/third_party/google-closure-library/closure/goog/testing/performancetable.css +--- a/third_party/google-closure-library/closure/goog/testing/performancetable.css ++++ b/third_party/google-closure-library/closure/goog/testing/performancetable.css +@@ -5,8 +5,8 @@ + * See the COPYING file for details. + */ + +-/* Author: attila@google.com (Attila Bodis) */ +-/* Author: nicksantos@google.com (Nick Santos) */ ++/* Author: attila@9oo91e.qjz9zk (Attila Bodis) */ ++/* Author: nicksantos@9oo91e.qjz9zk (Nick Santos) */ + + table.test-results { + font: 12px "Courier New", Courier, monospace; +diff --git a/third_party/google-closure-library/closure/goog/transpile.js b/third_party/google-closure-library/closure/goog/transpile.js +--- a/third_party/google-closure-library/closure/goog/transpile.js ++++ b/third_party/google-closure-library/closure/goog/transpile.js +@@ -777,92 +777,92 @@ function gy(){}l(gy,n);function hy(a){var b=0,c=Kj();do{var d=li(a,46,b);c.Y(ne( + function fra(a,b){var c=new hra;c.b=a;c.a=b;return c}g=hra.prototype;g.Wg=function(){return 1}\n * @suppress {externsValidation}\n */\nIterable.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol\n */\nfunction Iterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n */\nIterator.prototype.next = function(opt_value) {};\n\n\n/**\n * Use this to indicate a type is both an Iterator and an Iterable.\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @extends {Iterator}\n * @extends {Iterable}\n * @template T, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction IteratorIterable() {}\n\n// END ES6 RETROFIT CODE\n\n\n/**\n * @interface\n * @template KEY1, VALUE1\n */\nfunction IObject() {}\n\n/**\n * @record\n * @extends {IObject}\n * @template VALUE2\n */\nfunction IArrayLike() {}\n\n/** @type {number} */\nIArrayLike.prototype.length;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments\n */\nfunction Arguments() {}\n\n/**\n * @type {Function}\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee\n */\nArguments.prototype.callee;\n\n/**\n * Use the non-standard {@see Function.prototype.caller} property of a function\n * object instead.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/caller\n * @deprecated\n */\nArguments.prototype.caller;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/length\n */\nArguments.prototype.length;\n\n/**\n * Not actually a global variable, when running in a browser environment. But\n * we need it in order for the type checker to typecheck the "arguments"\n * variable in a function correctly.\n *\n * TODO(tbreisacher): There should be a separate \'arguments\' variable of type\n * `Array`, in the d8 externs.\n *\n * @type {!Arguments}\n * @see http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments\n */\nvar arguments;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity\n * @const\n */\nvar Infinity;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN\n * @const\n */\nvar NaN;\n\n/**\n * @type {undefined}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined\n * @const\n */\nvar undefined;\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI\n */\nfunction decodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n */\nfunction decodeURIComponent(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI\n */\nfunction encodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\n */\nfunction encodeURIComponent(uri) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction escape(str) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction unescape(str) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite\n */\nfunction isFinite(num) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN\n */\nfunction isNaN(num) {}\n\n/**\n * @param {*} num\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat\n */\nfunction parseFloat(num) {}\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {*} num\n * @param {number|undefined} base\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt\n */\nfunction parseInt(num, base) {}\n\n/**\n * @param {string} code\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval\n */\nfunction eval(code) {}\n\n\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {!Object}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n */\nfunction Object(opt_value) {}\n\n/**\n * The constructor of the current object.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n */\nObject.prototype.constructor = function() {};\n\n/**\n * Binds an object\'s property to a function to be called when that property is\n * looked up.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineGetter__ = function(sprop, fun) {};\n\n/**\n * Binds an object\'s property to a function to be called when an attempt is made\n * to set that property.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineSetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineSetter__ = function(sprop, fun) {};\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nObject.prototype.hasOwnProperty = function(propertyName) {};\n\n/**\n * Returns whether an object exists in another object\'s prototype chain.\n *\n * @param {Object} other\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf\n */\nObject.prototype.isPrototypeOf = function(other) {};\n\n/**\n * Return the function bound as a getter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * getter should be returned\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupGetter\n */\nObject.prototype.__lookupGetter__ = function(sprop) {};\n\n/**\n * Return the function bound as a setter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * setter should be returned.\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupSetter\n */\nObject.prototype.__lookupSetter__ = function(sprop) {};\n\n/**\n * Executes a function when a non-existent method is called on an object.\n * Mozilla-only.\n *\n * @param {Function} fun\n * @return {*}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod\n */\nObject.prototype.__noSuchMethod__ = function(fun) {};\n\n/**\n * Points to an object\'s context. For top-level objects, this is the e.g. window.\n * Mozilla-only.\n *\n * @type {Object}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/parent\n */\nObject.prototype.__parent__;\n\n/**\n * Points to the object which was used as prototype when the object was instantiated.\n * Mozilla-only.\n *\n * Will be null on Object.prototype.\n *\n * @type {Object}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto\n */\nObject.prototype.__proto__;\n\n/**\n * Determine whether the specified property in an object can be enumerated by a\n * for..in loop, with the exception of properties inherited through the\n * prototype chain.\n *\n * @param {string|symbol} propertyName\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable\n */\nObject.prototype.propertyIsEnumerable = function(propertyName) {};\n\n/**\n * Returns a localized string representing the object.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toLocaleString\n */\nObject.prototype.toLocaleString = function() {};\n\n/**\n * Returns a string representing the source code of the object.\n * Mozilla-only.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource\n */\nObject.prototype.toSource = function() {};\n\n/**\n * Returns a string representing the object.\n * @this {*}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n */\nObject.prototype.toString = function() {};\n\n/**\n * Returns the object\'s `this` value.\n * @return {*}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\nObject.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {...*} var_args\n * @throws {Error}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\n */\nfunction Function(var_args) {}\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call\n */\nFunction.prototype.call = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply\n */\nFunction.prototype.apply = function(var_args) {};\n\nFunction.prototype.arguments;\n\n/**\n * @type {number}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity\n */\nFunction.prototype.arity;\n\n/**\n * Nonstandard; Mozilla and JScript only.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller\n */\nFunction.prototype.caller;\n\n/**\n * Nonstandard.\n * @type {?}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/displayName\n */\nFunction.prototype.displayName;\n\n/**\n * Expected number of arguments.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length\n */\nFunction.prototype.length;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n */\nFunction.prototype.name;\n\n/**\n * @this {Function}\n * @return {string}\n * @nosideeffects\n * @override\n */\nFunction.prototype.toString = function() {};\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @param {...*} var_args\n * @return {!Array}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\n */\nfunction Array(var_args) {}\n\n/**\n * @return {Iterator}\n * @suppress {externsValidation}\n */\nArray.prototype[Symbol.iterator] = function() {};\n\n// Functions:\n\n/**\n * Returns a new array comprised of this array joined with other array(s)\n * and/or value(s).\n *\n * @param {...*} var_args\n * @return {!Array}\n * @this {*}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat\n */\nArray.prototype.concat = function(var_args) {};\n\n/**\n * Joins all elements of an array into a string.\n *\n * @param {*=} opt_separator Specifies a string to separate each element of the\n * array. The separator is converted to a string if necessary. If omitted,\n * the array elements are separated with a comma.\n * @return {string}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join\n */\nArray.prototype.join = function(opt_separator) {};\n\n/**\n * Removes the last element from an array and returns that element.\n *\n * @return {T}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop\n */\nArray.prototype.pop = function() {};\n\n// TODO(bradfordcsmith): remove "undefined" from the var_args of push\n/**\n * Mutates an array by appending the given elements and returning the new\n * length of the array.\n *\n * @param {...(T|undefined)} var_args\n * @return {number} The new length of the array.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push\n */\nArray.prototype.push = function(var_args) {};\n\n/**\n * Transposes the elements of an array in place: the first array element becomes the\n * last and the last becomes the first. The mutated array is also returned.\n *\n * @return {THIS} A reference to the original modified array.\n * @this {THIS}\n * @template THIS\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse\n */\nArray.prototype.reverse = function() {};\n\n/**\n * Removes the first element from an array and returns that element. This\n * method changes the length of the array.\n *\n * @this {IArrayLike}\n * @modifies {this}\n * @return {T}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift\n */\nArray.prototype.shift = function() {};\n\n/**\n * Extracts a section of an array and returns a new array.\n *\n * @param {?number=} begin Zero-based index at which to begin extraction.\n * @param {?number=} end Zero-based index at which to end extraction. slice\n * extracts up to but not including end.\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n */\nArray.prototype.slice = function(begin, end) {};\n\n/**\n * Sorts the elements of an array in place.\n *\n * @param {function(T,T):number=} opt_compareFn Specifies a function that\n * defines the sort order.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @return {!Array}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n */\nArray.prototype.sort = function(opt_compareFn) {};\n\n/**\n * Changes the content of an array, adding new elements while removing old\n * elements.\n *\n * @param {?number=} index Index at which to start changing the array. If\n * negative, will begin that many elements from the end.\n * @param {?number=} howMany An integer indicating the number of old array\n * elements to remove.\n * @param {...T} var_args\n * @return {!Array}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice\n */\nArray.prototype.splice = function(index, howMany, var_args) {};\n\n/**\n * @return {string}\n * @this {Object}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSource\n */\nArray.prototype.toSource;\n\n/**\n * @this {Array}\n * @return {string}\n * @nosideeffects\n * @override\n */\nArray.prototype.toString = function() {};\n\n/**\n * Adds one or more elements to the beginning of an array and returns the new\n * length of the array.\n *\n * @param {...*} var_args\n * @return {number} The new length of the array\n * @this {IArrayLike}\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift\n */\nArray.prototype.unshift = function(var_args) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * left-to-right) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce\n */\nArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * right-to-left) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight\n */\nArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nArray.prototype.every = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nArray.prototype.filter = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n * @return {undefined}\n */\nArray.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.prototype.indexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.prototype.lastIndexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nArray.prototype.map = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nArray.prototype.some = function(callback, opt_thisobj) {};\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/index\n */\nArray.prototype.index;\n\n/**\n * @type {?string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/input\n */\nArray.prototype.input;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length\n */\nArray.prototype.length;\n\n/**\n * Introduced in 1.8.5.\n * @param {*} arr\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\n */\nArray.isArray = function(arr) {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n */\nfunction Boolean(opt_value) {}\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/toSource\n * @override\n */\nBoolean.prototype.toSource = function() {};\n\n/**\n * @this {boolean|Boolean}\n * @return {string}\n * @nosideeffects\n * @override\n */\nBoolean.prototype.toString = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/valueOf\n * @override\n */\nBoolean.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number\n */\nfunction Number(opt_value) {}\n\n/**\n * @this {Number|number}\n * @param {number=} opt_fractionDigits\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toExponential\n */\nNumber.prototype.toExponential = function(opt_fractionDigits) {};\n\n/**\n * @this {Number|number}\n * @param {*=} opt_digits\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed\n */\nNumber.prototype.toFixed = function(opt_digits) {};\n\n/**\n * @this {Number|number}\n * @param {number=} opt_precision\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision\n */\nNumber.prototype.toPrecision = function(opt_precision) {};\n\n/**\n * Returns a string representing the number.\n * @this {Number|number}\n * @param {(number|Number)=} opt_radix An optional radix.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString\n * @override\n */\nNumber.prototype.toString = function(opt_radix) {};\n\n// Properties.\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE\n */\nNumber.MAX_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE\n */\nNumber.MIN_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NaN\n */\nNumber.NaN;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY\n */\nNumber.NEGATIVE_INFINITY;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY\n */\nNumber.POSITIVE_INFINITY;\n\n\n/**\n * @const\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math\n */\nvar Math = {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs\n */\nMath.abs = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos\n */\nMath.acos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin\n */\nMath.asin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan\n */\nMath.atan = function(x) {};\n\n/**\n * @param {?} y\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2\n */\nMath.atan2 = function(y, x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil\n */\nMath.ceil = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos\n */\nMath.cos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp\n */\nMath.exp = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor\n */\nMath.floor = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log\n */\nMath.log = function(x) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max\n */\nMath.max = function(var_args) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min\n */\nMath.min = function(var_args) {};\n\n/**\n * @param {?} x\n * @param {?} y\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow\n */\nMath.pow = function(x, y) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random\n */\nMath.random = function() {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n */\nMath.round = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin\n */\nMath.sin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt\n */\nMath.sqrt = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan\n */\nMath.tan = function(x) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/toSource\n */\nMath.toSource = function() {};\n\n// Properties:\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E\n */\nMath.E;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2\n */\nMath.LN2;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10\n */\nMath.LN10;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E\n */\nMath.LOG2E;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E\n */\nMath.LOG10E;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI\n */\nMath.PI;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2\n */\nMath.SQRT1_2;\n\n/**\n * @const {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT2\n */\nMath.SQRT2;\n\n\n/**\n * @param {?=} opt_yr_num\n * @param {?=} opt_mo_num\n * @param {?=} opt_day_num\n * @param {?=} opt_hr_num\n * @param {?=} opt_min_num\n * @param {?=} opt_sec_num\n * @param {?=} opt_ms_num\n * @constructor\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\n */\nfunction Date(opt_yr_num, opt_mo_num, opt_day_num, opt_hr_num, opt_min_num,\n opt_sec_num, opt_ms_num) {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now\n */\nDate.now = function() {};\n\n/**\n * Parses a string representation of a date, and returns the number\n * of milliseconds since January 1, 1970, 00:00:00, local time.\n * @param {*} date\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse\n */\nDate.parse = function(date) {};\n\n/**\n * @param {number} year\n * @param {number} month\n * @param {number=} opt_date\n * @param {number=} opt_hours\n * @param {number=} opt_minute\n * @param {number=} opt_second\n * @param {number=} opt_ms\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC\n */\nDate.UTC = function(year, month,\n opt_date, opt_hours, opt_minute, opt_second, opt_ms) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate\n */\nDate.prototype.getDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay\n */\nDate.prototype.getDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth\n */\nDate.prototype.getMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear\n */\nDate.prototype.getFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear\n */\nDate.prototype.getYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours\n */\nDate.prototype.getHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes\n */\nDate.prototype.getMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds\n */\nDate.prototype.getSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds\n */\nDate.prototype.getMilliseconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime\n */\nDate.prototype.getTime = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n */\nDate.prototype.getTimezoneOffset = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate\n */\nDate.prototype.getUTCDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay\n */\nDate.prototype.getUTCDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth\n */\nDate.prototype.getUTCMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear\n */\nDate.prototype.getUTCFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours\n */\nDate.prototype.getUTCHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes\n */\nDate.prototype.getUTCMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds\n */\nDate.prototype.getUTCSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds\n */\nDate.prototype.getUTCMilliseconds = function() {};\n\n/**\n * Sets the day of the month for a specified date according to local time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate\n * @return {number}\n */\nDate.prototype.setDate = function(dayValue) {};\n\n/**\n * Set the month for a specified date according to local time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth\n * @return {number}\n */\nDate.prototype.setMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear\n * @return {number}\n */\nDate.prototype.setFullYear =\n function(yearValue, opt_monthValue, opt_dayValue) {};\n\n/**\n * Sets the year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @deprecated\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear\n * @return {number}\n */\nDate.prototype.setYear = function(yearValue) {};\n\n/**\n * Sets the hours for a specified date according to local time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours\n * @return {number}\n */\nDate.prototype.setHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to local time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes\n * @return {number}\n */\nDate.prototype.setMinutes =\n function(minutesValue, opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the seconds for a specified date according to local time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds\n * @return {number}\n */\nDate.prototype.setSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to local time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds\n * @return {number}\n */\nDate.prototype.setMilliseconds = function(millisecondsValue) {};\n\n/**\n * Sets the Date object to the time represented by a number of milliseconds\n * since January 1, 1970, 00:00:00 UTC.\n *\n * @param {number} timeValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime\n * @return {number}\n */\nDate.prototype.setTime = function(timeValue) {};\n\n/**\n * Sets the day of the month for a specified date according to universal time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate\n * @return {number}\n */\nDate.prototype.setUTCDate = function(dayValue) {};\n\n/**\n * Sets the month for a specified date according to universal time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth\n * @return {number}\n */\nDate.prototype.setUTCMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to universal time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear\n * @return {number}\n */\nDate.prototype.setUTCFullYear = function(yearValue, opt_monthValue,\n opt_dayValue) {};\n\n/**\n * Sets the hour for a specified date according to universal time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours\n * @return {number}\n */\nDate.prototype.setUTCHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to universal time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes\n * @return {number}\n */\nDate.prototype.setUTCMinutes = function(minutesValue, opt_secondsValue,\n opt_msValue) {};\n\n\n/**\n * Sets the seconds for a specified date according to universal time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\n * @return {number}\n */\nDate.prototype.setUTCSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to universal time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds\n * @return {number}\n */\nDate.prototype.setUTCMilliseconds = function(millisecondsValue) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toSource\n * @override\n */\nDate.prototype.toSource = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toDateString\n */\nDate.prototype.toDateString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toGMTString\n */\nDate.prototype.toGMTString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString\n */\nDate.prototype.toTimeString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString\n */\nDate.prototype.toUTCString = function() {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString\n */\nDate.prototype.toLocaleDateString = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} formatString\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleFormat\n */\nDate.prototype.toLocaleFormat = function(formatString) {};\n\n/**\n * @param {string|Array=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.3.1\n * @override\n */\nDate.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString\n */\nDate.prototype.toLocaleTimeString = function(opt_locales, opt_options) {};\n\n/**\n * @this {Date}\n * @return {string}\n * @nosideeffects\n * @override\n */\nDate.prototype.toString = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf\n */\nDate.prototype.valueOf;\n\n/**\n * @constructor\n * @implements {Iterable}\n * @param {*=} opt_str\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n */\nfunction String(opt_str) {}\n\n/**\n * @param {...number} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode\n */\nString.fromCharCode = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/anchor\n */\nString.prototype.anchor = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/big\n */\nString.prototype.big = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/blink\n */\nString.prototype.blink = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/bold\n */\nString.prototype.bold = function() {};\n\n/**\n * Returns the specified character from a string.\n *\n * @this {String|string}\n * @param {number} index\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt\n */\nString.prototype.charAt = function(index) {};\n\n/**\n * Returns a number indicating the Unicode value of the character at the given\n * index.\n *\n * @this {String|string}\n * @param {number=} opt_index\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n */\nString.prototype.charCodeAt = function(opt_index) {};\n\n/**\n * Combines the text of two or more strings and returns a new string.\n *\n * @this {String|string}\n * @param {...*} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat\n */\nString.prototype.concat = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fixed\n */\nString.prototype.fixed = function() {};\n\n/**\n * @this {String|string}\n * @param {string} color\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontcolor\n */\nString.prototype.fontcolor = function(color) {};\n\n/**\n * @this {String|string}\n * @param {number} size\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontsize\n */\nString.prototype.fontsize = function(size) {};\n\n/**\n * Returns the index within the calling String object of the first occurrence\n * of the specified value, starting the search at fromIndex, returns -1 if the\n * value is not found.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf\n */\nString.prototype.indexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/italics\n */\nString.prototype.italics = function() {};\n\n/**\n * Returns the index within the calling String object of the last occurrence of\n * the specified value, or -1 if not found. The calling string is searched\n * backward, starting at fromIndex.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf\n */\nString.prototype.lastIndexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @param {string} hrefAttribute\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link\n */\nString.prototype.link = function(hrefAttribute) {};\n\n/**\n * Returns a number indicating whether a reference string comes before or after\n * or is the same as the given string in sort order.\n *\n * @this {*}\n * @param {?string} compareString\n * @param {string|Array=} locales\n * @param {Object=} options\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/String/localeCompare\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.1.1\n */\nString.prototype.localeCompare = function(compareString, locales, options) {};\n\n/**\n * Used to retrieve the matches when matching a string against a regular\n * expression.\n *\n * @this {String|string}\n * @param {*} regexp\n * @return {Array} This should really return an Array with a few\n * special properties, but we do not have a good way to model this in\n * our type system. Also see Regexp.prototype.exec.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match\n */\nString.prototype.match = function(regexp) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/quote\n */\nString.prototype.quote = function() {};\n\n/**\n * Finds a match between a regular expression and a string, and replaces the\n * matched substring with a new substring.\n *\n * This may have side-effects if the replacement function has side-effects.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @param {?string|function(string, ...?):*} replacement\n * @return {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace\n */\nString.prototype.replace = function(pattern, replacement) {};\n\n/**\n * Executes the search for a match between a regular expression and this String\n * object.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @return {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search\n */\nString.prototype.search = function(pattern) {};\n\n/**\n * @this {String|string}\n * @param {number} begin\n * @param {number=} opt_end\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\n */\nString.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/small\n */\nString.prototype.small = function() {};\n\n/**\n * @this {String|string}\n * @param {*=} opt_separator\n * @param {number=} opt_limit\n * @return {!Array}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split\n */\nString.prototype.split = function(opt_separator, opt_limit) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/strike\n */\nString.prototype.strike = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sub\n */\nString.prototype.sub = function() {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_length\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr\n */\nString.prototype.substr = function(start, opt_length) {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_end\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring\n */\nString.prototype.substring = function(start, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sup\n */\nString.prototype.sup = function() {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase\n */\nString.prototype.toLocaleUpperCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase\n */\nString.prototype.toLocaleLowerCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase\n */\nString.prototype.toLowerCase = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase\n */\nString.prototype.toUpperCase = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toSource\n * @override\n */\nString.prototype.toSource = function() {};\n\n/**\n * @this {string|String}\n * @return {string}\n * @nosideeffects\n * @override\n */\nString.prototype.toString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/valueOf\n */\nString.prototype.valueOf;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length\n */\nString.prototype.length;\n\n/**\n * @constructor\n * @param {*=} opt_pattern\n * @param {*=} opt_flags\n * @return {!RegExp}\n * @throws {SyntaxError} if opt_pattern is an invalid pattern.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nfunction RegExp(opt_pattern, opt_flags) {}\n\n/**\n * @param {*} pattern\n * @param {*=} opt_flags\n * @return {void}\n * @modifies {this}\n * @deprecated\n * @see http://msdn.microsoft.com/en-us/library/x9cswe0z(v=VS.85).aspx\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/compile\n */\nRegExp.prototype.compile = function(pattern, opt_flags) {};\n\n/**\n * @param {*} str The string to search.\n * @return {?RegExpResult}\n * @see http://msdn.microsoft.com/en-us/library/z908hy33(VS.85).aspx\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec\n */\nRegExp.prototype.exec = function(str) {};\n\n/**\n * @param {*} str The string to search.\n * @return {boolean} Whether the string was matched.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test\n */\nRegExp.prototype.test = function(str) {};\n\n/**\n * @this {RegExp}\n * @return {string}\n * @nosideeffects\n * @override\n */\nRegExp.prototype.toString = function() {};\n\n/**\n * @constructor\n * @extends {Array}\n */\nvar RegExpResult = function() {};\n\n\n/** @type {number} */\nRegExpResult.prototype.index;\n\n\n/** @type {string} */\nRegExpResult.prototype.input;\n\n\n/** @type {number} */\nRegExpResult.prototype.length;\n\n\n/**\n * Not actually part of ES3; was added in 2018.\n * https://github.com/tc39/proposal-regexp-named-groups\n *\n * @type {!Object}\n */\nRegExpResult.prototype.groups;\n\n\n// Constructor properties:\n\n/**\n * The string against which the last regexp was matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_input.html\n */\nRegExp.input;\n\n/**\n * The last matched characters.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastMatch.html\n */\nRegExp.lastMatch;\n\n/**\n * The last matched parenthesized substring, if any.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastParen.html\n */\nRegExp.lastParen;\n\n/**\n * The substring of the input up to the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_leftContext.html\n */\nRegExp.leftContext;\n\n/**\n * The substring of the input after the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_rightContext.html\n */\nRegExp.rightContext;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$1;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$2;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$3;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$4;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$5;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$6;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$7;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$8;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$9;\n\n// Prototype properties:\n\n/**\n * Whether to test the regular expression against all possible matches\n * in a string, or only against the first.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global\n */\nRegExp.prototype.global;\n\n/**\n * Whether to ignore case while attempting a match in a string.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase\n */\nRegExp.prototype.ignoreCase;\n\n/**\n * The index at which to start the next match.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex\n */\nRegExp.prototype.lastIndex;\n\n/**\n * Whether or not the regular expression uses lastIndex.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky\n */\nRegExp.prototype.sticky;\n\n/**\n * Whether or not to search in strings across multiple lines.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline\n */\nRegExp.prototype.multiline;\n\n/**\n * The text of the pattern.\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/source\n */\nRegExp.prototype.source;\n\n/**\n * The flags the regex was created with.\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags\n */\nRegExp.prototype.flags;\n\n/**\n * @constructor\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!Error}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n */\nfunction Error(opt_message, opt_file, opt_line) {}\n\n\n/**\n * Chrome/v8 specific, altering the maximum depth of the stack trace\n * (10 by default).\n * @type {number}\n * @see http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\n */\nError.stackTraceLimit;\n\n\n/**\n * Chrome/v8 specific, adds a stack trace to the error object. The optional\n * constructorOpt parameter allows you to pass in a function value. When\n * collecting the stack trace all frames above the topmost call to this\n * function, including that call, will be left out of the stack trace.\n * @param {Object} error The object to add the stack trace to.\n * @param {Function=} opt_constructor A function in the stack trace\n * @see http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\n * @return {undefined}\n */\nError.captureStackTrace = function(error, opt_constructor){};\n\n\n/**\n * IE-only.\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/2w6a45b5.aspx\n */\nError.prototype.description;\n\n\n/**\n * Mozilla-only.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/lineNumber\n */\nError.prototype.lineNumber;\n\n/**\n * Mozilla-only\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/fileName\n */\nError.prototype.fileName;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name\n */\nError.prototype.name;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message\n */\nError.prototype.message;\n\n/**\n * Doesn\'t seem to exist, but closure/debug.js references it.\n */\nError.prototype.sourceURL;\n\n/** @type {string} */\nError.prototype.stack;\n\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!EvalError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError\n */\nfunction EvalError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!RangeError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError\n */\nfunction RangeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!ReferenceError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError\n */\nfunction ReferenceError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!SyntaxError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError\n */\nfunction SyntaxError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!TypeError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n */\nfunction TypeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!URIError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError\n */\nfunction URIError(opt_message, opt_file, opt_line) {}\n\n\n// JScript extensions.\n// @see http://msdn.microsoft.com/en-us/library/894hfyb4(VS.80).aspx\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/7sw4ddf8.aspx\n * @type {function(new:?, string, string=)}\n * @deprecated\n */\nfunction ActiveXObject(progId, opt_location) {}\n',"externs/es5.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 5.\n * @see https://es5.github.io/\n * @externs\n * @author djlee@google.com (DJ Lee)\n */\n\n\n/**\n * @param {?Object|undefined} selfObj Specifies the object to which |this|\n * should point when the function is run. If the value is null or undefined,\n * it will default to the global object.\n * @param {...*} var_args Additional arguments that are partially\n * applied to fn.\n * @return {!Function} A partially-applied form of the Function on which\n * bind() was invoked as a method.\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind\n */\nFunction.prototype.bind = function(selfObj, var_args) {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/Trim\n */\nString.prototype.trim = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/TrimLeft\n */\nString.prototype.trimLeft = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/TrimRight\n */\nString.prototype.trimRight = function() {};\n\n\n/**\n * A object property descriptor used by Object.create, Object.defineProperty,\n * Object.defineProperties, Object.getOwnPropertyDescriptor.\n *\n * @record\n * @template THIS\n */\nfunction ObjectPropertyDescriptor() {}\n\n/** @type {(*|undefined)} */\nObjectPropertyDescriptor.prototype.value;\n\n/** @type {(function(this: THIS):?)|undefined} */\nObjectPropertyDescriptor.prototype.get;\n\n/** @type {(function(this: THIS, ?):void)|undefined} */\nObjectPropertyDescriptor.prototype.set;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.writable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.enumerable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.configurable;\n\n\n/**\n * @param {?Object} proto\n * @param {?Object=} opt_properties A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create\n */\nObject.create = function(proto, opt_properties) {};\n\n\n/**\n * @param {!Object} obj\n * @param {string|symbol} prop\n * @param {!Object} descriptor A ObjectPropertyDescriptor.\n * @return {!Object}\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty\n */\nObject.defineProperty = function(obj, prop, descriptor) {};\n\n\n/**\n * @param {!Object} obj\n * @param {!Object} props A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperties\n */\nObject.defineProperties = function(obj, props) {};\n\n\n/**\n * @param {T} obj\n * @param {string|symbol} prop\n * @return {!ObjectPropertyDescriptor|undefined}\n * @nosideeffects\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor\n */\nObject.getOwnPropertyDescriptor = function(obj, prop) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys\n */\nObject.keys = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames\n */\nObject.getOwnPropertyNames = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf\n */\nObject.getPrototypeOf = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/preventExtensions\n */\nObject.preventExtensions = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/seal\n */\nObject.seal = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze\n */\nObject.freeze = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isExtensible\n */\nObject.isExtensible = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isSealed\n */\nObject.isSealed = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isFrozen\n */\nObject.isFrozen = function(obj) {};\n\n\n/**\n * We acknowledge that this function does not exist on the `Object.prototype`\n * and is declared in this file for other reasons.\n *\n * When `toJSON` is defined as a property on an object it can be used in\n * conjunction with the JSON.stringify() function.\n *\n * It is defined here to:\n * (1) Prevent the compiler from renaming the property on internal classes.\n * (2) Enforce that the signature is correct for users defining it.\n *\n * @param {string=} opt_key The JSON key for this object.\n * @return {*} The serializable representation of this object. Note that this\n * need not be a string. See http://goo.gl/PEUvs.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior\n */\nObject.prototype.toJSON = function(opt_key) {};\n\n\n/**\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString\n * @return {string}\n */\nDate.prototype.toISOString = function() {};\n\n\n/**\n * @param {*=} opt_ignoredKey\n * @return {string}\n * @override\n */\nDate.prototype.toJSON = function(opt_ignoredKey) {};\n\n\n/**\n * A fake type to model the JSON object.\n * @constructor\n */\nfunction JSONType() {}\n\n\n/**\n * @param {string} jsonStr The string to parse.\n * @param {(function(this:?, string, *) : *)=} opt_reviver\n * @return {*} The JSON object.\n * @throws {Error}\n */\nJSONType.prototype.parse = function(jsonStr, opt_reviver) {};\n\n\n/**\n * @param {*} jsonObj Input object.\n * @param {(Array|(function(this:?, string, *) : *)|null)=} opt_replacer\n * @param {(number|string)=} opt_space\n * @return {string} JSON string which represents jsonObj.\n * @throws {Error}\n */\nJSONType.prototype.stringify = function(jsonObj, opt_replacer, opt_space) {};\n\n\n/**\n * @type {!JSONType}\n * @suppress {duplicate}\n */\nvar JSON;\n', +-"externs/es6.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 and later.\n * @see https://tc39.github.io/ecma262/\n * @see https://www.khronos.org/registry/typedarray/specs/latest/\n * @externs\n */\n\n/**\n * Some es6 definitions:\n * Symbol, IIterableResult, Iterable, IteratorIterable, Iterator,\n * IteratorIterable moved to es3 file, because some base type requires them, and\n * we want to keep them together. If you add new externs related to those types\n * define them together in the es3 file.\n */\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator\n * @extends {IteratorIterable}\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction Generator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n * @override\n */\nGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!IIterableResult}\n */\nGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!IIterableResult}\n */\nGenerator.prototype.throw = function(exception) {};\n\n\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log10 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log2 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log1p = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.expm1 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.tanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.acosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.asinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.atanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.trunc = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sign = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cbrt = function(value) {};\n\n/**\n * @param {...number} var_args\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot\n */\nMath.hypot = function(var_args) {};\n\n/**\n * @param {number} value1\n * @param {number} value2\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n */\nMath.imul = function(value1, value2) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n */\nMath.clz32 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n */\nMath.fround = function(value) {};\n\n\n/**\n * @param {*} a\n * @param {*} b\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nObject.is;\n\n\n/**\n * Returns a language-sensitive string representation of this number.\n * @param {(string|!Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.2.1\n * @override\n */\nNumber.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * Returns the wrapped primitive value of this Number object.\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/valueOf\n * @override\n */\nNumber.prototype.valueOf = function() {};\n\n\n/**\n * Pads the end of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n */\nString.prototype.padEnd = function(targetLength, opt_padString) {};\n\n/**\n * Pads the start of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n */\nString.prototype.padStart = function(targetLength, opt_padString) {};\n\n/**\n * Repeats the string the given number of times.\n *\n * @param {number} count The number of times the string is repeated.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n */\nString.prototype.repeat = function(count) {};\n\n/**\n * @constructor\n * @extends {Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-gettemplateobject\n */\nvar ITemplateArray = function() {};\n\n/**\n * @type {!Array}\n */\nITemplateArray.prototype.raw;\n\n/**\n * @param {!ITemplateArray} template\n * @param {...*} var_args Substitution values.\n * @return {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n */\nString.raw = function(template, var_args) {};\n\n\n/**\n * @param {number} codePoint\n * @param {...number} var_args Additional codepoints\n * @return {string}\n */\nString.fromCodePoint = function(codePoint, var_args) {};\n\n\n/**\n * @param {number} index\n * @return {number}\n * @nosideeffects\n */\nString.prototype.codePointAt = function(index) {};\n\n\n/**\n * @param {string=} opt_form\n * @return {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nString.prototype.normalize = function(opt_form) {};\n\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n */\nString.prototype.startsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n */\nString.prototype.endsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n */\nString.prototype.includes = function(searchString, opt_position) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart\n */\nString.prototype.trimStart = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd\n */\nString.prototype.trimEnd = function() {};\n\n\n/**\n * @see http://dev.w3.org/html5/postmsg/\n * @interface\n */\nfunction Transferable() {}\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @implements {Transferable}\n */\nfunction ArrayBuffer(length) {}\n\n/** @type {number} */\nArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!ArrayBuffer}\n * @nosideeffects\n */\nArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @param {*} arg\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView\n */\nArrayBuffer.isView = function(arg) {};\n\n\n/**\n * @constructor\n */\nfunction ArrayBufferView() {}\n\n/** @type {!ArrayBuffer} */\nArrayBufferView.prototype.buffer;\n\n/** @type {number} */\nArrayBufferView.prototype.byteOffset;\n\n/** @type {number} */\nArrayBufferView.prototype.byteLength;\n\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer\n */\nfunction SharedArrayBuffer(length) {}\n\n/** @type {number} */\nSharedArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!SharedArrayBuffer}\n * @nosideeffects\n */\nSharedArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n\n/**\n * @typedef {!ArrayBuffer|!ArrayBufferView}\n */\nvar BufferSource;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @extends {ArrayBufferView}\n */\nfunction TypedArray() {};\n\n/** @const {number} */\nTypedArray.prototype.BYTES_PER_ELEMENT;\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin\n */\nTypedArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries\n */\nTypedArray.prototype.entries = function() {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every\n */\nTypedArray.prototype.every = function(callback, opt_thisArg) {};\n\n/**\n * @param {number} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill\n */\nTypedArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter\n */\nTypedArray.prototype.filter = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {(number|undefined)}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find\n */\nTypedArray.prototype.find = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {number}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex\n */\nTypedArray.prototype.findIndex = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {undefined}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach\n */\nTypedArray.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/includes\n */\nTypedArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf\n */\nTypedArray.prototype.indexOf = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {string=} opt_separator\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join\n */\nTypedArray.prototype.join = function(opt_separator) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys\n */\nTypedArray.prototype.keys = function() {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf\n */\nTypedArray.prototype.lastIndexOf = function(searchElement, opt_fromIndex) {};\n\n/** @type {number} */\nTypedArray.prototype.length;\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : number} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map\n */\nTypedArray.prototype.map = function(callback, opt_thisArg) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce\n */\nTypedArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight\n */\nTypedArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse\n */\nTypedArray.prototype.reverse = function() {};\n\n/**\n * @param {!ArrayBufferView|!Array} array\n * @param {number=} opt_offset\n * @return {undefined}\n * @throws {!RangeError}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set\n */\nTypedArray.prototype.set = function(array, opt_offset) {};\n\n/**\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice\n */\nTypedArray.prototype.slice = function(opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some\n */\nTypedArray.prototype.some = function(callback, opt_thisArg) {};\n\n/**\n * @param {(function(number, number) : number)=} opt_compareFunction\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort\n */\nTypedArray.prototype.sort = function(opt_compareFunction) {};\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray\n */\nTypedArray.prototype.subarray = function(begin, opt_end) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values\n */\nTypedArray.prototype.values = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString\n * @override\n */\nTypedArray.prototype.toLocaleString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString\n * @override\n */\nTypedArray.prototype.toString = function() {};\n\n/** @override */\nTypedArray.prototype[Symbol.iterator] = function() {};\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments} If the user passes a backing array, then indexed\n * accesses will modify the backing array. JSCompiler does not model\n * this well. In other words, if you have:\n * \n * var x = new ArrayBuffer(1);\n * var y = new Int8Array(x);\n * y[0] = 2;\n * \n * JSCompiler will not recognize that the last assignment modifies x.\n * We workaround this by marking all these arrays as @modifies {arguments},\n * to introduce the possibility that x aliases y.\n */\nfunction Int8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8ClampedArray(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8ClampedArray.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8ClampedArray}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8ClampedArray.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8ClampedArray}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8ClampedArray.of = function(var_args) {};\n\n\n/**\n * @typedef {Uint8ClampedArray}\n * @deprecated CanvasPixelArray has been replaced by Uint8ClampedArray\n * in the latest spec.\n * @see http://www.w3.org/TR/2dcontext/#imagedata\n */\nvar CanvasPixelArray;\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float64Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat64Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float64Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat64Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float64Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat64Array.of = function(var_args) {};\n\n\n/**\n * @param {ArrayBuffer|SharedArrayBuffer} buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_byteLength\n * @constructor\n * @extends {ArrayBufferView}\n * @throws {Error}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/DataView\n */\nfunction DataView(buffer, opt_byteOffset, opt_byteLength) {}\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat32 = function(\n byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat64 = function(\n byteOffset, value, opt_littleEndian) {};\n\n\n/**\n * @see https://github.com/promises-aplus/promises-spec\n * @typedef {{then: ?}}\n */\nvar Thenable;\n\n\n/**\n * This is not an official DOM interface. It is used to add generic typing\n * and respective type inference where available.\n * {@see goog.Thenable} inherits from this making all promises\n * interoperate.\n * @interface\n * @struct\n * @template TYPE\n */\nfunction IThenable() {}\n\n\n/**\n * @param {?(function(TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(*): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('IThenable',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nIThenable.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} resolver\n * @constructor\n * @implements {IThenable}\n * @template TYPE\n */\nfunction Promise(resolver) {}\n\n\n/**\n * @param {VALUE=} opt_value\n * @return {RESULT}\n * @template VALUE\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nPromise.resolve = function(opt_value) {};\n\n\n/**\n * @param {*=} opt_error\n * @return {!Promise}\n */\nPromise.reject = function(opt_error) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.all = function(iterable) {};\n\n/**\n * Record type representing a single element of the array value one gets from\n * Promise.allSettled.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @record\n * @template VALUE\n */\nPromise.AllSettledResultElement = function() {};\n\n/**\n * 'fulfilled' or 'rejected' to indicate the final state of the corresponding\n * Promise.\n * @type {string}\n */\nPromise.AllSettledResultElement.prototype.status;\n\n/**\n * Exists only if the status field is 'fulfilled'\n * @type {VALUE|undefined}\n */\nPromise.AllSettledResultElement.prototype.value;\n\n/**\n * Exists only if the status field is 'rejected'\n * @type {*|undefined}\n */\nPromise.AllSettledResultElement.prototype.reason;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @param {!Iterable} iterable\n * @return {!Promise>>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.allSettled = function(iterable) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.race = function(iterable) {};\n\n\n/**\n * @param {?(function(this:void, TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(this:void, *): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n * @override\n */\nPromise.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @param {function(*):VALUE} onRejected\n * @return {!Promise} A Promise of the original type or a possibly\n * a different type depending on whether the parent promise was rejected.\n *\n * @template VALUE\n *\n * When a `Thenable` is rejected with another `Thenable`, the payload of the\n * second is used as the payload of the first.\n *\n * @template RESULT := cond(\n * isUnknown(VALUE),\n * unknown(),\n * mapunion(VALUE, (V) =>\n * cond(\n * isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(\n * sub(V, 'Thenable'),\n * unknown(),\n * V))))\n * =:\n */\nPromise.prototype.catch = function(onRejected) {};\n\n\n/**\n * @param {function()} callback\n * @return {!Promise}\n */\nPromise.prototype.finally = function(callback) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of\n * @param {...T} var_args\n * @return {!Array}\n * @template T\n */\nArray.of = function(var_args) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from\n * @param {string|!IArrayLike|!Iterable} arrayLike\n * @param {function(this:S, (string|T), number): R=} opt_mapFn\n * @param {S=} opt_this\n * @return {!Array}\n * @template T,S,R\n */\nArray.from = function(arrayLike, opt_mapFn, opt_this) {};\n\n\n/** @return {!IteratorIterable} */\nArray.prototype.keys;\n\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values\n */\nArray.prototype.values;\n\n\n/**\n * @return {!IteratorIterable>} Iterator of [key, value] pairs.\n */\nArray.prototype.entries;\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {T|undefined}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.find\n */\nArray.prototype.find = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {number}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.findindex\n */\nArray.prototype.findIndex = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {T} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {!Array}\n * @this {!IArrayLike|string}\n * @template T\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.fill\n */\nArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.copywithin\n * @this {!IArrayLike|string}\n * @template T\n * @return {!Array}\n */\nArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @this {!IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see https://tc39.github.io/ecma262/#sec-array.prototype.includes\n */\nArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * Generates an array by passing every element of this array to a callback that\n * returns an array of zero or more elements to be added to the result.\n *\n * NOTE: The specified behavior of the method is that the callback can return\n * either an Array, which will be flattened into the result, or a non-array,\n * which will simply be included.\n *\n * However, while defining that in the type information here is possible it's\n * very hard to understand both for humans and automated tools other than\n * closure-compiler that process these files. Also, we think it's best to\n * encourage writing callbacks that just always return an Array for the sake\n * of readability.\n *\n * The polyfill for this method provided by closure-compiler does behave as\n * defined in the specification, though.\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array}\n * callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n */\nArray.prototype.flatMap = function(callback, thisArg) {};\n\n/**\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n */\nArray.prototype.flat = function(depth) {};\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.getownpropertysymbols\n */\nObject.getOwnPropertySymbols = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @param {?} proto\n * @return {!Object}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.setprototypeof\n */\nObject.setPrototypeOf = function(obj, proto) {};\n\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\nNumber.EPSILON;\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER\n */\nNumber.MIN_SAFE_INTEGER;\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n */\nNumber.MAX_SAFE_INTEGER;\n\n\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {string} string\n * @param {number|undefined} radix\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt\n */\nNumber.parseInt = function(string, radix) {};\n\n/**\n * @param {string} string\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat\n */\nNumber.parseFloat = function(string) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n */\nNumber.isNaN = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite\n */\nNumber.isFinite = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n */\nNumber.isInteger = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger\n */\nNumber.isSafeInteger = function(value) {};\n\n\n\n/**\n * @param {!Object} target\n * @param {...(Object|null|undefined)} var_args\n * @return {!Object}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\nObject.assign = function(target, var_args) {};\n\n/**\n * TODO(dbeam): find a better place for ES2017 externs like this one.\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array} values\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n * @throws {Error}\n * @template T\n */\nObject.values = function(obj) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array>} entries\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n * @throws {Error}\n * @template T\n */\nObject.entries = function(obj) {};\n\n/**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries\n */\nObject.fromEntries = function(iter) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Object} descriptors\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors\n * @throws {Error}\n * @template T\n */\nObject.getOwnPropertyDescriptors = function(obj) {};\n\n\n\n/**\n * @const\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect\n */\nvar Reflect = {};\n\n/**\n * @param {function(this: THIS, ...?): RESULT} targetFn\n * @param {THIS} thisArg\n * @param {!Array} argList\n * @return {RESULT}\n * @template THIS, RESULT\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n */\nReflect.apply = function(targetFn, thisArg, argList) {};\n\n/**\n * @param {function(new: ?, ...?)} targetConstructorFn\n * @param {!Array} argList\n * @param {function(new: TARGET, ...?)=} opt_newTargetConstructorFn\n * @return {TARGET}\n * @template TARGET\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n */\nReflect.construct = function(targetConstructorFn, argList, opt_newTargetConstructorFn) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!ObjectPropertyDescriptor} attributes\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n */\nReflect.defineProperty = function(target, propertyKey, attributes) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n */\nReflect.deleteProperty = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!Object=} opt_receiver\n * @return {*}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n */\nReflect.get = function(target, propertyKey, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {?ObjectPropertyDescriptor}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor\n */\nReflect.getOwnPropertyDescriptor = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {?Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf\n */\nReflect.getPrototypeOf = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n */\nReflect.has = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible\n */\nReflect.isExtensible = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n */\nReflect.ownKeys = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n */\nReflect.preventExtensions = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {*} value\n * @param {!Object=} opt_receiver\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n */\nReflect.set = function(target, propertyKey, value, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf\n */\nReflect.setPrototypeOf = function(target, proto) {};\n\n\n/**\n * @const\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics\n */\nvar Atomics = {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.add = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.and = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} expectedValue\n * @param {number} replacementValue\n * @return {number}\n */\nAtomics.compareExchange = function(\n typedArray, index, expectedValue, replacementValue) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.exchange = function(typedArray, index, value) {};\n\n/**\n * @param {number} size\n * @return {boolean}\n */\nAtomics.isLockFree = function(size) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @return {number}\n */\nAtomics.load = function(typedArray, index) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.or = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.store = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.sub = function(typedArray, index, value) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} value\n * @param {number=} timeout\n * @return {String}\n */\nAtomics.wait = function(typedArray, index, value, timeout) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} count\n * @return {number}\n */\nAtomics.wake = function(typedArray, index, count) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.xor = function(typedArray, index, value) {};\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything.\n * https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n */\nAsyncIterator.prototype.next;\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction AsyncIterable() {}\n\n\n/**\n * @return {!AsyncIterator}\n */\nAsyncIterable.prototype[Symbol.asyncIterator] = function() {};\n\n\n/**\n * @interface\n * @extends {AsyncIterator}\n * @extends {AsyncIterable}\n * @template VALUE\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIteratorIterable() {}\n\n/**\n * @interface\n * @see https://tc39.github.io/proposal-async-iteration/\n * @extends {AsyncIteratorIterable}\n * @template VALUE\n */\nfunction AsyncGenerator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n * @override\n */\nAsyncGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.throw = function(exception) {};\n", +-"externs/es6_collections.js":'/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6.\n * @see http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts\n * @externs\n */\n\n// TODO(johnlenz): Use Tuples for the Map and Set iterators where appropriate.\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @implements {Iterable>}\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\n */\nfunction Map(opt_iterable) {}\n\n/** @return {void} */\nMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nMap.prototype.delete = function(key) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n */\nMap.prototype.entries = function() {};\n\n/**\n * @param {function(this:THIS, VALUE, KEY, MAP)} callback\n * @param {THIS=} opt_thisArg\n * @this {MAP}\n * @template MAP,THIS\n */\nMap.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nMap.prototype.has = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.keys = function() {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nMap.prototype.set = function(key, value) {};\n\n/**\n * @type {number}\n * (readonly)\n */\nMap.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.values = function() {};\n\n/**\n * @return {!Iterator>}\n */\nMap.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\n */\nfunction WeakMap(opt_iterable) {}\n\n/** @return {void} */\nWeakMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nWeakMap.prototype.delete = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nWeakMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nWeakMap.prototype.has = function(key) {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakMap.prototype.set = function(key, value) {};\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @implements {Iterable}\n * @template VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction Set(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nSet.prototype.delete = function(value) {};\n\n/**\n * @return {!IteratorIterable>} Where each array has two entries:\n * [value, value]\n * @nosideeffects\n */\nSet.prototype.entries = function() {};\n\n/**\n * @param {function(this: THIS, VALUE, VALUE, SET)} callback\n * @param {THIS=} opt_thisArg\n * @this {SET}\n * @template SET,THIS\n */\nSet.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nSet.prototype.has = function(value) {};\n\n/**\n * @type {number} (readonly)\n */\nSet.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.values = function() {};\n\n/**\n * @return {!Iterator}\n */\nSet.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @template VALUE\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction WeakSet(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nWeakSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nWeakSet.prototype.delete = function(value) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nWeakSet.prototype.has = function(value) {};\n', +-"externs/intl.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the JS Internationalization API as defined in\n * http://www.ecma-international.org/ecma-402/1.0/\n *\n * @externs\n */\n\n/** @const */\nvar Intl = {};\n\n/**\n * NOTE: this API is not from ecma402 and is subject to change.\n * @param {string|Array=} opt_locales\n * @param {{type: (string|undefined)}=}\n * opt_options\n * @constructor\n */\nIntl.v8BreakIterator = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} text\n * @return {undefined}\n */\nIntl.v8BreakIterator.prototype.adoptText = function(text) {};\n\n/**\n * @return {string}\n */\nIntl.v8BreakIterator.prototype.breakType = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.current = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.first = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.next = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{usage: (string|undefined), localeMatcher: (string|undefined),\n * sensitivity: (string|undefined), ignorePunctuation: (boolean|undefined),\n * numeric: (boolean|undefined), caseFirst: (string|undefined)}=}\n * opt_options\n */\nIntl.Collator = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.Collator.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {string} arg1\n * @param {string} arg2\n * @return {number}\n */\nIntl.Collator.prototype.compare = function(arg1, arg2) {};\n\n/**\n * @return {{locale: string, usage: string, sensitivity: string,\n * ignorePunctuation: boolean, collation: string, numeric: boolean,\n * caseFirst: string}}\n */\nIntl.Collator.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), useGrouping: (boolean|undefined),\n * numberingSystem: (string|undefined), style: (string|undefined),\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: (number|undefined),\n * minimumFractionDigits: (number|undefined),\n * maximumFractionDigits: (number|undefined),\n * minimumSignificantDigits: (number|undefined),\n * maximumSignificantDigits: (number|undefined)}=}\n * opt_options\n */\nIntl.NumberFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {number} num\n * @return {string}\n */\nIntl.NumberFormat.prototype.format = function(num) {};\n\n/**\n * @return {{locale: string, numberingSystem: string, style: string,\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: number, minimumFractionDigits: number,\n * maximumFractionDigits: number, minimumSignificantDigits: number,\n * maximumSignificantDigits: number, useGrouping: boolean}}\n */\nIntl.NumberFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * formatMatcher: (string|undefined), calendar: (string|undefined),\n * numberingSystem: (string|undefined), tz: (string|undefined),\n * weekday: (string|undefined), era: (string|undefined),\n * year: (string|undefined), month: (string|undefined),\n * day: (string|undefined), hour: (string|undefined),\n * minute: (string|undefined), second: (string|undefined),\n * timeZoneName: (string|undefined), hour12: (boolean|undefined)}=}\n * opt_options\n */\nIntl.DateTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.DateTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {string}\n */\nIntl.DateTimeFormat.prototype.format = function(date) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {Array<{type: string, value: string}>}\n */\nIntl.DateTimeFormat.prototype.formatToParts = function(date) {};\n\n/**\n * @return {{locale: string, calendar: string, numberingSystem: string,\n * timeZone: (string|undefined), weekday: (string|undefined),\n * era: (string|undefined), year: (string|undefined),\n * month: (string|undefined), day: (string|undefined),\n * hour: (string|undefined), minute: (string|undefined),\n * second: (string|undefined), timeZoneName: (string|undefined),\n * hour12: (boolean|undefined)}}\n */\nIntl.DateTimeFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), type: (string|undefined)}=}\n * opt_options\n */\nIntl.PluralRules = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.PluralRules.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.PluralRules.prototype.resolvedOptions = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/select#Syntax\n * @param {number} number\n * @return {string}\n */\nIntl.PluralRules.prototype.select = function(number) {};\n\n/**\n * @constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * numeric: (string|undefined),\n * style: (string|undefined)}=}\n * opt_options\n */\nIntl.RelativeTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.RelativeTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/format#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {string}\n */\nIntl.RelativeTimeFormat.prototype.format = function(value, unit) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/formatToParts#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {Array}\n */\nIntl.RelativeTimeFormat.prototype.formatToParts = function(value, unit) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.RelativeTimeFormat.prototype.resolvedOptions = function() {};\n', +-"externs/w3c_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event specification.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n\n/**\n * @interface\n * @see https://dom.spec.whatwg.org/#interface-eventtarget\n */\nfunction EventTarget() {}\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!AddEventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\nEventTarget.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!EventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\nEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * @param {!Event} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\nEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @interface\n */\nfunction EventListener() {}\n\n/**\n * @param {!Event} evt\n * @return {undefined}\n */\nEventListener.prototype.handleEvent = function(evt) {};\n\n// The EventInit interface and the parameters to the Event constructor are part\n// of DOM Level 3 (suggested) and the DOM "Living Standard" (mandated). They are\n// included here as externs cannot be redefined. The same applies to other\n// *EventInit interfaces and *Event constructors throughout this file. See:\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-initializers\n// http://dom.spec.whatwg.org/#constructing-events\n// https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#event-constructors\n\n/**\n * @record\n * @see https://dom.spec.whatwg.org/#dictdef-eventinit\n */\nfunction EventInit() {}\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.bubbles;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.cancelable;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.composed;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {EventInit=} opt_eventInitDict\n */\nfunction Event(type, opt_eventInitDict) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.CAPTURING_PHASE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.AT_TARGET;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.BUBBLING_PHASE;\n\n/** @type {string} */\nEvent.prototype.type;\n\n/** @type {EventTarget} */\nEvent.prototype.target;\n\n/** @type {EventTarget} */\nEvent.prototype.currentTarget;\n\n/** @type {number} */\nEvent.prototype.eventPhase;\n\n/** @type {boolean} */\nEvent.prototype.bubbles;\n\n/** @type {boolean} */\nEvent.prototype.cancelable;\n\n/** @type {number} */\nEvent.prototype.timeStamp;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {Array|undefined}\n */\nEvent.prototype.path;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {function():Array|undefined}\n * @see https://www.w3.org/TR/shadow-dom/#widl-Event-deepPath\n */\nEvent.prototype.deepPath;\n\n/**\n * @return {undefined}\n */\nEvent.prototype.stopPropagation = function() {};\n\n/**\n * @return {undefined}\n */\nEvent.prototype.preventDefault = function() {};\n\n/**\n * @param {string} eventTypeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @return {undefined}\n */\nEvent.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://dom.spec.whatwg.org/#dictdef-customeventinit\n */\nfunction CustomEventInit() {}\n\n/** @type {(T|undefined)} */\nCustomEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {CustomEventInit=} opt_eventInitDict\n * @template T\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent\n */\nfunction CustomEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {string} eventType\n * @param {boolean} bubbles\n * @param {boolean} cancelable\n * @param {T} detail\n * @return {undefined}\n */\nCustomEvent.prototype.initCustomEvent = function(\n eventType, bubbles, cancelable, detail) {};\n\n/**\n * @type {T}\n */\nCustomEvent.prototype.detail;\n\n/**\n * @interface\n */\nfunction DocumentEvent() {}\n\n/**\n * @param {string} eventType\n * @return {!Event}\n */\nDocumentEvent.prototype.createEvent = function(eventType) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/uievents/#idl-uieventinit\n */\nfunction UIEventInit() {}\n\n/** @type {undefined|?Window} */\nUIEventInit.prototype.view;\n\n/** @type {undefined|number} */\nUIEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {UIEventInit=} opt_eventInitDict\n */\nfunction UIEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nUIEvent.prototype.detail;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @return {undefined}\n */\nUIEvent.prototype.initUIEvent = function(typeArg, canBubbleArg, cancelableArg,\n viewArg, detailArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#dictdef-eventmodifierinit\n */\nfunction EventModifierInit() {}\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.ctrlKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.shiftKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.altKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.metaKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierAltGraph;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierCapsLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFn;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFnLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierHyper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierNumLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierScrollLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSuper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbol;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbolLock;\n\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-mouseeventinit\n */\nfunction MouseEventInit() {}\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.button;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.buttons;\n\n/** @type {undefined|?EventTarget} */\nMouseEventInit.prototype.relatedTarget;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {MouseEventInit=} opt_eventInitDict\n */\nfunction MouseEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nMouseEvent.prototype.screenX;\n\n/** @type {number} */\nMouseEvent.prototype.screenY;\n\n/** @type {number} */\nMouseEvent.prototype.clientX;\n\n/** @type {number} */\nMouseEvent.prototype.clientY;\n\n/** @type {boolean} */\nMouseEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.altKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.metaKey;\n\n/** @type {number} */\nMouseEvent.prototype.button;\n\n/** @type {EventTarget} */\nMouseEvent.prototype.relatedTarget;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction MutationEvent() {}\n\n/** @type {Node} */\nMutationEvent.prototype.relatedNode;\n\n/** @type {string} */\nMutationEvent.prototype.prevValue;\n\n/** @type {string} */\nMutationEvent.prototype.newValue;\n\n/** @type {string} */\nMutationEvent.prototype.attrName;\n\n/** @type {number} */\nMutationEvent.prototype.attrChange;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Node} relatedNodeArg\n * @param {string} prevValueArg\n * @param {string} newValueArg\n * @param {string} attrNameArg\n * @param {number} attrChangeArg\n * @return {undefined}\n */\nMutationEvent.prototype.initMutationEvent = function(typeArg, canBubbleArg, cancelableArg, relatedNodeArg, prevValueArg, newValueArg, attrNameArg, attrChangeArg) {};\n\n\n// DOM3\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-keyboardeventinit\n */\nfunction KeyboardEventInit() {}\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.key;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.code;\n\n/** @type {undefined|number} */\nKeyboardEventInit.prototype.location;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.repeat;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.char;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.locale;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {KeyboardEventInit=} opt_eventInitDict\n */\nfunction KeyboardEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nKeyboardEvent.prototype.keyIdentifier;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.altKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.metaKey;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nKeyboardEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-focuseventinit\n */\nfunction FocusEventInit() {}\n\n/** @type {undefined|?EventTarget} */\nFocusEventInit.prototype.relatedTarget;\n\n\n/**\n * The FocusEvent interface provides specific contextual information associated\n * with Focus events.\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent\n *\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {FocusEventInit=} opt_eventInitDict\n */\nfunction FocusEvent(type, opt_eventInitDict) {}\n\n/** @type {EventTarget} */\nFocusEvent.prototype.relatedTarget;\n\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions\n * @record\n */\nvar EventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nEventListenerOptions.prototype.capture;\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions\n * @record\n * @extends {EventListenerOptions}\n */\nvar AddEventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.passive;\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.once;\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-inputeventinit\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEventInit() {}\n\n/** @type {undefined|?string} */\nInputEventInit.prototype.data;\n\n/** @type {undefined|boolean} */\nInputEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nInputEventInit.prototype.inputType;\n\n/** @type {undefined|?DataTransfer} */\nInputEventInit.prototype.dataTransfer;\n\n\n// TODO(charleyroy): Add getTargetRanges() once a consensus has been made\n// regarding how to structure these values. See\n// https://github.com/w3c/input-events/issues/38.\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {InputEventInit=} opt_eventInitDict\n * @see https://www.w3.org/TR/uievents/#interface-inputevent\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nInputEvent.prototype.data;\n\n/** @type {boolean} */\nInputEvent.prototype.isComposed;\n\n/** @type {string} */\nInputEvent.prototype.inputType;\n\n/** @type {?DataTransfer} */\nInputEvent.prototype.dataTransfer;\n', +-"externs/w3c_event3.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event Level 3 specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Events/#ecma-script-binding-ecma-binding\n *\n * @externs\n * @author ericdingle@google.com (Eric Dingle)\n */\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {string} keyIdentifierArg\n * @param {number} keyLocationArg\n * @param {string} modifiersList\n * @return {undefined}\n */\nKeyboardEvent.prototype.initKeyboardEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, keyIdentifierArg, keyLocationArg, modifiersList) {};\n\n/** @type {string} */\nKeyboardEvent.prototype.char;\n\n/** @type {string} */\nKeyboardEvent.prototype.code;\n\n/** @type {string} */\nKeyboardEvent.prototype.key;\n\n/** @type {number} */\nKeyboardEvent.prototype.location;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.repeat;\n\n/** @type {string} */\nKeyboardEvent.prototype.locale;\n\n/** @type {number} */\nMouseEvent.prototype.buttons;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nMouseEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/** @type {boolean} */\nEvent.prototype.defaultPrevented;\n\n/** @type {string} */\nEvent.prototype.namespaceURI;\n\n/** @return {undefined} */\nEvent.prototype.stopImmediatePropagation = function() {};\n', +-"externs/gecko_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s event specification by Gecko. This file depends on\n * w3c_event.js.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n/** @const {number} */ Event.prototype.HORIZONTAL_AXIS;\n/** @const {number} */ Event.prototype.VERTICAL_AXIS;\n/** @type {boolean} */ Event.prototype.altKey;\n/** @type {number} */ Event.prototype.axis;\n/** @type {number} */ Event.prototype.button;\n/** @type {boolean} */ Event.prototype.cancelBubble;\n/** @type {number} */ Event.prototype.charCode;\n/** @type {number} */ Event.prototype.clientX;\n/** @type {number} */ Event.prototype.clientY;\n/** @type {boolean} */ Event.prototype.ctrlKey;\n/** @type {EventTarget} */ Event.prototype.explicitOriginalTarget;\n/** @type {boolean} */ Event.prototype.isChar;\n/** @type {boolean} */ Event.prototype.isTrusted;\n/** @type {number} */ Event.prototype.keyCode;\n/** @type {number} */ Event.prototype.layerX;\n/** @type {number} */ Event.prototype.layerY;\n/** @type {boolean} */ Event.prototype.metaKey;\n/** @type {EventTarget} */ Event.prototype.originalTarget;\n/** @type {number} */ Event.prototype.pageX;\n/** @type {number} */ Event.prototype.pageY;\n/** @type {EventTarget|undefined} */ Event.prototype.relatedTarget;\n/** @type {number} */ Event.prototype.screenX;\n/** @type {number} */ Event.prototype.screenY;\n/** @type {boolean} */ Event.prototype.shiftKey;\n/** @type {Window} */ Event.prototype.view;\n/** @type {number} */ Event.prototype.which;\n\n/** @constructor */ function nsIDOMPageTransitionEvent() {}\n/** @type {boolean} */ nsIDOMPageTransitionEvent.prototype.persisted;\n\n//Methods\nEvent.prototype.initKeyEvent;\n/**\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {?Window=} viewArg\n * @param {?number=} detailArg\n * @param {number=} screenXArg\n * @param {number=} screenYArg\n * @param {number=} clientXArg\n * @param {number=} clientYArg\n * @param {boolean=} ctrlKeyArg\n * @param {boolean=} altKeyArg\n * @param {boolean=} shiftKeyArg\n * @param {boolean=} metaKeyArg\n * @param {?number=} buttonArg\n * @param {?EventTarget=} relatedTargetArg\n */\nEvent.prototype.initMouseEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, relatedTargetArg) {};\nEvent.prototype.initUIEvent;\nEvent.prototype.initMessageEvent;\nEvent.prototype.preventBubble;\nEvent.prototype.preventCapture;\n', +-"externs/ie_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C\'s event specification by IE in JScript. This file depends on\n * w3c_event.js.\n *\n * @see http://msdn.microsoft.com/en-us/library/ms535863.aspx\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/** @type {string} */\nEvent.prototype.Abstract;\n\n/** @type {boolean} */\nEvent.prototype.altLeft;\n\n/** @type {string} */\nEvent.prototype.Banner;\n\n/**\n * A ClipboardData on IE, but a DataTransfer on WebKit.\n * @see http://msdn.microsoft.com/en-us/library/ms535220.aspx\n * @type {(ClipboardData|undefined)}\n */\nEvent.prototype.clipboardData;\n\n/** @type {boolean} */\nEvent.prototype.contentOverflow;\n\n/** @type {boolean} */\nEvent.prototype.ctrlLeft;\n\n/** @type {string} */\nEvent.prototype.dataFld;\n\nEvent.prototype.domain;\n\n/** @type {Element} */\nEvent.prototype.fromElement;\n\n/** @type {string} */\nEvent.prototype.MoreInfo;\n\n/** @type {string} */\nEvent.prototype.nextPage;\n\n/** @type {number} */\nEvent.prototype.offsetX;\n\n/** @type {number} */\nEvent.prototype.offsetY;\n\n/** @type {string} */\nEvent.prototype.propertyName;\n\n/** @type {string} */\nEvent.prototype.qualifier;\n\n/** @type {number} */\nEvent.prototype.reason;\n\n/** @type {Object<*>} */\nEvent.prototype.recordset;\n\n/** @type {boolean} */\nEvent.prototype.repeat;\n\n/** @type {(boolean|string|undefined)} */\nEvent.prototype.returnValue;\n\n/** @type {string} */\nEvent.prototype.saveType;\n\nEvent.prototype.scheme;\n\n/** @type {boolean} */\nEvent.prototype.shiftLeft;\n\n/** @type {Window} */\nEvent.prototype.source;\n\n/** @type {Element} */\nEvent.prototype.srcElement;\n\nEvent.prototype.srcFilter;\n\n/** @type {string} */\nEvent.prototype.srcUrn;\n\n/** @type {Element} */\nEvent.prototype.toElement;\n\nEvent.prototype.userName;\n\n/** @type {number} */\nEvent.prototype.wheelDelta;\n\n/** @type {number} */\nEvent.prototype.x;\n\n/** @type {number} */\nEvent.prototype.y;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441257.aspx\n */\nfunction MSPointerPoint() {}\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerId;\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerType;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441233.aspx\n */\nfunction MSPointerEvent() {}\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_MOUSE;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_PEN;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_TOUCH;\n\n/** @type {number} */\nMSPointerEvent.prototype.height;\n\n/** @type {number} */\nMSPointerEvent.prototype.hwTimestamp;\n\n/** @type {boolean} */\nMSPointerEvent.prototype.isPrimary;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerType;\n\n/** @type {number} */\nMSPointerEvent.prototype.pressure;\n\n/** @type {number} */\nMSPointerEvent.prototype.rotation;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltY;\n\n/** @type {number} */\nMSPointerEvent.prototype.timeStamp;\n\n/** @type {number} */\nMSPointerEvent.prototype.width;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msReleasePointerCapture;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msSetPointerCapture;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {boolean} ctrlKeyArg\n * @param {boolean} altKeyArg\n * @param {boolean} shiftKeyArg\n * @param {boolean} metaKeyArg\n * @param {number} buttonArg\n * @param {Element} relatedTargetArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} widthArg\n * @param {number} heightArg\n * @param {number} pressure\n * @param {number} rotation\n * @param {number} tiltX\n * @param {number} tiltY\n * @param {number} pointerIdArg\n * @param {number} pointerType\n * @param {number} hwTimestampArg\n * @param {boolean} isPrimary\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441246.aspx\n */\nMSPointerEvent.prototype.initPointerEvent;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ie/hh968249(v=vs.85).aspx\n */\nfunction MSGesture() {}\n\n/**\n * @type {Element}\n */\nMSGesture.prototype.target;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSGesture.prototype.addPointer = function(pointerId) {};\n\nMSGesture.prototype.stop = function() {};\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.microsoft.com/en-us/library/ie/hh772076(v=vs.85).aspx\n */\nfunction MSGestureEvent() {}\n\n/** @type {number} */\nMSGestureEvent.prototype.expansion;\n\n/** @type {!MSGesture} */\nMSGestureEvent.prototype.gestureObject;\n\n/** @type {number} */\nMSGestureEvent.prototype.hwTimestamp;\n\n/** @type {number} */\nMSGestureEvent.prototype.rotation;\n\n/** @type {number} */\nMSGestureEvent.prototype.scale;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationX;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationY;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityAngular;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityExpansion;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityX;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityY;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} translationXArg\n * @param {number} translationYArg\n * @param {number} scaleArg\n * @param {number} expansionArg\n * @param {number} rotationArg\n * @param {number} velocityXArg\n * @param {number} velocityYArg\n * @param {number} velocityExpansionArg\n * @param {number} velocityAngularArg\n * @param {number} hwTimestampArg\n * @param {EventTarget} relatedTargetArg\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441187.aspx\n */\nMSGestureEvent.prototype.initGestureEvent;\n', +-"externs/webkit_event.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s\n * event specification by WebKit. This file depends on w3c_event.js.\n * All the provided definitions have been type annotated\n *\n * @externs\n * @author djlee@google.com (DJ Lee)\n */\n\n/** @type {number} */\nEvent.prototype.wheelDeltaX;\n\n/** @type {number} */\nEvent.prototype.wheelDeltaY;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://developer.apple.com/library/safari/documentation/AudioVideo/Reference/WebKitAnimationEventClassReference/WebKitAnimationEvent/WebKitAnimationEvent.html\n */\nfunction WebKitAnimationEvent() {}\n\n/**\n * @const {string}\n */\nWebKitAnimationEvent.prototype.animationName;\n\n/**\n * @const {number}\n */\nWebKitAnimationEvent.prototype.elapsedTime;\n', +-"externs/w3c_device_sensor_event.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s device orientation and device motion\n * events specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from http://dev.w3.org/geo/api/spec-source-orientation.\n *\n * @externs\n * @author lukaszbk@google.com (Lukasz Bieniasz-Krzywiec)\n */\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation\n */\nfunction DeviceOrientationEventInit() {}\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.alpha;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.beta;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.gamma;\n\n/** @type {boolean|undefined} */\nDeviceOrientationEventInit.prototype.absolute;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!DeviceOrientationEventInit=} opt_eventInitDict\n */\nfunction DeviceOrientationEvent(type, opt_eventInitDict) {}\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.alpha;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.beta;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.gamma;\n\n/** @type {boolean} */\nDeviceOrientationEvent.prototype.absolute;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassAccuracy\n */\nDeviceOrientationEvent.prototype.webkitCompassAccuracy;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassHeading\n */\nDeviceOrientationEvent.prototype.webkitCompassHeading;\n\n/**\n * @constructor\n */\nfunction DeviceAcceleration() {}\n\n/** @type {?number} */\nDeviceAcceleration.prototype.x;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.y;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.z;\n\n/**\n * @constructor\n */\nfunction DeviceRotationRate() {}\n\n/** @type {?number} */\nDeviceRotationRate.prototype.alpha;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.beta;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.gamma;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction DeviceMotionEvent() {}\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.acceleration;\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.accelerationIncludingGravity;\n\n/** @type {?DeviceRotationRate} */\nDeviceMotionEvent.prototype.rotationRate;\n\n/** @type {?number} */\nDeviceMotionEvent.prototype.interval;\n', ++var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview ECMAScript 3 Built-Ins. This include common extensions so this\n * is actually ES3+Reality.\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n * @author arv@9oo91e.qjz9zk (Erik Arvidsson)\n * @author johnlenz@9oo91e.qjz9zk (John Lenz)\n */\n\n\n// START ES6 RETROFIT CODE\n// symbol, Symbol and Symbol.iterator are actually ES6 types but some\n// base types require them to be part of their definition (such as Array).\n\n\n/**\n * @constructor\n * @param {*=} opt_description\n * @return {symbol}\n */\nfunction Symbol(opt_description) {}\n\n\n/**\n * @const {string|undefined}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description\n */\nSymbol.prototype.description;\n\n\n/**\n * @param {string} sym\n * @return {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for\n */\nSymbol.for = function(sym) {};\n\n\n/**\n * @param {symbol} sym\n * @return {string|undefined}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor\n */\nSymbol.keyFor = function(sym) {};\n\n\n// Well known symbols\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator\n * @const {symbol}\n */\nSymbol.asyncIterator;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance\n * @const {symbol}\n */\nSymbol.hasInstance;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable\n * @const {symbol}\n */\nSymbol.isConcatSpreadable;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator\n */\nSymbol.iterator;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/match\n * @const {symbol}\n */\nSymbol.match;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/matchAll\n * @const {symbol}\n */\nSymbol.matchAll;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/replace\n * @const {symbol}\n */\nSymbol.replace;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/search\n * @const {symbol}\n */\nSymbol.search;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species\n * @const {symbol}\n */\nSymbol.species;\n\n// /**\n// * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/split\n// * @const {symbol}\n// */\n// Symbol.split;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive\n */\nSymbol.toPrimitive;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag\n */\nSymbol.toStringTag;\n\n/**\n * @const {symbol}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/unscopables\n */\nSymbol.unscopables;\n\n\n/**\n * @record\n * @template VALUE\n */\nfunction IIterableResult() {};\n\n/** @type {boolean} */\nIIterableResult.prototype.done;\n\n/** @type {VALUE} */\nIIterableResult.prototype.value;\n\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction Iterable() {}\n\n// TODO(johnlenz): remove the suppression when the compiler understands\n// "symbol" natively\n/**\n * @return {!Iterator}\n * @suppress {externsValidation}\n */\nIterable.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol\n */\nfunction Iterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n */\nIterator.prototype.next = function(opt_value) {};\n\n\n/**\n * Use this to indicate a type is both an Iterator and an Iterable.\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @extends {Iterator}\n * @extends {Iterable}\n * @template T, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction IteratorIterable() {}\n\n// END ES6 RETROFIT CODE\n\n\n/**\n * @interface\n * @template KEY1, VALUE1\n */\nfunction IObject() {}\n\n/**\n * @record\n * @extends {IObject}\n * @template VALUE2\n */\nfunction IArrayLike() {}\n\n/** @type {number} */\nIArrayLike.prototype.length;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments\n */\nfunction Arguments() {}\n\n/**\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee\n */\nArguments.prototype.callee;\n\n/**\n * Use the non-standard {@see Function.prototype.caller} property of a function\n * object instead.\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Functions/arguments/caller\n * @deprecated\n */\nArguments.prototype.caller;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/length\n */\nArguments.prototype.length;\n\n/**\n * Not actually a global variable, when running in a browser environment. But\n * we need it in order for the type checker to typecheck the "arguments"\n * variable in a function correctly.\n *\n * TODO(tbreisacher): There should be a separate \'arguments\' variable of type\n * `Array`, in the d8 externs.\n *\n * @type {!Arguments}\n * @see http://developer.m0z111a.qjz9zk/en/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments\n */\nvar arguments;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity\n * @const\n */\nvar Infinity;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN\n * @const\n */\nvar NaN;\n\n/**\n * @type {undefined}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined\n * @const\n */\nvar undefined;\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI\n */\nfunction decodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} when used wrongly.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n */\nfunction decodeURIComponent(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI\n */\nfunction encodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @throws {URIError} if one attempts to encode a surrogate which is not part of\n * a high-low pair.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\n */\nfunction encodeURIComponent(uri) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction escape(str) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction unescape(str) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite\n */\nfunction isFinite(num) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN\n */\nfunction isNaN(num) {}\n\n/**\n * @param {*} num\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat\n */\nfunction parseFloat(num) {}\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {*} num\n * @param {number|undefined} base\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt\n */\nfunction parseInt(num, base) {}\n\n/**\n * @param {string} code\n * @return {*}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval\n */\nfunction eval(code) {}\n\n\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {!Object}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n */\nfunction Object(opt_value) {}\n\n/**\n * The constructor of the current object.\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n */\nObject.prototype.constructor = function() {};\n\n/**\n * Binds an object\'s property to a function to be called when that property is\n * looked up.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineGetter__ = function(sprop, fun) {};\n\n/**\n * Binds an object\'s property to a function to be called when an attempt is made\n * to set that property.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineSetter\n * @return {undefined}\n * @deprecated\n */\nObject.prototype.__defineSetter__ = function(sprop, fun) {};\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nObject.prototype.hasOwnProperty = function(propertyName) {};\n\n/**\n * Returns whether an object exists in another object\'s prototype chain.\n *\n * @param {Object} other\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf\n */\nObject.prototype.isPrototypeOf = function(other) {};\n\n/**\n * Return the function bound as a getter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * getter should be returned\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupGetter\n */\nObject.prototype.__lookupGetter__ = function(sprop) {};\n\n/**\n * Return the function bound as a setter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * setter should be returned.\n * @return {Function}\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupSetter\n */\nObject.prototype.__lookupSetter__ = function(sprop) {};\n\n/**\n * Executes a function when a non-existent method is called on an object.\n * Mozilla-only.\n *\n * @param {Function} fun\n * @return {*}\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod\n */\nObject.prototype.__noSuchMethod__ = function(fun) {};\n\n/**\n * Points to an object\'s context. For top-level objects, this is the e.g. window.\n * Mozilla-only.\n *\n * @type {Object}\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/parent\n */\nObject.prototype.__parent__;\n\n/**\n * Points to the object which was used as prototype when the object was instantiated.\n * Mozilla-only.\n *\n * Will be null on Object.prototype.\n *\n * @type {Object}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto\n */\nObject.prototype.__proto__;\n\n/**\n * Determine whether the specified property in an object can be enumerated by a\n * for..in loop, with the exception of properties inherited through the\n * prototype chain.\n *\n * @param {string|symbol} propertyName\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable\n */\nObject.prototype.propertyIsEnumerable = function(propertyName) {};\n\n/**\n * Returns a localized string representing the object.\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toLocaleString\n */\nObject.prototype.toLocaleString = function() {};\n\n/**\n * Returns a string representing the source code of the object.\n * Mozilla-only.\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource\n */\nObject.prototype.toSource = function() {};\n\n/**\n * Returns a string representing the object.\n * @this {*}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n */\nObject.prototype.toString = function() {};\n\n/**\n * Returns the object\'s `this` value.\n * @return {*}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\nObject.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {...*} var_args\n * @throws {Error}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\n */\nfunction Function(var_args) {}\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call\n */\nFunction.prototype.call = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply\n */\nFunction.prototype.apply = function(var_args) {};\n\nFunction.prototype.arguments;\n\n/**\n * @type {number}\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity\n */\nFunction.prototype.arity;\n\n/**\n * Nonstandard; Mozilla and JScript only.\n * @type {Function}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller\n */\nFunction.prototype.caller;\n\n/**\n * Nonstandard.\n * @type {?}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/displayName\n */\nFunction.prototype.displayName;\n\n/**\n * Expected number of arguments.\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length\n */\nFunction.prototype.length;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n */\nFunction.prototype.name;\n\n/**\n * @this {Function}\n * @return {string}\n * @nosideeffects\n * @override\n */\nFunction.prototype.toString = function() {};\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @param {...*} var_args\n * @return {!Array}\n * @nosideeffects\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\n */\nfunction Array(var_args) {}\n\n/**\n * @return {Iterator}\n * @suppress {externsValidation}\n */\nArray.prototype[Symbol.iterator] = function() {};\n\n// Functions:\n\n/**\n * Returns a new array comprised of this array joined with other array(s)\n * and/or value(s).\n *\n * @param {...*} var_args\n * @return {!Array}\n * @this {*}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat\n */\nArray.prototype.concat = function(var_args) {};\n\n/**\n * Joins all elements of an array into a string.\n *\n * @param {*=} opt_separator Specifies a string to separate each element of the\n * array. The separator is converted to a string if necessary. If omitted,\n * the array elements are separated with a comma.\n * @return {string}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join\n */\nArray.prototype.join = function(opt_separator) {};\n\n/**\n * Removes the last element from an array and returns that element.\n *\n * @return {T}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop\n */\nArray.prototype.pop = function() {};\n\n// TODO(bradfordcsmith): remove "undefined" from the var_args of push\n/**\n * Mutates an array by appending the given elements and returning the new\n * length of the array.\n *\n * @param {...(T|undefined)} var_args\n * @return {number} The new length of the array.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push\n */\nArray.prototype.push = function(var_args) {};\n\n/**\n * Transposes the elements of an array in place: the first array element becomes the\n * last and the last becomes the first. The mutated array is also returned.\n *\n * @return {THIS} A reference to the original modified array.\n * @this {THIS}\n * @template THIS\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse\n */\nArray.prototype.reverse = function() {};\n\n/**\n * Removes the first element from an array and returns that element. This\n * method changes the length of the array.\n *\n * @this {IArrayLike}\n * @modifies {this}\n * @return {T}\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift\n */\nArray.prototype.shift = function() {};\n\n/**\n * Extracts a section of an array and returns a new array.\n *\n * @param {?number=} begin Zero-based index at which to begin extraction.\n * @param {?number=} end Zero-based index at which to end extraction. slice\n * extracts up to but not including end.\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n */\nArray.prototype.slice = function(begin, end) {};\n\n/**\n * Sorts the elements of an array in place.\n *\n * @param {function(T,T):number=} opt_compareFn Specifies a function that\n * defines the sort order.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @return {!Array}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n */\nArray.prototype.sort = function(opt_compareFn) {};\n\n/**\n * Changes the content of an array, adding new elements while removing old\n * elements.\n *\n * @param {?number=} index Index at which to start changing the array. If\n * negative, will begin that many elements from the end.\n * @param {?number=} howMany An integer indicating the number of old array\n * elements to remove.\n * @param {...T} var_args\n * @return {!Array}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice\n */\nArray.prototype.splice = function(index, howMany, var_args) {};\n\n/**\n * @return {string}\n * @this {Object}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSource\n */\nArray.prototype.toSource;\n\n/**\n * @this {Array}\n * @return {string}\n * @nosideeffects\n * @override\n */\nArray.prototype.toString = function() {};\n\n/**\n * Adds one or more elements to the beginning of an array and returns the new\n * length of the array.\n *\n * @param {...*} var_args\n * @return {number} The new length of the array\n * @this {IArrayLike}\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift\n */\nArray.prototype.unshift = function(var_args) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * left-to-right) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce\n */\nArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * right-to-left) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight\n */\nArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nArray.prototype.every = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nArray.prototype.filter = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n * @return {undefined}\n */\nArray.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.prototype.indexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.prototype.lastIndexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S,R\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nArray.prototype.map = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nArray.prototype.some = function(callback, opt_thisobj) {};\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/index\n */\nArray.prototype.index;\n\n/**\n * @type {?string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/input\n */\nArray.prototype.input;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length\n */\nArray.prototype.length;\n\n/**\n * Introduced in 1.8.5.\n * @param {*} arr\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Array/isArray\n */\nArray.isArray = function(arr) {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n */\nfunction Boolean(opt_value) {}\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/toSource\n * @override\n */\nBoolean.prototype.toSource = function() {};\n\n/**\n * @this {boolean|Boolean}\n * @return {string}\n * @nosideeffects\n * @override\n */\nBoolean.prototype.toString = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/valueOf\n * @override\n */\nBoolean.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number\n */\nfunction Number(opt_value) {}\n\n/**\n * @this {Number|number}\n * @param {number=} opt_fractionDigits\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toExponential\n */\nNumber.prototype.toExponential = function(opt_fractionDigits) {};\n\n/**\n * @this {Number|number}\n * @param {*=} opt_digits\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed\n */\nNumber.prototype.toFixed = function(opt_digits) {};\n\n/**\n * @this {Number|number}\n * @param {number=} opt_precision\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision\n */\nNumber.prototype.toPrecision = function(opt_precision) {};\n\n/**\n * Returns a string representing the number.\n * @this {Number|number}\n * @param {(number|Number)=} opt_radix An optional radix.\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString\n * @override\n */\nNumber.prototype.toString = function(opt_radix) {};\n\n// Properties.\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE\n */\nNumber.MAX_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE\n */\nNumber.MIN_VALUE;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NaN\n */\nNumber.NaN;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY\n */\nNumber.NEGATIVE_INFINITY;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY\n */\nNumber.POSITIVE_INFINITY;\n\n\n/**\n * @const\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math\n */\nvar Math = {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs\n */\nMath.abs = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos\n */\nMath.acos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin\n */\nMath.asin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan\n */\nMath.atan = function(x) {};\n\n/**\n * @param {?} y\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2\n */\nMath.atan2 = function(y, x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil\n */\nMath.ceil = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos\n */\nMath.cos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp\n */\nMath.exp = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor\n */\nMath.floor = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log\n */\nMath.log = function(x) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max\n */\nMath.max = function(var_args) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min\n */\nMath.min = function(var_args) {};\n\n/**\n * @param {?} x\n * @param {?} y\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow\n */\nMath.pow = function(x, y) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random\n */\nMath.random = function() {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n */\nMath.round = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin\n */\nMath.sin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt\n */\nMath.sqrt = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan\n */\nMath.tan = function(x) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/toSource\n */\nMath.toSource = function() {};\n\n// Properties:\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E\n */\nMath.E;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2\n */\nMath.LN2;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10\n */\nMath.LN10;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E\n */\nMath.LOG2E;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E\n */\nMath.LOG10E;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI\n */\nMath.PI;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2\n */\nMath.SQRT1_2;\n\n/**\n * @const {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT2\n */\nMath.SQRT2;\n\n\n/**\n * @param {?=} opt_yr_num\n * @param {?=} opt_mo_num\n * @param {?=} opt_day_num\n * @param {?=} opt_hr_num\n * @param {?=} opt_min_num\n * @param {?=} opt_sec_num\n * @param {?=} opt_ms_num\n * @constructor\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\n */\nfunction Date(opt_yr_num, opt_mo_num, opt_day_num, opt_hr_num, opt_min_num,\n opt_sec_num, opt_ms_num) {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now\n */\nDate.now = function() {};\n\n/**\n * Parses a string representation of a date, and returns the number\n * of milliseconds since January 1, 1970, 00:00:00, local time.\n * @param {*} date\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse\n */\nDate.parse = function(date) {};\n\n/**\n * @param {number} year\n * @param {number} month\n * @param {number=} opt_date\n * @param {number=} opt_hours\n * @param {number=} opt_minute\n * @param {number=} opt_second\n * @param {number=} opt_ms\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC\n */\nDate.UTC = function(year, month,\n opt_date, opt_hours, opt_minute, opt_second, opt_ms) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate\n */\nDate.prototype.getDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay\n */\nDate.prototype.getDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth\n */\nDate.prototype.getMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear\n */\nDate.prototype.getFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear\n */\nDate.prototype.getYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours\n */\nDate.prototype.getHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes\n */\nDate.prototype.getMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds\n */\nDate.prototype.getSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds\n */\nDate.prototype.getMilliseconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime\n */\nDate.prototype.getTime = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n */\nDate.prototype.getTimezoneOffset = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate\n */\nDate.prototype.getUTCDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay\n */\nDate.prototype.getUTCDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth\n */\nDate.prototype.getUTCMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear\n */\nDate.prototype.getUTCFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours\n */\nDate.prototype.getUTCHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes\n */\nDate.prototype.getUTCMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds\n */\nDate.prototype.getUTCSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds\n */\nDate.prototype.getUTCMilliseconds = function() {};\n\n/**\n * Sets the day of the month for a specified date according to local time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate\n * @return {number}\n */\nDate.prototype.setDate = function(dayValue) {};\n\n/**\n * Set the month for a specified date according to local time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth\n * @return {number}\n */\nDate.prototype.setMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear\n * @return {number}\n */\nDate.prototype.setFullYear =\n function(yearValue, opt_monthValue, opt_dayValue) {};\n\n/**\n * Sets the year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @deprecated\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear\n * @return {number}\n */\nDate.prototype.setYear = function(yearValue) {};\n\n/**\n * Sets the hours for a specified date according to local time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours\n * @return {number}\n */\nDate.prototype.setHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to local time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes\n * @return {number}\n */\nDate.prototype.setMinutes =\n function(minutesValue, opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the seconds for a specified date according to local time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds\n * @return {number}\n */\nDate.prototype.setSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to local time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds\n * @return {number}\n */\nDate.prototype.setMilliseconds = function(millisecondsValue) {};\n\n/**\n * Sets the Date object to the time represented by a number of milliseconds\n * since January 1, 1970, 00:00:00 UTC.\n *\n * @param {number} timeValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime\n * @return {number}\n */\nDate.prototype.setTime = function(timeValue) {};\n\n/**\n * Sets the day of the month for a specified date according to universal time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate\n * @return {number}\n */\nDate.prototype.setUTCDate = function(dayValue) {};\n\n/**\n * Sets the month for a specified date according to universal time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth\n * @return {number}\n */\nDate.prototype.setUTCMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to universal time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear\n * @return {number}\n */\nDate.prototype.setUTCFullYear = function(yearValue, opt_monthValue,\n opt_dayValue) {};\n\n/**\n * Sets the hour for a specified date according to universal time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours\n * @return {number}\n */\nDate.prototype.setUTCHours = function(hoursValue, opt_minutesValue,\n opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to universal time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes\n * @return {number}\n */\nDate.prototype.setUTCMinutes = function(minutesValue, opt_secondsValue,\n opt_msValue) {};\n\n\n/**\n * Sets the seconds for a specified date according to universal time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\n * @return {number}\n */\nDate.prototype.setUTCSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to universal time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds\n * @return {number}\n */\nDate.prototype.setUTCMilliseconds = function(millisecondsValue) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toSource\n * @override\n */\nDate.prototype.toSource = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Date/toDateString\n */\nDate.prototype.toDateString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toGMTString\n */\nDate.prototype.toGMTString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString\n */\nDate.prototype.toTimeString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString\n */\nDate.prototype.toUTCString = function() {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString\n */\nDate.prototype.toLocaleDateString = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} formatString\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleFormat\n */\nDate.prototype.toLocaleFormat = function(formatString) {};\n\n/**\n * @param {string|Array=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.3.1\n * @override\n */\nDate.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString\n */\nDate.prototype.toLocaleTimeString = function(opt_locales, opt_options) {};\n\n/**\n * @this {Date}\n * @return {string}\n * @nosideeffects\n * @override\n */\nDate.prototype.toString = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf\n */\nDate.prototype.valueOf;\n\n/**\n * @constructor\n * @implements {Iterable}\n * @param {*=} opt_str\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n */\nfunction String(opt_str) {}\n\n/**\n * @param {...number} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode\n */\nString.fromCharCode = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/anchor\n */\nString.prototype.anchor = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/big\n */\nString.prototype.big = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/blink\n */\nString.prototype.blink = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/bold\n */\nString.prototype.bold = function() {};\n\n/**\n * Returns the specified character from a string.\n *\n * @this {String|string}\n * @param {number} index\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt\n */\nString.prototype.charAt = function(index) {};\n\n/**\n * Returns a number indicating the Unicode value of the character at the given\n * index.\n *\n * @this {String|string}\n * @param {number=} opt_index\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n */\nString.prototype.charCodeAt = function(opt_index) {};\n\n/**\n * Combines the text of two or more strings and returns a new string.\n *\n * @this {String|string}\n * @param {...*} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat\n */\nString.prototype.concat = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fixed\n */\nString.prototype.fixed = function() {};\n\n/**\n * @this {String|string}\n * @param {string} color\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontcolor\n */\nString.prototype.fontcolor = function(color) {};\n\n/**\n * @this {String|string}\n * @param {number} size\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontsize\n */\nString.prototype.fontsize = function(size) {};\n\n/**\n * Returns the index within the calling String object of the first occurrence\n * of the specified value, starting the search at fromIndex, returns -1 if the\n * value is not found.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf\n */\nString.prototype.indexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/italics\n */\nString.prototype.italics = function() {};\n\n/**\n * Returns the index within the calling String object of the last occurrence of\n * the specified value, or -1 if not found. The calling string is searched\n * backward, starting at fromIndex.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf\n */\nString.prototype.lastIndexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @param {string} hrefAttribute\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link\n */\nString.prototype.link = function(hrefAttribute) {};\n\n/**\n * Returns a number indicating whether a reference string comes before or after\n * or is the same as the given string in sort order.\n *\n * @this {*}\n * @param {?string} compareString\n * @param {string|Array=} locales\n * @param {Object=} options\n * @return {number}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/En/Core_JavaScript_1.5_Reference/Objects/String/localeCompare\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.1.1\n */\nString.prototype.localeCompare = function(compareString, locales, options) {};\n\n/**\n * Used to retrieve the matches when matching a string against a regular\n * expression.\n *\n * @this {String|string}\n * @param {*} regexp\n * @return {Array} This should really return an Array with a few\n * special properties, but we do not have a good way to model this in\n * our type system. Also see Regexp.prototype.exec.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match\n */\nString.prototype.match = function(regexp) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/quote\n */\nString.prototype.quote = function() {};\n\n/**\n * Finds a match between a regular expression and a string, and replaces the\n * matched substring with a new substring.\n *\n * This may have side-effects if the replacement function has side-effects.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @param {?string|function(string, ...?):*} replacement\n * @return {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace\n */\nString.prototype.replace = function(pattern, replacement) {};\n\n/**\n * Executes the search for a match between a regular expression and this String\n * object.\n *\n * @this {String|string}\n * @param {RegExp|string} pattern\n * @return {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search\n */\nString.prototype.search = function(pattern) {};\n\n/**\n * @this {String|string}\n * @param {number} begin\n * @param {number=} opt_end\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\n */\nString.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/small\n */\nString.prototype.small = function() {};\n\n/**\n * @this {String|string}\n * @param {*=} opt_separator\n * @param {number=} opt_limit\n * @return {!Array}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split\n */\nString.prototype.split = function(opt_separator, opt_limit) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/strike\n */\nString.prototype.strike = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sub\n */\nString.prototype.sub = function() {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_length\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr\n */\nString.prototype.substr = function(start, opt_length) {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_end\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring\n */\nString.prototype.substring = function(start, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sup\n */\nString.prototype.sup = function() {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase\n */\nString.prototype.toLocaleUpperCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @param {(string|Array)=} opt_locales\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase\n */\nString.prototype.toLocaleLowerCase = function(opt_locales) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase\n */\nString.prototype.toLowerCase = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase\n */\nString.prototype.toUpperCase = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toSource\n * @override\n */\nString.prototype.toSource = function() {};\n\n/**\n * @this {string|String}\n * @return {string}\n * @nosideeffects\n * @override\n */\nString.prototype.toString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/valueOf\n */\nString.prototype.valueOf;\n\n/**\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length\n */\nString.prototype.length;\n\n/**\n * @constructor\n * @param {*=} opt_pattern\n * @param {*=} opt_flags\n * @return {!RegExp}\n * @throws {SyntaxError} if opt_pattern is an invalid pattern.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nfunction RegExp(opt_pattern, opt_flags) {}\n\n/**\n * @param {*} pattern\n * @param {*=} opt_flags\n * @return {void}\n * @modifies {this}\n * @deprecated\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/x9cswe0z(v=VS.85).aspx\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/compile\n */\nRegExp.prototype.compile = function(pattern, opt_flags) {};\n\n/**\n * @param {*} str The string to search.\n * @return {?RegExpResult}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/z908hy33(VS.85).aspx\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec\n */\nRegExp.prototype.exec = function(str) {};\n\n/**\n * @param {*} str The string to search.\n * @return {boolean} Whether the string was matched.\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test\n */\nRegExp.prototype.test = function(str) {};\n\n/**\n * @this {RegExp}\n * @return {string}\n * @nosideeffects\n * @override\n */\nRegExp.prototype.toString = function() {};\n\n/**\n * @constructor\n * @extends {Array}\n */\nvar RegExpResult = function() {};\n\n\n/** @type {number} */\nRegExpResult.prototype.index;\n\n\n/** @type {string} */\nRegExpResult.prototype.input;\n\n\n/** @type {number} */\nRegExpResult.prototype.length;\n\n\n/**\n * Not actually part of ES3; was added in 2018.\n * https://github.com/tc39/proposal-regexp-named-groups\n *\n * @type {!Object}\n */\nRegExpResult.prototype.groups;\n\n\n// Constructor properties:\n\n/**\n * The string against which the last regexp was matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_input.html\n */\nRegExp.input;\n\n/**\n * The last matched characters.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastMatch.html\n */\nRegExp.lastMatch;\n\n/**\n * The last matched parenthesized substring, if any.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastParen.html\n */\nRegExp.lastParen;\n\n/**\n * The substring of the input up to the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_leftContext.html\n */\nRegExp.leftContext;\n\n/**\n * The substring of the input after the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_rightContext.html\n */\nRegExp.rightContext;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$1;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$2;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$3;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$4;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$5;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$6;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$7;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$8;\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$9;\n\n// Prototype properties:\n\n/**\n * Whether to test the regular expression against all possible matches\n * in a string, or only against the first.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global\n */\nRegExp.prototype.global;\n\n/**\n * Whether to ignore case while attempting a match in a string.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase\n */\nRegExp.prototype.ignoreCase;\n\n/**\n * The index at which to start the next match.\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex\n */\nRegExp.prototype.lastIndex;\n\n/**\n * Whether or not the regular expression uses lastIndex.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky\n */\nRegExp.prototype.sticky;\n\n/**\n * Whether or not to search in strings across multiple lines.\n * @type {boolean}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline\n */\nRegExp.prototype.multiline;\n\n/**\n * The text of the pattern.\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/source\n */\nRegExp.prototype.source;\n\n/**\n * The flags the regex was created with.\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags\n */\nRegExp.prototype.flags;\n\n/**\n * @constructor\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!Error}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n */\nfunction Error(opt_message, opt_file, opt_line) {}\n\n\n/**\n * Chrome/v8 specific, altering the maximum depth of the stack trace\n * (10 by default).\n * @type {number}\n * @see http://code.9oo91e.qjz9zk/p/v8/wiki/JavaScriptStackTraceApi\n */\nError.stackTraceLimit;\n\n\n/**\n * Chrome/v8 specific, adds a stack trace to the error object. The optional\n * constructorOpt parameter allows you to pass in a function value. When\n * collecting the stack trace all frames above the topmost call to this\n * function, including that call, will be left out of the stack trace.\n * @param {Object} error The object to add the stack trace to.\n * @param {Function=} opt_constructor A function in the stack trace\n * @see http://code.9oo91e.qjz9zk/p/v8/wiki/JavaScriptStackTraceApi\n * @return {undefined}\n */\nError.captureStackTrace = function(error, opt_constructor){};\n\n\n/**\n * IE-only.\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/2w6a45b5.aspx\n */\nError.prototype.description;\n\n\n/**\n * Mozilla-only.\n * @type {number}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/lineNumber\n */\nError.prototype.lineNumber;\n\n/**\n * Mozilla-only\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/fileName\n */\nError.prototype.fileName;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name\n */\nError.prototype.name;\n\n/**\n * @type {string}\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message\n */\nError.prototype.message;\n\n/**\n * Doesn\'t seem to exist, but closure/debug.js references it.\n */\nError.prototype.sourceURL;\n\n/** @type {string} */\nError.prototype.stack;\n\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!EvalError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError\n */\nfunction EvalError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!RangeError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError\n */\nfunction RangeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!ReferenceError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError\n */\nfunction ReferenceError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!SyntaxError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError\n */\nfunction SyntaxError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!TypeError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n */\nfunction TypeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!URIError}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError\n */\nfunction URIError(opt_message, opt_file, opt_line) {}\n\n\n// JScript extensions.\n// @see http://msdn.m1cr050ft.qjz9zk/en-us/library/894hfyb4(VS.80).aspx\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/7sw4ddf8.aspx\n * @type {function(new:?, string, string=)}\n * @deprecated\n */\nfunction ActiveXObject(progId, opt_location) {}\n',"externs/es5.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 5.\n * @see https://es5.github.io/\n * @externs\n * @author djlee@9oo91e.qjz9zk (DJ Lee)\n */\n\n\n/**\n * @param {?Object|undefined} selfObj Specifies the object to which |this|\n * should point when the function is run. If the value is null or undefined,\n * it will default to the global object.\n * @param {...*} var_args Additional arguments that are partially\n * applied to fn.\n * @return {!Function} A partially-applied form of the Function on which\n * bind() was invoked as a method.\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Function/bind\n */\nFunction.prototype.bind = function(selfObj, var_args) {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/String/Trim\n */\nString.prototype.trim = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/String/TrimLeft\n */\nString.prototype.trimLeft = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/String/TrimRight\n */\nString.prototype.trimRight = function() {};\n\n\n/**\n * A object property descriptor used by Object.create, Object.defineProperty,\n * Object.defineProperties, Object.getOwnPropertyDescriptor.\n *\n * @record\n * @template THIS\n */\nfunction ObjectPropertyDescriptor() {}\n\n/** @type {(*|undefined)} */\nObjectPropertyDescriptor.prototype.value;\n\n/** @type {(function(this: THIS):?)|undefined} */\nObjectPropertyDescriptor.prototype.get;\n\n/** @type {(function(this: THIS, ?):void)|undefined} */\nObjectPropertyDescriptor.prototype.set;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.writable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.enumerable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.configurable;\n\n\n/**\n * @param {?Object} proto\n * @param {?Object=} opt_properties A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/create\n */\nObject.create = function(proto, opt_properties) {};\n\n\n/**\n * @param {!Object} obj\n * @param {string|symbol} prop\n * @param {!Object} descriptor A ObjectPropertyDescriptor.\n * @return {!Object}\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/defineProperty\n */\nObject.defineProperty = function(obj, prop, descriptor) {};\n\n\n/**\n * @param {!Object} obj\n * @param {!Object} props A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/defineProperties\n */\nObject.defineProperties = function(obj, props) {};\n\n\n/**\n * @param {T} obj\n * @param {string|symbol} prop\n * @return {!ObjectPropertyDescriptor|undefined}\n * @nosideeffects\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor\n */\nObject.getOwnPropertyDescriptor = function(obj, prop) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/keys\n */\nObject.keys = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames\n */\nObject.getOwnPropertyNames = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {Object}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf\n */\nObject.getPrototypeOf = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/preventExtensions\n */\nObject.preventExtensions = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/seal\n */\nObject.seal = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/freeze\n */\nObject.freeze = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/isExtensible\n */\nObject.isExtensible = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/isSealed\n */\nObject.isSealed = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Object/isFrozen\n */\nObject.isFrozen = function(obj) {};\n\n\n/**\n * We acknowledge that this function does not exist on the `Object.prototype`\n * and is declared in this file for other reasons.\n *\n * When `toJSON` is defined as a property on an object it can be used in\n * conjunction with the JSON.stringify() function.\n *\n * It is defined here to:\n * (1) Prevent the compiler from renaming the property on internal classes.\n * (2) Enforce that the signature is correct for users defining it.\n *\n * @param {string=} opt_key The JSON key for this object.\n * @return {*} The serializable representation of this object. Note that this\n * need not be a string. See http://goo.gl.qjz9zk/PEUvs.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior\n */\nObject.prototype.toJSON = function(opt_key) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/JavaScript/Reference/Global_Objects/Date/toISOString\n * @return {string}\n */\nDate.prototype.toISOString = function() {};\n\n\n/**\n * @param {*=} opt_ignoredKey\n * @return {string}\n * @override\n */\nDate.prototype.toJSON = function(opt_ignoredKey) {};\n\n\n/**\n * A fake type to model the JSON object.\n * @constructor\n */\nfunction JSONType() {}\n\n\n/**\n * @param {string} jsonStr The string to parse.\n * @param {(function(this:?, string, *) : *)=} opt_reviver\n * @return {*} The JSON object.\n * @throws {Error}\n */\nJSONType.prototype.parse = function(jsonStr, opt_reviver) {};\n\n\n/**\n * @param {*} jsonObj Input object.\n * @param {(Array|(function(this:?, string, *) : *)|null)=} opt_replacer\n * @param {(number|string)=} opt_space\n * @return {string} JSON string which represents jsonObj.\n * @throws {Error}\n */\nJSONType.prototype.stringify = function(jsonObj, opt_replacer, opt_space) {};\n\n\n/**\n * @type {!JSONType}\n * @suppress {duplicate}\n */\nvar JSON;\n', ++"externs/es6.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 and later.\n * @see https://tc39.github.io/ecma262/\n * @see https://www.khronos.org/registry/typedarray/specs/latest/\n * @externs\n */\n\n/**\n * Some es6 definitions:\n * Symbol, IIterableResult, Iterable, IteratorIterable, Iterator,\n * IteratorIterable moved to es3 file, because some base type requires them, and\n * we want to keep them together. If you add new externs related to those types\n * define them together in the es3 file.\n */\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything. https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator\n * @extends {IteratorIterable}\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n */\nfunction Generator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n * @override\n */\nGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!IIterableResult}\n */\nGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!IIterableResult}\n */\nGenerator.prototype.throw = function(exception) {};\n\n\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log10 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log2 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log1p = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.expm1 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.tanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.acosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.asinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.atanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.trunc = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sign = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cbrt = function(value) {};\n\n/**\n * @param {...number} var_args\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot\n */\nMath.hypot = function(var_args) {};\n\n/**\n * @param {number} value1\n * @param {number} value2\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n */\nMath.imul = function(value1, value2) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n */\nMath.clz32 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n */\nMath.fround = function(value) {};\n\n\n/**\n * @param {*} a\n * @param {*} b\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nObject.is;\n\n\n/**\n * Returns a language-sensitive string representation of this number.\n * @param {(string|!Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.2.1\n * @override\n */\nNumber.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * Returns the wrapped primitive value of this Number object.\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/valueOf\n * @override\n */\nNumber.prototype.valueOf = function() {};\n\n\n/**\n * Pads the end of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n */\nString.prototype.padEnd = function(targetLength, opt_padString) {};\n\n/**\n * Pads the start of the string so that it reaches the given length.\n * NOTE: this is an ES2017 (ES8) extern.\n *\n * @param {number} targetLength The target length.\n * @param {string=} opt_padString The string to pad with.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n */\nString.prototype.padStart = function(targetLength, opt_padString) {};\n\n/**\n * Repeats the string the given number of times.\n *\n * @param {number} count The number of times the string is repeated.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n */\nString.prototype.repeat = function(count) {};\n\n/**\n * @constructor\n * @extends {Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-gettemplateobject\n */\nvar ITemplateArray = function() {};\n\n/**\n * @type {!Array}\n */\nITemplateArray.prototype.raw;\n\n/**\n * @param {!ITemplateArray} template\n * @param {...*} var_args Substitution values.\n * @return {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n */\nString.raw = function(template, var_args) {};\n\n\n/**\n * @param {number} codePoint\n * @param {...number} var_args Additional codepoints\n * @return {string}\n */\nString.fromCodePoint = function(codePoint, var_args) {};\n\n\n/**\n * @param {number} index\n * @return {number}\n * @nosideeffects\n */\nString.prototype.codePointAt = function(index) {};\n\n\n/**\n * @param {string=} opt_form\n * @return {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nString.prototype.normalize = function(opt_form) {};\n\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n */\nString.prototype.startsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n */\nString.prototype.endsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n */\nString.prototype.includes = function(searchString, opt_position) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart\n */\nString.prototype.trimStart = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd\n */\nString.prototype.trimEnd = function() {};\n\n\n/**\n * @see http://dev.w3.org/html5/postmsg/\n * @interface\n */\nfunction Transferable() {}\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @implements {Transferable}\n */\nfunction ArrayBuffer(length) {}\n\n/** @type {number} */\nArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!ArrayBuffer}\n * @nosideeffects\n */\nArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @param {*} arg\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView\n */\nArrayBuffer.isView = function(arg) {};\n\n\n/**\n * @constructor\n */\nfunction ArrayBufferView() {}\n\n/** @type {!ArrayBuffer} */\nArrayBufferView.prototype.buffer;\n\n/** @type {number} */\nArrayBufferView.prototype.byteOffset;\n\n/** @type {number} */\nArrayBufferView.prototype.byteLength;\n\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @throws {Error}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer\n */\nfunction SharedArrayBuffer(length) {}\n\n/** @type {number} */\nSharedArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!SharedArrayBuffer}\n * @nosideeffects\n */\nSharedArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n\n/**\n * @typedef {!ArrayBuffer|!ArrayBufferView}\n */\nvar BufferSource;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @extends {ArrayBufferView}\n */\nfunction TypedArray() {};\n\n/** @const {number} */\nTypedArray.prototype.BYTES_PER_ELEMENT;\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin\n */\nTypedArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries\n */\nTypedArray.prototype.entries = function() {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every\n */\nTypedArray.prototype.every = function(callback, opt_thisArg) {};\n\n/**\n * @param {number} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill\n */\nTypedArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter\n */\nTypedArray.prototype.filter = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {(number|undefined)}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find\n */\nTypedArray.prototype.find = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {number}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex\n */\nTypedArray.prototype.findIndex = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {undefined}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach\n */\nTypedArray.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/includes\n */\nTypedArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf\n */\nTypedArray.prototype.indexOf = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {string=} opt_separator\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join\n */\nTypedArray.prototype.join = function(opt_separator) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys\n */\nTypedArray.prototype.keys = function() {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf\n */\nTypedArray.prototype.lastIndexOf = function(searchElement, opt_fromIndex) {};\n\n/** @type {number} */\nTypedArray.prototype.length;\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : number} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map\n */\nTypedArray.prototype.map = function(callback, opt_thisArg) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce\n */\nTypedArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight\n */\nTypedArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse\n */\nTypedArray.prototype.reverse = function() {};\n\n/**\n * @param {!ArrayBufferView|!Array} array\n * @param {number=} opt_offset\n * @return {undefined}\n * @throws {!RangeError}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set\n */\nTypedArray.prototype.set = function(array, opt_offset) {};\n\n/**\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice\n */\nTypedArray.prototype.slice = function(opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some\n */\nTypedArray.prototype.some = function(callback, opt_thisArg) {};\n\n/**\n * @param {(function(number, number) : number)=} opt_compareFunction\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort\n */\nTypedArray.prototype.sort = function(opt_compareFunction) {};\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray\n */\nTypedArray.prototype.subarray = function(begin, opt_end) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values\n */\nTypedArray.prototype.values = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString\n * @override\n */\nTypedArray.prototype.toLocaleString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString\n * @override\n */\nTypedArray.prototype.toString = function() {};\n\n/** @override */\nTypedArray.prototype[Symbol.iterator] = function() {};\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments} If the user passes a backing array, then indexed\n * accesses will modify the backing array. JSCompiler does not model\n * this well. In other words, if you have:\n * \n * var x = new ArrayBuffer(1);\n * var y = new Int8Array(x);\n * y[0] = 2;\n * \n * JSCompiler will not recognize that the last assignment modifies x.\n * We workaround this by marking all these arrays as @modifies {arguments},\n * to introduce the possibility that x aliases y.\n */\nfunction Int8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8ClampedArray(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8ClampedArray.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8ClampedArray}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8ClampedArray.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8ClampedArray}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8ClampedArray.of = function(var_args) {};\n\n\n/**\n * @typedef {Uint8ClampedArray}\n * @deprecated CanvasPixelArray has been replaced by Uint8ClampedArray\n * in the latest spec.\n * @see http://www.w3.org/TR/2dcontext/#imagedata\n */\nvar CanvasPixelArray;\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint16Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float32Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer|SharedArrayBuffer}\n * length or array or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float64Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat64Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {string|!IArrayLike|!Iterable} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float64Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat64Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float64Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat64Array.of = function(var_args) {};\n\n\n/**\n * @param {ArrayBuffer|SharedArrayBuffer} buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_byteLength\n * @constructor\n * @extends {ArrayBufferView}\n * @throws {Error}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Typed_arrays/DataView\n */\nfunction DataView(buffer, opt_byteOffset, opt_byteLength) {}\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat32 = function(\n byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat64 = function(\n byteOffset, value, opt_littleEndian) {};\n\n\n/**\n * @see https://github.com/promises-aplus/promises-spec\n * @typedef {{then: ?}}\n */\nvar Thenable;\n\n\n/**\n * This is not an official DOM interface. It is used to add generic typing\n * and respective type inference where available.\n * {@see goog.Thenable} inherits from this making all promises\n * interoperate.\n * @interface\n * @struct\n * @template TYPE\n */\nfunction IThenable() {}\n\n\n/**\n * @param {?(function(TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(*): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('IThenable',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nIThenable.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} resolver\n * @constructor\n * @implements {IThenable}\n * @template TYPE\n */\nfunction Promise(resolver) {}\n\n\n/**\n * @param {VALUE=} opt_value\n * @return {RESULT}\n * @template VALUE\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\nPromise.resolve = function(opt_value) {};\n\n\n/**\n * @param {*=} opt_error\n * @return {!Promise}\n */\nPromise.reject = function(opt_error) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.all = function(iterable) {};\n\n/**\n * Record type representing a single element of the array value one gets from\n * Promise.allSettled.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @record\n * @template VALUE\n */\nPromise.AllSettledResultElement = function() {};\n\n/**\n * 'fulfilled' or 'rejected' to indicate the final state of the corresponding\n * Promise.\n * @type {string}\n */\nPromise.AllSettledResultElement.prototype.status;\n\n/**\n * Exists only if the status field is 'fulfilled'\n * @type {VALUE|undefined}\n */\nPromise.AllSettledResultElement.prototype.value;\n\n/**\n * Exists only if the status field is 'rejected'\n * @type {*|undefined}\n */\nPromise.AllSettledResultElement.prototype.reason;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n * @param {!Iterable} iterable\n * @return {!Promise>>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.allSettled = function(iterable) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n * cond(isUnknown(V),\n * unknown(),\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.race = function(iterable) {};\n\n\n/**\n * @param {?(function(this:void, TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(this:void, *): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a `Thenable` is fulfilled or rejected with another `Thenable`, the\n * payload of the second is used as the payload of the first.\n *\n * @template RESULT := type('Promise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n * @override\n */\nPromise.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @param {function(*):VALUE} onRejected\n * @return {!Promise} A Promise of the original type or a possibly\n * a different type depending on whether the parent promise was rejected.\n *\n * @template VALUE\n *\n * When a `Thenable` is rejected with another `Thenable`, the payload of the\n * second is used as the payload of the first.\n *\n * @template RESULT := cond(\n * isUnknown(VALUE),\n * unknown(),\n * mapunion(VALUE, (V) =>\n * cond(\n * isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(\n * sub(V, 'Thenable'),\n * unknown(),\n * V))))\n * =:\n */\nPromise.prototype.catch = function(onRejected) {};\n\n\n/**\n * @param {function()} callback\n * @return {!Promise}\n */\nPromise.prototype.finally = function(callback) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of\n * @param {...T} var_args\n * @return {!Array}\n * @template T\n */\nArray.of = function(var_args) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from\n * @param {string|!IArrayLike|!Iterable} arrayLike\n * @param {function(this:S, (string|T), number): R=} opt_mapFn\n * @param {S=} opt_this\n * @return {!Array}\n * @template T,S,R\n */\nArray.from = function(arrayLike, opt_mapFn, opt_this) {};\n\n\n/** @return {!IteratorIterable} */\nArray.prototype.keys;\n\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values\n */\nArray.prototype.values;\n\n\n/**\n * @return {!IteratorIterable>} Iterator of [key, value] pairs.\n */\nArray.prototype.entries;\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {T|undefined}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.find\n */\nArray.prototype.find = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {function(this:S, T, number, !Array): boolean} predicateFn\n * @param {S=} opt_this\n * @return {number}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.findindex\n */\nArray.prototype.findIndex = function(predicateFn, opt_this) {};\n\n\n/**\n * @param {T} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {!Array}\n * @this {!IArrayLike|string}\n * @template T\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.fill\n */\nArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.copywithin\n * @this {!IArrayLike|string}\n * @template T\n * @return {!Array}\n */\nArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n\n/**\n * NOTE: this is an ES2016 (ES7) extern.\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @this {!IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see https://tc39.github.io/ecma262/#sec-array.prototype.includes\n */\nArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * Generates an array by passing every element of this array to a callback that\n * returns an array of zero or more elements to be added to the result.\n *\n * NOTE: The specified behavior of the method is that the callback can return\n * either an Array, which will be flattened into the result, or a non-array,\n * which will simply be included.\n *\n * However, while defining that in the type information here is possible it's\n * very hard to understand both for humans and automated tools other than\n * closure-compiler that process these files. Also, we think it's best to\n * encourage writing callbacks that just always return an Array for the sake\n * of readability.\n *\n * The polyfill for this method provided by closure-compiler does behave as\n * defined in the specification, though.\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array}\n * callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n */\nArray.prototype.flatMap = function(callback, thisArg) {};\n\n/**\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n */\nArray.prototype.flat = function(depth) {};\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.getownpropertysymbols\n */\nObject.getOwnPropertySymbols = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @param {?} proto\n * @return {!Object}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.setprototypeof\n */\nObject.setPrototypeOf = function(obj, proto) {};\n\n\n/**\n * @const {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\nNumber.EPSILON;\n\n/**\n * @const {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER\n */\nNumber.MIN_SAFE_INTEGER;\n\n/**\n * @const {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n */\nNumber.MAX_SAFE_INTEGER;\n\n\n\n/**\n * Parse an integer. Use of `parseInt` without `base` is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass `undefined` as the base.\n *\n * @param {string} string\n * @param {number|undefined} radix\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt\n */\nNumber.parseInt = function(string, radix) {};\n\n/**\n * @param {string} string\n * @return {number}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat\n */\nNumber.parseFloat = function(string) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n */\nNumber.isNaN = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite\n */\nNumber.isFinite = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n */\nNumber.isInteger = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger\n */\nNumber.isSafeInteger = function(value) {};\n\n\n\n/**\n * @param {!Object} target\n * @param {...(Object|null|undefined)} var_args\n * @return {!Object}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\nObject.assign = function(target, var_args) {};\n\n/**\n * TODO(dbeam): find a better place for ES2017 externs like this one.\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array} values\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n * @throws {Error}\n * @template T\n */\nObject.values = function(obj) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Array>} entries\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n * @throws {Error}\n * @template T\n */\nObject.entries = function(obj) {};\n\n/**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries\n */\nObject.fromEntries = function(iter) {};\n\n/**\n * NOTE: this is an ES2017 (ES8) extern.\n * @param {!Object} obj\n * @return {!Object} descriptors\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors\n * @throws {Error}\n * @template T\n */\nObject.getOwnPropertyDescriptors = function(obj) {};\n\n\n\n/**\n * @const\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect\n */\nvar Reflect = {};\n\n/**\n * @param {function(this: THIS, ...?): RESULT} targetFn\n * @param {THIS} thisArg\n * @param {!Array} argList\n * @return {RESULT}\n * @template THIS, RESULT\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n */\nReflect.apply = function(targetFn, thisArg, argList) {};\n\n/**\n * @param {function(new: ?, ...?)} targetConstructorFn\n * @param {!Array} argList\n * @param {function(new: TARGET, ...?)=} opt_newTargetConstructorFn\n * @return {TARGET}\n * @template TARGET\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n */\nReflect.construct = function(targetConstructorFn, argList, opt_newTargetConstructorFn) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!ObjectPropertyDescriptor} attributes\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n */\nReflect.defineProperty = function(target, propertyKey, attributes) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n */\nReflect.deleteProperty = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!Object=} opt_receiver\n * @return {*}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n */\nReflect.get = function(target, propertyKey, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {?ObjectPropertyDescriptor}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor\n */\nReflect.getOwnPropertyDescriptor = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {?Object}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf\n */\nReflect.getPrototypeOf = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n */\nReflect.has = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible\n */\nReflect.isExtensible = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n */\nReflect.ownKeys = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n */\nReflect.preventExtensions = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {*} value\n * @param {!Object=} opt_receiver\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n */\nReflect.set = function(target, propertyKey, value, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf\n */\nReflect.setPrototypeOf = function(target, proto) {};\n\n\n/**\n * @const\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics\n */\nvar Atomics = {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.add = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.and = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} expectedValue\n * @param {number} replacementValue\n * @return {number}\n */\nAtomics.compareExchange = function(\n typedArray, index, expectedValue, replacementValue) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.exchange = function(typedArray, index, value) {};\n\n/**\n * @param {number} size\n * @return {boolean}\n */\nAtomics.isLockFree = function(size) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @return {number}\n */\nAtomics.load = function(typedArray, index) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.or = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.store = function(typedArray, index, value) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.sub = function(typedArray, index, value) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} value\n * @param {number=} timeout\n * @return {String}\n */\nAtomics.wait = function(typedArray, index, value, timeout) {};\n\n/**\n * @param {!Int32Array} typedArray\n * @param {number} index\n * @param {number} count\n * @return {number}\n */\nAtomics.wake = function(typedArray, index, count) {};\n\n/**\n * @param {!TypedArray} typedArray\n * @param {number} index\n * @param {number} value\n * @return {number}\n */\nAtomics.xor = function(typedArray, index, value) {};\n\n\n/**\n * TODO(b/142881197): UNUSED_RETURN_T and UNUSED_NEXT_T are not yet used for\n * anything.\n * https://github.com/google/closure-compiler/issues/3489\n * @interface\n * @template VALUE, UNUSED_RETURN_T, UNUSED_NEXT_T\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIterator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n */\nAsyncIterator.prototype.next;\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction AsyncIterable() {}\n\n\n/**\n * @return {!AsyncIterator}\n */\nAsyncIterable.prototype[Symbol.asyncIterator] = function() {};\n\n\n/**\n * @interface\n * @extends {AsyncIterator}\n * @extends {AsyncIterable}\n * @template VALUE\n * @see https://tc39.github.io/proposal-async-iteration/\n */\nfunction AsyncIteratorIterable() {}\n\n/**\n * @interface\n * @see https://tc39.github.io/proposal-async-iteration/\n * @extends {AsyncIteratorIterable}\n * @template VALUE\n */\nfunction AsyncGenerator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!Promise>}\n * @override\n */\nAsyncGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!Promise>}\n */\nAsyncGenerator.prototype.throw = function(exception) {};\n", ++"externs/es6_collections.js":'/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6.\n * @see http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts\n * @externs\n */\n\n// TODO(johnlenz): Use Tuples for the Map and Set iterators where appropriate.\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @implements {Iterable>}\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\n */\nfunction Map(opt_iterable) {}\n\n/** @return {void} */\nMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nMap.prototype.delete = function(key) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n */\nMap.prototype.entries = function() {};\n\n/**\n * @param {function(this:THIS, VALUE, KEY, MAP)} callback\n * @param {THIS=} opt_thisArg\n * @this {MAP}\n * @template MAP,THIS\n */\nMap.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nMap.prototype.has = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.keys = function() {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nMap.prototype.set = function(key, value) {};\n\n/**\n * @type {number}\n * (readonly)\n */\nMap.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.values = function() {};\n\n/**\n * @return {!Iterator>}\n */\nMap.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @template KEY, VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\n */\nfunction WeakMap(opt_iterable) {}\n\n/** @return {void} */\nWeakMap.prototype.clear = function() {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nWeakMap.prototype.delete = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nWeakMap.prototype.get = function(key) {};\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nWeakMap.prototype.has = function(key) {};\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakMap.prototype.set = function(key, value) {};\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @implements {Iterable}\n * @template VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction Set(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nSet.prototype.delete = function(value) {};\n\n/**\n * @return {!IteratorIterable>} Where each array has two entries:\n * [value, value]\n * @nosideeffects\n */\nSet.prototype.entries = function() {};\n\n/**\n * @param {function(this: THIS, VALUE, VALUE, SET)} callback\n * @param {THIS=} opt_thisArg\n * @this {SET}\n * @template SET,THIS\n */\nSet.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nSet.prototype.has = function(value) {};\n\n/**\n * @type {number} (readonly)\n */\nSet.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.values = function() {};\n\n/**\n * @return {!Iterator}\n */\nSet.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @template VALUE\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction WeakSet(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakSet.prototype.add = function(value) {};\n\n/**\n * @return {void}\n */\nWeakSet.prototype.clear = function() {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nWeakSet.prototype.delete = function(value) {};\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nWeakSet.prototype.has = function(value) {};\n', ++"externs/intl.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the JS Internationalization API as defined in\n * http://www.ecma-international.org/ecma-402/1.0/\n *\n * @externs\n */\n\n/** @const */\nvar Intl = {};\n\n/**\n * NOTE: this API is not from ecma402 and is subject to change.\n * @param {string|Array=} opt_locales\n * @param {{type: (string|undefined)}=}\n * opt_options\n * @constructor\n */\nIntl.v8BreakIterator = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} text\n * @return {undefined}\n */\nIntl.v8BreakIterator.prototype.adoptText = function(text) {};\n\n/**\n * @return {string}\n */\nIntl.v8BreakIterator.prototype.breakType = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.current = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.first = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.next = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{usage: (string|undefined), localeMatcher: (string|undefined),\n * sensitivity: (string|undefined), ignorePunctuation: (boolean|undefined),\n * numeric: (boolean|undefined), caseFirst: (string|undefined)}=}\n * opt_options\n */\nIntl.Collator = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.Collator.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {string} arg1\n * @param {string} arg2\n * @return {number}\n */\nIntl.Collator.prototype.compare = function(arg1, arg2) {};\n\n/**\n * @return {{locale: string, usage: string, sensitivity: string,\n * ignorePunctuation: boolean, collation: string, numeric: boolean,\n * caseFirst: string}}\n */\nIntl.Collator.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), useGrouping: (boolean|undefined),\n * numberingSystem: (string|undefined), style: (string|undefined),\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: (number|undefined),\n * minimumFractionDigits: (number|undefined),\n * maximumFractionDigits: (number|undefined),\n * minimumSignificantDigits: (number|undefined),\n * maximumSignificantDigits: (number|undefined)}=}\n * opt_options\n */\nIntl.NumberFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {number} num\n * @return {string}\n */\nIntl.NumberFormat.prototype.format = function(num) {};\n\n/**\n * @return {{locale: string, numberingSystem: string, style: string,\n * currency: (string|undefined), currencyDisplay: (string|undefined),\n * minimumIntegerDigits: number, minimumFractionDigits: number,\n * maximumFractionDigits: number, minimumSignificantDigits: number,\n * maximumSignificantDigits: number, useGrouping: boolean}}\n */\nIntl.NumberFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * formatMatcher: (string|undefined), calendar: (string|undefined),\n * numberingSystem: (string|undefined), tz: (string|undefined),\n * weekday: (string|undefined), era: (string|undefined),\n * year: (string|undefined), month: (string|undefined),\n * day: (string|undefined), hour: (string|undefined),\n * minute: (string|undefined), second: (string|undefined),\n * timeZoneName: (string|undefined), hour12: (boolean|undefined)}=}\n * opt_options\n */\nIntl.DateTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.DateTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {string}\n */\nIntl.DateTimeFormat.prototype.format = function(date) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {Array<{type: string, value: string}>}\n */\nIntl.DateTimeFormat.prototype.formatToParts = function(date) {};\n\n/**\n * @return {{locale: string, calendar: string, numberingSystem: string,\n * timeZone: (string|undefined), weekday: (string|undefined),\n * era: (string|undefined), year: (string|undefined),\n * month: (string|undefined), day: (string|undefined),\n * hour: (string|undefined), minute: (string|undefined),\n * second: (string|undefined), timeZoneName: (string|undefined),\n * hour12: (boolean|undefined)}}\n */\nIntl.DateTimeFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), type: (string|undefined)}=}\n * opt_options\n */\nIntl.PluralRules = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.PluralRules.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.PluralRules.prototype.resolvedOptions = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/PluralRules/select#Syntax\n * @param {number} number\n * @return {string}\n */\nIntl.PluralRules.prototype.select = function(number) {};\n\n/**\n * @constructor\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat#Syntax\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n * numeric: (string|undefined),\n * style: (string|undefined)}=}\n * opt_options\n */\nIntl.RelativeTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/supportedLocalesOf#Syntax\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.RelativeTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/format#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {string}\n */\nIntl.RelativeTimeFormat.prototype.format = function(value, unit) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/formatToParts#Syntax\n * @param {number} value\n * @param {string} unit\n * @return {Array}\n */\nIntl.RelativeTimeFormat.prototype.formatToParts = function(value, unit) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/RelativeTimeFormat/resolvedOptions#Syntax\n * @return {{locale: string, pluralCategories: Array, type: string}}\n */\nIntl.RelativeTimeFormat.prototype.resolvedOptions = function() {};\n', ++"externs/w3c_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event specification.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n\n/**\n * @interface\n * @see https://dom.spec.whatwg.org/#interface-eventtarget\n */\nfunction EventTarget() {}\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!AddEventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener\n */\nEventTarget.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):*} listener\n * @param {(boolean|!EventListenerOptions)=} opt_options\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener\n */\nEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * @param {!Event} evt\n * @return {boolean}\n * @see https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent\n */\nEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @interface\n */\nfunction EventListener() {}\n\n/**\n * @param {!Event} evt\n * @return {undefined}\n */\nEventListener.prototype.handleEvent = function(evt) {};\n\n// The EventInit interface and the parameters to the Event constructor are part\n// of DOM Level 3 (suggested) and the DOM "Living Standard" (mandated). They are\n// included here as externs cannot be redefined. The same applies to other\n// *EventInit interfaces and *Event constructors throughout this file. See:\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-initializers\n// http://dom.spec.whatwg.org/#constructing-events\n// https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#event-constructors\n\n/**\n * @record\n * @see https://dom.spec.whatwg.org/#dictdef-eventinit\n */\nfunction EventInit() {}\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.bubbles;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.cancelable;\n\n/** @type {(undefined|boolean)} */\nEventInit.prototype.composed;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {EventInit=} opt_eventInitDict\n */\nfunction Event(type, opt_eventInitDict) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.CAPTURING_PHASE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.AT_TARGET;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.BUBBLING_PHASE;\n\n/** @type {string} */\nEvent.prototype.type;\n\n/** @type {EventTarget} */\nEvent.prototype.target;\n\n/** @type {EventTarget} */\nEvent.prototype.currentTarget;\n\n/** @type {number} */\nEvent.prototype.eventPhase;\n\n/** @type {boolean} */\nEvent.prototype.bubbles;\n\n/** @type {boolean} */\nEvent.prototype.cancelable;\n\n/** @type {number} */\nEvent.prototype.timeStamp;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {Array|undefined}\n */\nEvent.prototype.path;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {function():Array|undefined}\n * @see https://www.w3.org/TR/shadow-dom/#widl-Event-deepPath\n */\nEvent.prototype.deepPath;\n\n/**\n * @return {undefined}\n */\nEvent.prototype.stopPropagation = function() {};\n\n/**\n * @return {undefined}\n */\nEvent.prototype.preventDefault = function() {};\n\n/**\n * @param {string} eventTypeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @return {undefined}\n */\nEvent.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://dom.spec.whatwg.org/#dictdef-customeventinit\n */\nfunction CustomEventInit() {}\n\n/** @type {(T|undefined)} */\nCustomEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {CustomEventInit=} opt_eventInitDict\n * @template T\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent\n */\nfunction CustomEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {string} eventType\n * @param {boolean} bubbles\n * @param {boolean} cancelable\n * @param {T} detail\n * @return {undefined}\n */\nCustomEvent.prototype.initCustomEvent = function(\n eventType, bubbles, cancelable, detail) {};\n\n/**\n * @type {T}\n */\nCustomEvent.prototype.detail;\n\n/**\n * @interface\n */\nfunction DocumentEvent() {}\n\n/**\n * @param {string} eventType\n * @return {!Event}\n */\nDocumentEvent.prototype.createEvent = function(eventType) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/uievents/#idl-uieventinit\n */\nfunction UIEventInit() {}\n\n/** @type {undefined|?Window} */\nUIEventInit.prototype.view;\n\n/** @type {undefined|number} */\nUIEventInit.prototype.detail;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {UIEventInit=} opt_eventInitDict\n */\nfunction UIEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nUIEvent.prototype.detail;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @return {undefined}\n */\nUIEvent.prototype.initUIEvent = function(typeArg, canBubbleArg, cancelableArg,\n viewArg, detailArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#dictdef-eventmodifierinit\n */\nfunction EventModifierInit() {}\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.ctrlKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.shiftKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.altKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.metaKey;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierAltGraph;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierCapsLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFn;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierFnLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierHyper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierNumLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierScrollLock;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSuper;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbol;\n\n/** @type {undefined|boolean} */\nEventModifierInit.prototype.modifierSymbolLock;\n\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-mouseeventinit\n */\nfunction MouseEventInit() {}\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.screenY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientX;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.clientY;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.button;\n\n/** @type {undefined|number} */\nMouseEventInit.prototype.buttons;\n\n/** @type {undefined|?EventTarget} */\nMouseEventInit.prototype.relatedTarget;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {MouseEventInit=} opt_eventInitDict\n */\nfunction MouseEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nMouseEvent.prototype.screenX;\n\n/** @type {number} */\nMouseEvent.prototype.screenY;\n\n/** @type {number} */\nMouseEvent.prototype.clientX;\n\n/** @type {number} */\nMouseEvent.prototype.clientY;\n\n/** @type {boolean} */\nMouseEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.altKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.metaKey;\n\n/** @type {number} */\nMouseEvent.prototype.button;\n\n/** @type {EventTarget} */\nMouseEvent.prototype.relatedTarget;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction MutationEvent() {}\n\n/** @type {Node} */\nMutationEvent.prototype.relatedNode;\n\n/** @type {string} */\nMutationEvent.prototype.prevValue;\n\n/** @type {string} */\nMutationEvent.prototype.newValue;\n\n/** @type {string} */\nMutationEvent.prototype.attrName;\n\n/** @type {number} */\nMutationEvent.prototype.attrChange;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Node} relatedNodeArg\n * @param {string} prevValueArg\n * @param {string} newValueArg\n * @param {string} attrNameArg\n * @param {number} attrChangeArg\n * @return {undefined}\n */\nMutationEvent.prototype.initMutationEvent = function(typeArg, canBubbleArg, cancelableArg, relatedNodeArg, prevValueArg, newValueArg, attrNameArg, attrChangeArg) {};\n\n\n// DOM3\n/**\n * @record\n * @extends {EventModifierInit}\n * @see https://w3c.github.io/uievents/#idl-keyboardeventinit\n */\nfunction KeyboardEventInit() {}\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.key;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.code;\n\n/** @type {undefined|number} */\nKeyboardEventInit.prototype.location;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.repeat;\n\n/** @type {undefined|boolean} */\nKeyboardEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.char;\n\n/** @type {undefined|string} */\nKeyboardEventInit.prototype.locale;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {KeyboardEventInit=} opt_eventInitDict\n */\nfunction KeyboardEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nKeyboardEvent.prototype.keyIdentifier;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.altKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.metaKey;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nKeyboardEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-focuseventinit\n */\nfunction FocusEventInit() {}\n\n/** @type {undefined|?EventTarget} */\nFocusEventInit.prototype.relatedTarget;\n\n\n/**\n * The FocusEvent interface provides specific contextual information associated\n * with Focus events.\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent\n *\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {FocusEventInit=} opt_eventInitDict\n */\nfunction FocusEvent(type, opt_eventInitDict) {}\n\n/** @type {EventTarget} */\nFocusEvent.prototype.relatedTarget;\n\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions\n * @record\n */\nvar EventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nEventListenerOptions.prototype.capture;\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions\n * @record\n * @extends {EventListenerOptions}\n */\nvar AddEventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.passive;\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.once;\n\n/**\n * @record\n * @extends {UIEventInit}\n * @see https://w3c.github.io/uievents/#idl-inputeventinit\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEventInit() {}\n\n/** @type {undefined|?string} */\nInputEventInit.prototype.data;\n\n/** @type {undefined|boolean} */\nInputEventInit.prototype.isComposing;\n\n/** @type {undefined|string} */\nInputEventInit.prototype.inputType;\n\n/** @type {undefined|?DataTransfer} */\nInputEventInit.prototype.dataTransfer;\n\n\n// TODO(charleyroy): Add getTargetRanges() once a consensus has been made\n// regarding how to structure these values. See\n// https://github.com/w3c/input-events/issues/38.\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {InputEventInit=} opt_eventInitDict\n * @see https://www.w3.org/TR/uievents/#interface-inputevent\n * @see https://w3c.github.io/input-events/#interface-InputEvent\n */\nfunction InputEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nInputEvent.prototype.data;\n\n/** @type {boolean} */\nInputEvent.prototype.isComposed;\n\n/** @type {string} */\nInputEvent.prototype.inputType;\n\n/** @type {?DataTransfer} */\nInputEvent.prototype.dataTransfer;\n', ++"externs/w3c_event3.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s event Level 3 specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Events/#ecma-script-binding-ecma-binding\n *\n * @externs\n * @author ericdingle@9oo91e.qjz9zk (Eric Dingle)\n */\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {string} keyIdentifierArg\n * @param {number} keyLocationArg\n * @param {string} modifiersList\n * @return {undefined}\n */\nKeyboardEvent.prototype.initKeyboardEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, keyIdentifierArg, keyLocationArg, modifiersList) {};\n\n/** @type {string} */\nKeyboardEvent.prototype.char;\n\n/** @type {string} */\nKeyboardEvent.prototype.code;\n\n/** @type {string} */\nKeyboardEvent.prototype.key;\n\n/** @type {number} */\nKeyboardEvent.prototype.location;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.repeat;\n\n/** @type {string} */\nKeyboardEvent.prototype.locale;\n\n/** @type {number} */\nMouseEvent.prototype.buttons;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nMouseEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/** @type {boolean} */\nEvent.prototype.defaultPrevented;\n\n/** @type {string} */\nEvent.prototype.namespaceURI;\n\n/** @return {undefined} */\nEvent.prototype.stopImmediatePropagation = function() {};\n', ++"externs/gecko_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s event specification by Gecko. This file depends on\n * w3c_event.js.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n/** @const {number} */ Event.prototype.HORIZONTAL_AXIS;\n/** @const {number} */ Event.prototype.VERTICAL_AXIS;\n/** @type {boolean} */ Event.prototype.altKey;\n/** @type {number} */ Event.prototype.axis;\n/** @type {number} */ Event.prototype.button;\n/** @type {boolean} */ Event.prototype.cancelBubble;\n/** @type {number} */ Event.prototype.charCode;\n/** @type {number} */ Event.prototype.clientX;\n/** @type {number} */ Event.prototype.clientY;\n/** @type {boolean} */ Event.prototype.ctrlKey;\n/** @type {EventTarget} */ Event.prototype.explicitOriginalTarget;\n/** @type {boolean} */ Event.prototype.isChar;\n/** @type {boolean} */ Event.prototype.isTrusted;\n/** @type {number} */ Event.prototype.keyCode;\n/** @type {number} */ Event.prototype.layerX;\n/** @type {number} */ Event.prototype.layerY;\n/** @type {boolean} */ Event.prototype.metaKey;\n/** @type {EventTarget} */ Event.prototype.originalTarget;\n/** @type {number} */ Event.prototype.pageX;\n/** @type {number} */ Event.prototype.pageY;\n/** @type {EventTarget|undefined} */ Event.prototype.relatedTarget;\n/** @type {number} */ Event.prototype.screenX;\n/** @type {number} */ Event.prototype.screenY;\n/** @type {boolean} */ Event.prototype.shiftKey;\n/** @type {Window} */ Event.prototype.view;\n/** @type {number} */ Event.prototype.which;\n\n/** @constructor */ function nsIDOMPageTransitionEvent() {}\n/** @type {boolean} */ nsIDOMPageTransitionEvent.prototype.persisted;\n\n//Methods\nEvent.prototype.initKeyEvent;\n/**\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {?Window=} viewArg\n * @param {?number=} detailArg\n * @param {number=} screenXArg\n * @param {number=} screenYArg\n * @param {number=} clientXArg\n * @param {number=} clientYArg\n * @param {boolean=} ctrlKeyArg\n * @param {boolean=} altKeyArg\n * @param {boolean=} shiftKeyArg\n * @param {boolean=} metaKeyArg\n * @param {?number=} buttonArg\n * @param {?EventTarget=} relatedTargetArg\n */\nEvent.prototype.initMouseEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, relatedTargetArg) {};\nEvent.prototype.initUIEvent;\nEvent.prototype.initMessageEvent;\nEvent.prototype.preventBubble;\nEvent.prototype.preventCapture;\n', ++"externs/ie_event.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C\'s event specification by IE in JScript. This file depends on\n * w3c_event.js.\n *\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535863.aspx\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/** @type {string} */\nEvent.prototype.Abstract;\n\n/** @type {boolean} */\nEvent.prototype.altLeft;\n\n/** @type {string} */\nEvent.prototype.Banner;\n\n/**\n * A ClipboardData on IE, but a DataTransfer on WebKit.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220.aspx\n * @type {(ClipboardData|undefined)}\n */\nEvent.prototype.clipboardData;\n\n/** @type {boolean} */\nEvent.prototype.contentOverflow;\n\n/** @type {boolean} */\nEvent.prototype.ctrlLeft;\n\n/** @type {string} */\nEvent.prototype.dataFld;\n\nEvent.prototype.domain;\n\n/** @type {Element} */\nEvent.prototype.fromElement;\n\n/** @type {string} */\nEvent.prototype.MoreInfo;\n\n/** @type {string} */\nEvent.prototype.nextPage;\n\n/** @type {number} */\nEvent.prototype.offsetX;\n\n/** @type {number} */\nEvent.prototype.offsetY;\n\n/** @type {string} */\nEvent.prototype.propertyName;\n\n/** @type {string} */\nEvent.prototype.qualifier;\n\n/** @type {number} */\nEvent.prototype.reason;\n\n/** @type {Object<*>} */\nEvent.prototype.recordset;\n\n/** @type {boolean} */\nEvent.prototype.repeat;\n\n/** @type {(boolean|string|undefined)} */\nEvent.prototype.returnValue;\n\n/** @type {string} */\nEvent.prototype.saveType;\n\nEvent.prototype.scheme;\n\n/** @type {boolean} */\nEvent.prototype.shiftLeft;\n\n/** @type {Window} */\nEvent.prototype.source;\n\n/** @type {Element} */\nEvent.prototype.srcElement;\n\nEvent.prototype.srcFilter;\n\n/** @type {string} */\nEvent.prototype.srcUrn;\n\n/** @type {Element} */\nEvent.prototype.toElement;\n\nEvent.prototype.userName;\n\n/** @type {number} */\nEvent.prototype.wheelDelta;\n\n/** @type {number} */\nEvent.prototype.x;\n\n/** @type {number} */\nEvent.prototype.y;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441257.aspx\n */\nfunction MSPointerPoint() {}\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerId;\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerType;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441233.aspx\n */\nfunction MSPointerEvent() {}\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_MOUSE;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_PEN;\n\n/** @const {number} */\nMSPointerEvent.MSPOINTER_TYPE_TOUCH;\n\n/** @type {number} */\nMSPointerEvent.prototype.height;\n\n/** @type {number} */\nMSPointerEvent.prototype.hwTimestamp;\n\n/** @type {boolean} */\nMSPointerEvent.prototype.isPrimary;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerType;\n\n/** @type {number} */\nMSPointerEvent.prototype.pressure;\n\n/** @type {number} */\nMSPointerEvent.prototype.rotation;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltY;\n\n/** @type {number} */\nMSPointerEvent.prototype.timeStamp;\n\n/** @type {number} */\nMSPointerEvent.prototype.width;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msReleasePointerCapture;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msSetPointerCapture;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {boolean} ctrlKeyArg\n * @param {boolean} altKeyArg\n * @param {boolean} shiftKeyArg\n * @param {boolean} metaKeyArg\n * @param {number} buttonArg\n * @param {Element} relatedTargetArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} widthArg\n * @param {number} heightArg\n * @param {number} pressure\n * @param {number} rotation\n * @param {number} tiltX\n * @param {number} tiltY\n * @param {number} pointerIdArg\n * @param {number} pointerType\n * @param {number} hwTimestampArg\n * @param {boolean} isPrimary\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441246.aspx\n */\nMSPointerEvent.prototype.initPointerEvent;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh968249(v=vs.85).aspx\n */\nfunction MSGesture() {}\n\n/**\n * @type {Element}\n */\nMSGesture.prototype.target;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSGesture.prototype.addPointer = function(pointerId) {};\n\nMSGesture.prototype.stop = function() {};\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh772076(v=vs.85).aspx\n */\nfunction MSGestureEvent() {}\n\n/** @type {number} */\nMSGestureEvent.prototype.expansion;\n\n/** @type {!MSGesture} */\nMSGestureEvent.prototype.gestureObject;\n\n/** @type {number} */\nMSGestureEvent.prototype.hwTimestamp;\n\n/** @type {number} */\nMSGestureEvent.prototype.rotation;\n\n/** @type {number} */\nMSGestureEvent.prototype.scale;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationX;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationY;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityAngular;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityExpansion;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityX;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityY;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} translationXArg\n * @param {number} translationYArg\n * @param {number} scaleArg\n * @param {number} expansionArg\n * @param {number} rotationArg\n * @param {number} velocityXArg\n * @param {number} velocityYArg\n * @param {number} velocityExpansionArg\n * @param {number} velocityAngularArg\n * @param {number} hwTimestampArg\n * @param {EventTarget} relatedTargetArg\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh441187.aspx\n */\nMSGestureEvent.prototype.initGestureEvent;\n', ++"externs/webkit_event.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s\n * event specification by WebKit. This file depends on w3c_event.js.\n * All the provided definitions have been type annotated\n *\n * @externs\n * @author djlee@9oo91e.qjz9zk (DJ Lee)\n */\n\n/** @type {number} */\nEvent.prototype.wheelDeltaX;\n\n/** @type {number} */\nEvent.prototype.wheelDeltaY;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://developer.apple.com/library/safari/documentation/AudioVideo/Reference/WebKitAnimationEventClassReference/WebKitAnimationEvent/WebKitAnimationEvent.html\n */\nfunction WebKitAnimationEvent() {}\n\n/**\n * @const {string}\n */\nWebKitAnimationEvent.prototype.animationName;\n\n/**\n * @const {number}\n */\nWebKitAnimationEvent.prototype.elapsedTime;\n', ++"externs/w3c_device_sensor_event.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s device orientation and device motion\n * events specification.\n * This file depends on w3c_event.js.\n * The whole file has been partially type annotated.\n * Created from http://dev.w3.org/geo/api/spec-source-orientation.\n *\n * @externs\n * @author lukaszbk@9oo91e.qjz9zk (Lukasz Bieniasz-Krzywiec)\n */\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation\n */\nfunction DeviceOrientationEventInit() {}\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.alpha;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.beta;\n\n/** @type {number|undefined} */\nDeviceOrientationEventInit.prototype.gamma;\n\n/** @type {boolean|undefined} */\nDeviceOrientationEventInit.prototype.absolute;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!DeviceOrientationEventInit=} opt_eventInitDict\n */\nfunction DeviceOrientationEvent(type, opt_eventInitDict) {}\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.alpha;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.beta;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.gamma;\n\n/** @type {boolean} */\nDeviceOrientationEvent.prototype.absolute;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassAccuracy\n */\nDeviceOrientationEvent.prototype.webkitCompassAccuracy;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassHeading\n */\nDeviceOrientationEvent.prototype.webkitCompassHeading;\n\n/**\n * @constructor\n */\nfunction DeviceAcceleration() {}\n\n/** @type {?number} */\nDeviceAcceleration.prototype.x;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.y;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.z;\n\n/**\n * @constructor\n */\nfunction DeviceRotationRate() {}\n\n/** @type {?number} */\nDeviceRotationRate.prototype.alpha;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.beta;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.gamma;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction DeviceMotionEvent() {}\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.acceleration;\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.accelerationIncludingGravity;\n\n/** @type {?DeviceRotationRate} */\nDeviceMotionEvent.prototype.rotationRate;\n\n/** @type {?number} */\nDeviceMotionEvent.prototype.interval;\n', + "externs/web_app_manifest.js":"/*\n * Copyright 2017 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for web app manifest APIs.\n *\n * @see https://www.w3.org/TR/appmanifest/\n * @externs\n */\n\n/**\n * @see https://www.w3.org/TR/appmanifest/#beforeinstallpromptevent-interface\n * @constructor\n * @extends {Event}\n */\nfunction BeforeInstallPromptEvent() {}\n\n/** @type {!Promise<{outcome: !AppBannerPromptOutcome}>} */\nBeforeInstallPromptEvent.prototype.userChoice;\n\n/** @return {!Promise} */\nBeforeInstallPromptEvent.prototype.prompt = function() {};\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/appmanifest/#appbannerpromptoutcome-enum\n * Possible values: 'accepted', 'dismissed'\n */\nvar AppBannerPromptOutcome;\n\n/** @typedef {{userChoice: !AppBannerPromptOutcome}} */\nvar PromptResponseObject;\n\n/** @type {?function(!BeforeInstallPromptEvent)} */\nWindow.prototype.onbeforeinstallprompt;\n\n/** @type {?function(!Event)} */\nWindow.prototype.onappinstalled;\n", + "externs/w3c_selection.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Selection API.\n *\n * @see https://w3c.github.io/selection-api/\n *\n * @externs\n */\n\n/**\n * @constructor\n * @see http://w3c.github.io/selection-api/#selection-interface\n */\nfunction Selection() {}\n\n/**\n * @type {?Node}\n * @see https://w3c.github.io/selection-api/#dom-selection-anchornode\n */\nSelection.prototype.anchorNode;\n\n/**\n * @type {number}\n * @see https://w3c.github.io/selection-api/#dom-selection-anchoroffset\n */\nSelection.prototype.anchorOffset;\n\n/**\n * @type {?Node}\n * @see https://w3c.github.io/selection-api/#dom-selection-focusnode\n */\nSelection.prototype.focusNode;\n\n/**\n * @type {number}\n * @see https://w3c.github.io/selection-api/#dom-selection-focusoffset\n */\nSelection.prototype.focusOffset;\n\n/**\n * @type {boolean}\n * @see https://w3c.github.io/selection-api/#dom-selection-iscollapsed\n */\nSelection.prototype.isCollapsed;\n\n/**\n * @type {number}\n * @see https://w3c.github.io/selection-api/#dom-selection-rangecount\n */\nSelection.prototype.rangeCount;\n\n/**\n * @type {string}\n * @see https://w3c.github.io/selection-api/#dom-selection-type\n */\nSelection.prototype.type;\n\n/**\n * @param {number} index\n * @return {!Range}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-selection-getrangeat\n */\nSelection.prototype.getRangeAt = function(index) {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `range` parameter a\n * `!Range` per the spec.\n * @param {?Range} range\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-addrange\n */\nSelection.prototype.addRange = function(range) {};\n\n/**\n * @param {!Range} range\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-removerange\n */\nSelection.prototype.removeRange = function(range) {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-removeallranges\n */\nSelection.prototype.removeAllRanges = function() {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-empty\n */\nSelection.prototype.empty = function() {};\n\n/**\n * @param {?Node} node\n * @param {number=} offset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-collapse\n */\nSelection.prototype.collapse = function(node, offset) {};\n\n/**\n * @param {?Node} node\n * @param {number=} offset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-setposition\n */\nSelection.prototype.setPosition = function(node, offset) {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-collapsetostart\n */\nSelection.prototype.collapseToStart = function() {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-collapsetoend\n */\nSelection.prototype.collapseToEnd = function() {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `node` parameter a `!Node`\n * per the spec.\n * @param {?Node} node\n * @param {number=} offset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-extend\n */\nSelection.prototype.extend = function(node, offset) {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `anchorNode` and\n * `focusNode` parameters `!Node` per the spec.\n * @param {?Node} anchorNode\n * @param {number} anchorOffset\n * @param {?Node} focusNode\n * @param {number} focusOffset\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-setbaseandextent\n */\nSelection.prototype.setBaseAndExtent = function(anchorNode, anchorOffset, focusNode, focusOffset) {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make the `node` parameter a `!Node`\n * per the spec.\n * @param {?Node} node\n * @return {undefined}\n * @see http://w3c.github.io/selection-api/#dom-selection-selectallchildren\n */\nSelection.prototype.selectAllChildren = function(node) {};\n\n/**\n * @return {undefined}\n * @see https://w3c.github.io/selection-api/#dom-selection-deletefromdocument\n */\nSelection.prototype.deleteFromDocument = function() {};\n\n/**\n * @param {!Node} node\n * @param {boolean=} allowPartialContainment\n * @return {boolean}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-selection-containsnode\n */\nSelection.prototype.containsNode = function(node, allowPartialContainment) {};\n\n/**\n * @return {?Selection}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-window-getselection\n */\nWindow.prototype.getSelection = function() {};\n\n/**\n * @return {?Selection}\n * @nosideeffects\n * @see https://w3c.github.io/selection-api/#dom-document-getselection\n */\nDocument.prototype.getSelection = function() {};\n\n/**\n * TODO(tjgq): Clean up internal usages and make this `?function(!Event): void`\n * per the spec.\n * @type {?function(?Event)}\n * @see https://w3c.github.io/selection-api/#dom-globaleventhandlers-onselectstart\n */\nElement.prototype.onselectstart;\n\n/**\n * @type {?function(!Event): void}\n * @see https://w3c.github.io/selection-api/#dom-globaleventhandlers-onselectionchange\n */\nElement.prototype.onselectionchange;\n', +-"externs/nonstandard_selection.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard enhancements to W3C\'s Selection API.\n *\n * @externs\n */\n\n// The following were sources from the webkit externs.\n\n/** @type {?Node} */\nSelection.prototype.baseNode;\n\n/** @type {number} */\nSelection.prototype.baseOffset;\n\n/** @type {?Node} */\nSelection.prototype.extentNode;\n\n/** @type {number} */\nSelection.prototype.extentOffset;\n\n/**\n * @param {string} alter\n * @param {string} direction\n * @param {string} granularity\n * @return {undefined}\n */\nSelection.prototype.modify = function(alter, direction, granularity) {};\n\n\n// The following were sources from the gecko externs.\n\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Selection/selectionLanguageChange\n */\nSelection.prototype.selectionLanguageChange;\n\n\n// The following were sources from the ie externs.\n\n\n/**\n * @type {?Selection}\n * @see http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx\n */\nDocument.prototype.selection;\n\n/**\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms536418(VS.85).aspx\n */\nSelection.prototype.clear = function() {};\n\n/**\n * @return {?TextRange|?ControlRange}\n * @see http://msdn.microsoft.com/en-us/library/ms536394(VS.85).aspx\n */\nSelection.prototype.createRange = function() {};\n\n/**\n * @return {?Array}\n * @see http://msdn.microsoft.com/en-us/library/ms536396(VS.85).aspx\n */\nSelection.prototype.createRangeCollection = function() {};\n', ++"externs/nonstandard_selection.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard enhancements to W3C\'s Selection API.\n *\n * @externs\n */\n\n// The following were sources from the webkit externs.\n\n/** @type {?Node} */\nSelection.prototype.baseNode;\n\n/** @type {number} */\nSelection.prototype.baseOffset;\n\n/** @type {?Node} */\nSelection.prototype.extentNode;\n\n/** @type {number} */\nSelection.prototype.extentOffset;\n\n/**\n * @param {string} alter\n * @param {string} direction\n * @param {string} granularity\n * @return {undefined}\n */\nSelection.prototype.modify = function(alter, direction, granularity) {};\n\n\n// The following were sources from the gecko externs.\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/Selection/selectionLanguageChange\n */\nSelection.prototype.selectionLanguageChange;\n\n\n// The following were sources from the ie externs.\n\n\n/**\n * @type {?Selection}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535869(VS.85).aspx\n */\nDocument.prototype.selection;\n\n/**\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536418(VS.85).aspx\n */\nSelection.prototype.clear = function() {};\n\n/**\n * @return {?TextRange|?ControlRange}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536394(VS.85).aspx\n */\nSelection.prototype.createRange = function() {};\n\n/**\n * @return {?Array}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536396(VS.85).aspx\n */\nSelection.prototype.createRangeCollection = function() {};\n', + "externs/w3c_trusted_types.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Trusted Types specification.\n * @see https://github.com/WICG/trusted-types\n * @externs\n */\n\n\n/** @constructor */\nfunction TrustedHTML() {}\n\n/** @constructor */\nfunction TrustedScript() {}\n\n/** @constructor */\nfunction TrustedScriptURL() {}\n\n/** @constructor */\nfunction TrustedURL() {}\n\n\n/** @constructor */\nfunction TrustedTypePolicy() {}\n\n/**\n * @param {string} s\n * @return {!TrustedHTML}\n */\nTrustedTypePolicy.prototype.createHTML = function(s) {};\n\n/**\n * @param {string} s\n * @return {!TrustedScript}\n */\nTrustedTypePolicy.prototype.createScript = function(s) {};\n\n/**\n * @param {string} s\n * @return {!TrustedScriptURL}\n */\nTrustedTypePolicy.prototype.createScriptURL = function(s) {};\n\n/**\n * @param {string} s\n * @return {!TrustedURL}\n */\nTrustedTypePolicy.prototype.createURL = function(s) {};\n\n\n/** @constructor */\nfunction TrustedTypePolicyFactory() {}\n\n/** @record @private */\nfunction TrustedTypePolicyOptions() {};\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createHTML;\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createScript;\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createScriptURL;\n\n/**\n * @type {(function(string, ...*): string)|undefined},\n */\nTrustedTypePolicyOptions.prototype.createURL;\n\n/**\n * @param {string} name\n * @param {!TrustedTypePolicyOptions} policy\n * @param {boolean=} opt_expose\n * @return {!TrustedTypePolicy}\n */\nTrustedTypePolicyFactory.prototype.createPolicy = function(\n name, policy, opt_expose) {};\n\n/**\n * @param {string} name\n * @return {!TrustedTypePolicy}\n * @deprecated\n */\nTrustedTypePolicyFactory.prototype.getExposedPolicy = function(name) {};\n\n/** @return {!Array} */\nTrustedTypePolicyFactory.prototype.getPolicyNames = function() {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n */\nTrustedTypePolicyFactory.prototype.isHTML = function(obj) {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n */\nTrustedTypePolicyFactory.prototype.isScript = function(obj) {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n */\nTrustedTypePolicyFactory.prototype.isScriptURL = function(obj) {};\n\n/**\n * @param {*} obj\n * @return {boolean}\n * @deprecated\n */\nTrustedTypePolicyFactory.prototype.isURL = function(obj) {};\n\n/** @type {!TrustedHTML} */\nTrustedTypePolicyFactory.prototype.emptyHTML;\n\n/**\n * @type {!TrustedTypePolicyFactory}\n * @deprecated\n */\nvar TrustedTypes;\n\n/** @type {!TrustedTypePolicyFactory} */\nvar trustedTypes;\n', +-"externs/w3c_dom1.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM Level 1 specification.\n * The whole file has been fully type annotated. Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n/**\n * @constructor\n * @param {string=} message\n * @param {string=} name\n * @see https://heycam.github.io/webidl/#idl-DOMException\n */\nfunction DOMException(message, name) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INDEX_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.DOMSTRING_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.HIERARCHY_REQUEST_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.WRONG_DOCUMENT_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INVALID_CHARACTER_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_DATA_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_FOUND_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_SUPPORTED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INUSE_ATTRIBUTE_ERR;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nfunction ExceptionCode() {}\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation() {}\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-5CED94D7\n * @nosideeffects\n */\nDOMImplementation.prototype.hasFeature = function(feature, version) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nfunction Node() {}\n\n/** @override */\nNode.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nNode.prototype.attributes;\n\n/**\n * @type {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-childNodes\n */\nNode.prototype.childNodes;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-firstChild\n */\nNode.prototype.firstChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-lastChild\n */\nNode.prototype.lastChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nextSibling\n */\nNode.prototype.nextSibling;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeName\n */\nNode.prototype.nodeName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeValue\n */\nNode.prototype.nodeValue;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeType\n */\nNode.prototype.nodeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-ownerDocument\n */\nNode.prototype.ownerDocument;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-parentNode\n */\nNode.prototype.parentNode;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-previousSibling\n */\nNode.prototype.previousSibling;\n\n/**\n * @param {Node} newChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-appendChild\n */\nNode.prototype.appendChild = function(newChild) {};\n\n/**\n * @param {boolean} deep\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-cloneNode\n * @nosideeffects\n */\nNode.prototype.cloneNode = function(deep) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-hasChildNodes\n * @nosideeffects\n */\nNode.prototype.hasChildNodes = function() {};\n\n/**\n * @param {Node} newChild\n * @param {Node} refChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-insertBefore\n */\nNode.prototype.insertBefore = function(newChild, refChild) {};\n\n/**\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeChild\n */\nNode.prototype.removeChild = function(oldChild) {};\n\n/**\n * @param {Node} newChild\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-replaceChild\n */\nNode.prototype.replaceChild = function(newChild, oldChild) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ATTRIBUTE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.CDATA_SECTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.COMMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_FRAGMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_TYPE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ELEMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_REFERENCE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.PROCESSING_INSTRUCTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.TEXT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.NOTATION_NODE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-B63ED1A3\n */\nfunction DocumentFragment() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#i-Document\n */\nfunction Document() {}\n\n/**\n * @type {DocumentType}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-doctype\n */\nDocument.prototype.doctype;\n\n/**\n * @type {!HTMLHtmlElement}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-documentElement\n */\nDocument.prototype.documentElement;\n\n/**\n * @type {DOMImplementation}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-implementation\n */\nDocument.prototype.implementation;\n\n/**\n * @param {string} name\n * @return {!Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createAttribute\n * @nosideeffects\n */\nDocument.prototype.createAttribute = function(name) {};\n\n/**\n * @param {string} data\n * @return {!Comment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createComment\n * @nosideeffects\n */\nDocument.prototype.createComment = function(data) {};\n\n/**\n * @param {string} data\n * @return {!CDATASection}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createCDATASection\n * @nosideeffects\n */\nDocument.prototype.createCDATASection = function(data) {};\n\n/**\n * @return {!DocumentFragment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createDocumentFragment\n * @nosideeffects\n */\nDocument.prototype.createDocumentFragment = function() {};\n\n/**\n * Create a DOM element.\n *\n * Web components introduced the second parameter as a way of extending existing\n * tags (e.g. document.createElement('button', 'fancy-button')).\n *\n * @param {string} tagName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @nosideeffects\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createElement\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate\n */\nDocument.prototype.createElement = function(tagName, opt_typeExtension) {};\n\n/**\n * @param {string} target\n * @param {string} data\n * @return {!ProcessingInstruction}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createProcessingInstruction\n * @nosideeffects\n */\nDocument.prototype.createProcessingInstruction = function(target, data) {};\n\n/**\n * @param {number|string} data\n * @return {!Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createTextNode\n * @nosideeffects\n */\nDocument.prototype.createTextNode = function(data) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-A6C9094\n * @nosideeffects\n */\nDocument.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/open\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open\n */\nDocument.prototype.open;\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-close\n */\nDocument.prototype.close = function() {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-write\n */\nDocument.prototype.write = function(text) {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-writeln\n */\nDocument.prototype.writeln = function(text) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-536297177\n */\nfunction NodeList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-203510337\n */\nNodeList.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-844377136\n */\nNodeList.prototype.item = function(index) {};\n\n/**\n * @param {?function(this:S, T, number, !NodeList): ?} callback\n * @param {S=} opt_thisobj\n * @template S\n * @return {undefined}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach\n */\nNodeList.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number), T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1780488922\n */\nfunction NamedNodeMap() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6D0FB19E\n */\nNamedNodeMap.prototype.length;\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1074577549\n * @nosideeffects\n */\nNamedNodeMap.prototype.getNamedItem = function(name) {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-349467F9\n * @nosideeffects\n */\nNamedNodeMap.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D58B193\n */\nNamedNodeMap.prototype.removeNamedItem = function(name) {};\n\n/**\n * @param {Node} arg\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1025163788\n */\nNamedNodeMap.prototype.setNamedItem = function(arg) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-FF21A306\n */\nfunction CharacterData() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-72AB8359\n */\nCharacterData.prototype.data;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7D61178C\n */\nCharacterData.prototype.length;\n\n/**\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-32791A2F\n */\nCharacterData.prototype.appendData = function(arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7C603781\n */\nCharacterData.prototype.deleteData = function(offset, count) {};\n\n/**\n * @param {number} offset\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-3EDB695F\n */\nCharacterData.prototype.insertData = function(offset, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-E5CBA7FB\n */\nCharacterData.prototype.replaceData = function(offset, count, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6531BCCF\n * @nosideeffects\n */\nCharacterData.prototype.substringData = function(offset, count) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-637646024\n */\nfunction Attr() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1112119403\n */\nAttr.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-862529273\n */\nAttr.prototype.specified;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-221662474\n */\nAttr.prototype.value;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-745549614\n */\nfunction Element() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://dom.spec.whatwg.org/index.html#dom-element-id\n */\nElement.prototype.id;\n\n/**\n * An Element always contains a non-null NamedNodeMap containing the attributes\n * of this node.\n * @type {!NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nElement.prototype.attributes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-tagName\n */\nElement.prototype.tagName;\n\n/**\n * @implicitCast\n * @type {?}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/className\n * We type it as ? even though it is a string, because some SVG elements have\n * className that is an object, which isn't a subtype of string.\n * Alternative: TypeScript types this as string and types className on\n * SVGElement as ?.\n */\nElement.prototype.className;\n\n/**\n * @param {string} name\n * @param {?number=} flags\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttribute\n * @see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.getAttribute = function(name, flags) {};\n\n/**\n * @param {string} name\n * @return {Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttributeNode\n * @nosideeffects\n */\nElement.prototype.getAttributeNode = function(name) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1938918D\n * @nosideeffects\n */\nElement.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttribute\n */\nElement.prototype.removeAttribute = function(name) {};\n\n/**\n * @param {Attr} oldAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttributeNode\n */\nElement.prototype.removeAttributeNode = function(oldAttr) {};\n\n/**\n * @param {string} name\n * @param {string|number|boolean|!TrustedHTML|!TrustedScriptURL|!TrustedURL}\n * value Values are converted to strings with ToString, so we accept number\n * and boolean since both convert easily to strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttribute\n */\nElement.prototype.setAttribute = function(name, value) {};\n\n/**\n * @param {Attr} newAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttributeNode\n */\nElement.prototype.setAttributeNode = function(newAttr) {};\n\n// Event handlers\n// The DOM level 3 spec has a good index of these\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-types\n\n/** @type {?function (Event)} */ Element.prototype.onabort;\n/** @type {?function (Event)} */ Element.prototype.onbeforeinput;\n/** @type {?function (Event)} */ Element.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Element.prototype.onblur;\n/** @type {?function (Event)} */ Element.prototype.onchange;\n/** @type {?function (Event)} */ Element.prototype.onclick;\n/** @type {?function (Event)} */ Element.prototype.oncompositionstart;\n/** @type {?function (Event)} */ Element.prototype.oncompositionupdate;\n/** @type {?function (Event)} */ Element.prototype.oncompositionend;\n/** @type {?function (Event)} */ Element.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Element.prototype.oncopy;\n/** @type {?function (Event)} */ Element.prototype.oncut;\n/** @type {?function (Event)} */ Element.prototype.ondblclick;\n/** @type {?function (Event)} */ Element.prototype.onerror;\n/** @type {?function (Event)} */ Element.prototype.onfocus;\n/** @type {?function (Event)} */ Element.prototype.onfocusin;\n/** @type {?function (Event)} */ Element.prototype.onfocusout;\n/** @type {?function (Event)} */ Element.prototype.oninput;\n/** @type {?function (Event)} */ Element.prototype.onkeydown;\n/** @type {?function (Event)} */ Element.prototype.onkeypress;\n/** @type {?function (Event)} */ Element.prototype.onkeyup;\n/** @type {?function (Event): void} */ Element.prototype.onload;\n/** @type {?function (Event): void} */ Element.prototype.onunload;\n/** @type {?function (Event)} */ Element.prototype.onmousedown;\n/** @type {?function (Event)} */ Element.prototype.onmousemove;\n/** @type {?function (Event)} */ Element.prototype.onmouseout;\n/** @type {?function (Event)} */ Element.prototype.onmouseover;\n/** @type {?function (Event)} */ Element.prototype.onmouseup;\n/** @type {?function (Event)} */ Element.prototype.onmousewheel;\n/** @type {?function (Event)} */ Element.prototype.onpaste;\n/** @type {?function (Event)} */ Element.prototype.onreset;\n/** @type {?function (Event)} */ Element.prototype.onresize;\n/** @type {?function (Event)} */ Element.prototype.onscroll;\n/** @type {?function (Event)} */ Element.prototype.onselect;\n/** @type {?function (Event=)} */ Element.prototype.onsubmit;\n/** @type {?function (Event)} */ Element.prototype.ontextinput;\n/** @type {?function (Event)} */ Element.prototype.onwheel;\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @param {string=} contents Optional textual content.\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1312295772\n */\nfunction Text(contents) {}\n\n/**\n * @param {number} offset\n * @return {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-38853C1D\n */\nText.prototype.splitText = function(offset) {};\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1728279322\n */\nfunction Comment() {}\n\n/**\n * @constructor\n * @extends {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-667469212\n */\nfunction CDATASection() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-412266927\n */\nfunction DocumentType() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1844763134\n */\nDocumentType.prototype.name;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1004215813\n */\nfunction ProcessingInstruction() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-837822393\n */\nProcessingInstruction.prototype.data;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1478689192\n */\nProcessingInstruction.prototype.target;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction Window() {}\nWindow.prototype.Window;\n\n/** @override */\nWindow.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function (Event)} */ Window.prototype.onabort;\n/** @type {?function (Event)} */ Window.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Window.prototype.onblur;\n/** @type {?function (Event)} */ Window.prototype.onchange;\n/** @type {?function (Event)} */ Window.prototype.onclick;\n/** @type {?function (Event)} */ Window.prototype.onclose;\n/** @type {?function (Event)} */ Window.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Window.prototype.ondblclick;\n/** @type {?function (Event)} */ Window.prototype.ondragdrop;\n// onerror has a special signature.\n// See\n// https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror\n/**\n * @type {?function (string, string, number, number, !Error):?}\n */\nWindow.prototype.onerror;\n/** @type {?function (Event)} */ Window.prototype.onfocus;\n/** @type {?function (Event)} */ Window.prototype.onhashchange;\n/** @type {?function (Event)} */ Window.prototype.onkeydown;\n/** @type {?function (Event)} */ Window.prototype.onkeypress;\n/** @type {?function (Event)} */ Window.prototype.onkeyup;\n/** @type {?function (Event)} */ Window.prototype.onload;\n/** @type {?function (Event)} */ Window.prototype.onmousedown;\n/** @type {?function (Event)} */ Window.prototype.onmousemove;\n/** @type {?function (Event)} */ Window.prototype.onmouseout;\n/** @type {?function (Event)} */ Window.prototype.onmouseover;\n/** @type {?function (Event)} */ Window.prototype.onmouseup;\n/** @type {?function (Event)} */ Window.prototype.onmousewheel;\n/** @type {?function (Event)} */ Window.prototype.onpaint;\n/** @type {?function (Event)} */ Window.prototype.onpopstate;\n/** @type {?function (Event)} */ Window.prototype.onreset;\n/** @type {?function (Event)} */ Window.prototype.onresize;\n/** @type {?function (Event)} */ Window.prototype.onscroll;\n/** @type {?function (Event)} */ Window.prototype.onselect;\n/** @type {?function (Event=)} */ Window.prototype.onsubmit;\n/** @type {?function (Event)} */ Window.prototype.onunhandledrejection;\n/** @type {?function (Event)} */ Window.prototype.onunload;\n/** @type {?function (Event)} */ Window.prototype.onwheel;\n", +-"externs/w3c_dom2.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 2 specification.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n */\n\n/**\n * @param {string} s id.\n * @return {Element}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBId\n */\nDocument.prototype.getElementById = function(s) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createElementNS =\n function(namespaceURI, qualifiedName, opt_typeExtension) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @return {!Attr}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createAttributeNS =\n function(namespaceURI, qualifiedName) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!NodeIterator}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createNodeIterator = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!TreeWalker}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createTreeWalker = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {string} namespace\n * @param {string} name\n * @return {!NodeList}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBTNNS\n */\nDocument.prototype.getElementsByTagNameNS = function(namespace, name) {};\n\n/**\n * @param {!Node} externalNode\n * @param {boolean=} deep\n * @return {!Node}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#Core-Document-importNode\n */\nDocument.prototype.importNode = function(externalNode, deep) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75708506\n */\nfunction HTMLCollection() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40057551\n */\nHTMLCollection.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33262535\n * @nosideeffects\n */\nHTMLCollection.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21069976\n * @nosideeffects\n */\nHTMLCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmloptionscollection\n */\nfunction HTMLOptionsCollection() {}\n\n/**\n * @type {number}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-length\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.length;\n\n/**\n * @param {HTMLOptionElement|HTMLOptGroupElement} element\n * @param {HTMLElement|number=} before\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-add\n */\nHTMLOptionsCollection.prototype.add = function(element, before) {};\n\n/**\n * NOTE(tjgq): The HTMLOptionsCollection#item method is inherited from\n * HTMLCollection, but it must be declared explicitly to work around an error\n * when building a jsinterop library for GWT.\n * @param {number} index\n * @return {HTMLOptionElement}\n * @override\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.item = function(index) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-remove\n */\nHTMLOptionsCollection.prototype.remove = function(index) {};\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26809268\n */\nfunction HTMLDocument() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18446827\n */\nHTMLDocument.prototype.title;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95229140\n */\nHTMLDocument.prototype.referrer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2250147\n */\nHTMLDocument.prototype.domain;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46183437\n */\nHTMLDocument.prototype.URL;\n\n/**\n * @type {!HTMLBodyElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56360201\n */\nHTMLDocument.prototype.body;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90379117\n */\nHTMLDocument.prototype.images;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85113862\n */\nHTMLDocument.prototype.applets;\n\n/**\n * @type {!HTMLCollection<(!HTMLAnchorElement|!HTMLAreaElement)>}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7068919\n */\nHTMLDocument.prototype.links;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1689064\n */\nHTMLDocument.prototype.forms;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7577272\n */\nHTMLDocument.prototype.anchors;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8747038\n */\nHTMLDocument.prototype.cookie;\n\n/**\n * @param {string=} opt_mimeType\n * @param {string=} opt_replace\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72161170\n * Even though official spec says "no parameters" some old browsers might take\n * optional parameters: https://msdn.microsoft.com/en-us/library/ms536652(v=vs.85).aspx\n * @override\n */\nHTMLDocument.prototype.open = function(opt_mimeType, opt_replace) {};\n\n/**\n * @param {string} elementName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71555259\n * @nosideeffects\n */\nHTMLDocument.prototype.getElementsByName = function(elementName) {};\n\n\n/** @typedef {{\n createNodeIterator: function(Node, number=, NodeFilter=, boolean=) : NodeIterator,\n createTreeWalker: function(Node, number=, NodeFilter=, boolean=) : TreeWalker\n}} */\nvar TraversalDocument;\n\n/**\n * @record\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter\n*/\nfunction NodeFilter() {}\n\n/* Constants for whatToShow */\n/** @const {number} */ NodeFilter.SHOW_ALL;\n/** @const {number} */ NodeFilter.SHOW_ATTRIBUTE;\n/** @const {number} */ NodeFilter.SHOW_CDATA_SECTION;\n/** @const {number} */ NodeFilter.SHOW_COMMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_FRAGMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_TYPE;\n/** @const {number} */ NodeFilter.SHOW_ELEMENT;\n/** @const {number} */ NodeFilter.SHOW_ENTITY;\n/** @const {number} */ NodeFilter.SHOW_ENTITY_REFERENCE;\n/** @const {number} */ NodeFilter.SHOW_NOTATION;\n/** @const {number} */ NodeFilter.SHOW_PROCESSING_INSTRUCTION;\n/** @const {number} */ NodeFilter.SHOW_TEXT;\n\n/* Consants for acceptNode */\n/** @const {number} */ NodeFilter.FILTER_ACCEPT;\n/** @const {number} */ NodeFilter.FILTER_REJECT;\n/** @const {number} */ NodeFilter.FILTER_SKIP;\n\n/**\n * @param {Node} n\n * @return {number} Any of NodeFilter.FILTER_* constants.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter-acceptNode\n*/\nNodeFilter.prototype.acceptNode = function(n) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator\n*/\nfunction NodeIterator() {}\n\n/**\n * Detach and invalidate the NodeIterator.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-detach\n * @return {undefined}\n */\nNodeIterator.prototype.detach = function() {};\n\n/**\n * @return {Node} Next node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-nextNode\n */\nNodeIterator.prototype.nextNode = function() {};\n\n/**\n * @return {Node} Previous node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-previousNode\n */\nNodeIterator.prototype.previousNode = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker\n*/\nfunction TreeWalker() {}\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-firstChild\n */\nTreeWalker.prototype.firstChild = function() {};\n\n/**\n * @return {?Node} The new Node or null..\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-lastChild\n */\nTreeWalker.prototype.lastChild = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextNode\n */\nTreeWalker.prototype.nextNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextSibling\n */\nTreeWalker.prototype.nextSibling = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-parentNode\n */\nTreeWalker.prototype.parentNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousNode\n */\nTreeWalker.prototype.previousNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousSibling\n */\nTreeWalker.prototype.previousSibling = function() {};\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.root;\n\n/**\n * @type {number}\n */\nTreeWalker.prototype.whatToShow;\n\n/**\n * @type {NodeFilter}\n */\nTreeWalker.prototype.filter;\n\n/**\n * @type {boolean}\n */\nTreeWalker.prototype.expandEntityReference;\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.currentNode;\n\n/**\n * @constructor\n * @extends {Element}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58190037\n */\nfunction HTMLElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78276800\n */\nHTMLElement.prototype.title;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nHTMLElement.prototype.style;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59132807\n */\nHTMLElement.prototype.lang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52460740\n */\nHTMLElement.prototype.dir;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95362176\n */\nHTMLElement.prototype.className;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40676705\n */\nHTMLElement.prototype.tabIndex;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33759296\n */\nfunction HTMLHtmlElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9383775\n */\nHTMLHtmlElement.prototype.version;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77253168\n */\nfunction HTMLHeadElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96921909\n */\nHTMLHeadElement.prototype.profile;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35143001\n */\nfunction HTMLLinkElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87355129\n */\nHTMLLinkElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63954491\n */\nHTMLLinkElement.prototype.charset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33532588\n */\nHTMLLinkElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85145682\n */\nHTMLLinkElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75813125\n */\nHTMLLinkElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41369587\n */\nHTMLLinkElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40715461\n */\nHTMLLinkElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84183095\n */\nHTMLLinkElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32498296\n */\nHTMLLinkElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLLinkElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79243169\n */\nfunction HTMLTitleElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77500413\n */\nHTMLTitleElement.prototype.text;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37041454\n */\nfunction HTMLMetaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87670826\n */\nHTMLMetaElement.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77289449\n */\nHTMLMetaElement.prototype.httpEquiv;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31037081\n */\nHTMLMetaElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35993789\n */\nHTMLMetaElement.prototype.scheme;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73629039\n */\nfunction HTMLBaseElement() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65382887\n */\nHTMLBaseElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73844298\n */\nHTMLBaseElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85283003\n */\nfunction HTMLIsIndexElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87069980\n */\nHTMLIsIndexElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33589862\n */\nHTMLIsIndexElement.prototype.prompt;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16428977\n */\nfunction HTMLStyleElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51162010\n */\nHTMLStyleElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76412738\n */\nHTMLStyleElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22472002\n */\nHTMLStyleElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLStyleElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62018039\n */\nfunction HTMLBodyElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59424581\n */\nHTMLBodyElement.prototype.aLink;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37574810\n */\nHTMLBodyElement.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24940084\n */\nHTMLBodyElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7662206\n */\nHTMLBodyElement.prototype.link;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73714763\n */\nHTMLBodyElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83224305\n */\nHTMLBodyElement.prototype.vLink;\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @implements {IObject)>}\n * @implements {IArrayLike}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlformcontrolscollection-interface\n */\nfunction HTMLFormControlsCollection() {}\n\n/**\n * @param {string} name\n * @return {T|RadioNodeList|null}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#dom-htmlformcontrolscollection-nameditem\n * @nosideeffects\n * @override\n */\nHTMLFormControlsCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40002357\n */\nfunction HTMLFormElement() {}\n\n/**\n * @type {!HTMLFormControlsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76728479\n */\nHTMLFormElement.prototype.elements;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLFormElement-length\n */\nHTMLFormElement.prototype.length;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22051454\n */\nHTMLFormElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19661795\n */\nHTMLFormElement.prototype.acceptCharset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74049184\n */\nHTMLFormElement.prototype.action;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84227810\n */\nHTMLFormElement.prototype.enctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82545539\n */\nHTMLFormElement.prototype.method;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6512890\n */\nHTMLFormElement.prototype.target;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767676\n */\nHTMLFormElement.prototype.submit = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767677\n */\nHTMLFormElement.prototype.reset = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94282980\n */\nfunction HTMLSelectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58783172\n */\nHTMLSelectElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85676760\n */\nHTMLSelectElement.prototype.selectedIndex;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59351919\n */\nHTMLSelectElement.prototype.value;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5933486\n */\nHTMLSelectElement.prototype.length;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20489458\n */\nHTMLSelectElement.prototype.form;\n\n/**\n * @type {!HTMLOptionsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30606413\n */\nHTMLSelectElement.prototype.options;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79102918\n */\nHTMLSelectElement.prototype.disabled;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13246613\n */\nHTMLSelectElement.prototype.multiple;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41636323\n */\nHTMLSelectElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18293826\n */\nHTMLSelectElement.prototype.size;\n\n/**\n * @param {HTMLElement} element\n * @param {HTMLElement=} opt_before\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14493106\n */\nHTMLSelectElement.prototype.add = function(element, opt_before) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-28216144\n * @override\n */\nHTMLSelectElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32130014\n * @override\n */\nHTMLSelectElement.prototype.focus = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33404570\n * @override\n */\nHTMLSelectElement.prototype.remove = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38450247\n */\nfunction HTMLOptGroupElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15518803\n */\nHTMLOptGroupElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95806054\n */\nHTMLOptGroupElement.prototype.label;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70901257\n */\nfunction HTMLOptionElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37770574\n */\nHTMLOptionElement.prototype.defaultSelected;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23482473\n */\nHTMLOptionElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17116503\n */\nHTMLOptionElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14038413\n */\nHTMLOptionElement.prototype.index;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40736115\n */\nHTMLOptionElement.prototype.label;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70874476\n */\nHTMLOptionElement.prototype.selected;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48154426\n */\nHTMLOptionElement.prototype.text;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6185554\n */\nHTMLOptionElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6043025\n */\nfunction HTMLInputElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15328520\n */\nHTMLInputElement.prototype.accept;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59914154\n */\nHTMLInputElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96991182\n */\nHTMLInputElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92701314\n */\nHTMLInputElement.prototype.alt;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30233917\n */\nHTMLInputElement.prototype.checked;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20509171\n */\nHTMLInputElement.prototype.defaultChecked;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26091157\n */\nHTMLInputElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50886781\n */\nHTMLInputElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63239895\n */\nHTMLInputElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-54719353\n */\nHTMLInputElement.prototype.maxLength;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89658498\n */\nHTMLInputElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88461592\n */\nHTMLInputElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79659438\n */\nHTMLInputElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97320704\n */\nHTMLInputElement.prototype.src;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62176355\n */\nHTMLInputElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62883744\n */\nHTMLInputElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32463706\n */\nHTMLInputElement.prototype.useMap;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49531485\n */\nHTMLInputElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26838235\n * @override\n */\nHTMLInputElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2651361\n * @override\n */\nHTMLInputElement.prototype.click = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65996295\n * @override\n */\nHTMLInputElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34677168\n */\nHTMLInputElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24874179\n */\nfunction HTMLTextAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93102991\n */\nHTMLTextAreaElement.prototype.accessKey;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51387225\n */\nHTMLTextAreaElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36152213\n */\nHTMLTextAreaElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98725443\n */\nHTMLTextAreaElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18911464\n */\nHTMLTextAreaElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715578\n */\nHTMLTextAreaElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39131423\n */\nHTMLTextAreaElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46975887\n */\nHTMLTextAreaElement.prototype.rows;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-60363303\n */\nHTMLTextAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLTextAreaElement-type\n */\nHTMLTextAreaElement.prototype.type;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715579\n */\nHTMLTextAreaElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6750689\n * @override\n */\nHTMLTextAreaElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39055426\n * @override\n */\nHTMLTextAreaElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48880622\n */\nHTMLTextAreaElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34812697\n */\nfunction HTMLButtonElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73169431\n */\nHTMLButtonElement.prototype.accessKey;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92757155\n */\nHTMLButtonElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71254493\n */\nHTMLButtonElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11029910\n */\nHTMLButtonElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39190908\n */\nHTMLButtonElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27430092\n */\nHTMLButtonElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72856782\n */\nHTMLButtonElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13691394\n */\nfunction HTMLLabelElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43589892\n */\nHTMLLabelElement.prototype.accessKey;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32480901\n */\nHTMLLabelElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96509813\n */\nHTMLLabelElement.prototype.htmlFor;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7365882\n */\nfunction HTMLFieldSetElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75392630\n */\nHTMLFieldSetElement.prototype.form;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#attr-fieldset-disabled\n */\nHTMLFieldSetElement.prototype.disabled;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21482039\n */\nfunction HTMLLegendElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11297832\n */\nHTMLLegendElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79538067\n */\nHTMLLegendElement.prototype.align;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-29594519\n */\nHTMLLegendElement.prototype.form;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-86834457\n */\nfunction HTMLUListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39864178\n */\nHTMLUListElement.prototype.compact;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96874670\n */\nHTMLUListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58056027\n */\nfunction HTMLOListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76448506\n */\nHTMLOListElement.prototype.compact;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14793325\n */\nHTMLOListElement.prototype.start;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40971103\n */\nHTMLOListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52368974\n */\nfunction HTMLDListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21738539\n */\nHTMLDListElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71600284\n */\nfunction HTMLDirectoryElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75317739\n */\nHTMLDirectoryElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72509186\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menu-element\n */\nfunction HTMLMenuElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68436464\n */\nHTMLMenuElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74680021\n */\nfunction HTMLLIElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52387668\n */\nHTMLLIElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45496263\n */\nHTMLLIElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22445964\n */\nfunction HTMLDivElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70908791\n */\nHTMLDivElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84675076\n */\nfunction HTMLParagraphElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53465507\n */\nHTMLParagraphElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43345119\n */\nfunction HTMLHeadingElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6796462\n */\nHTMLHeadingElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70319763\n */\nfunction HTMLQuoteElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53895598\n */\nHTMLQuoteElement.prototype.cite;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11383425\n */\nfunction HTMLPreElement() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13894083\n */\nHTMLPreElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56836063\n */\nfunction HTMLBRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82703081\n */\nHTMLBRElement.prototype.clear;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32774408\n */\nfunction HTMLBaseFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87502302\n */\nHTMLBaseFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88128969\n */\nHTMLBaseFontElement.prototype.face;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38930424\n */\nHTMLBaseFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43943847\n */\nfunction HTMLFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53532975\n */\nHTMLFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55715655\n */\nHTMLFontElement.prototype.face;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90127284\n */\nHTMLFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68228811\n */\nfunction HTMLHRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15235012\n */\nHTMLHRElement.prototype.align;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79813978\n */\nHTMLHRElement.prototype.noShade;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77612587\n */\nHTMLHRElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87744198\n */\nHTMLHRElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79359609\n */\nfunction HTMLModElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75101708\n */\nHTMLModElement.prototype.cite;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88432678\n */\nHTMLModElement.prototype.dateTime;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48250443\n */\nfunction HTMLAnchorElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89647724\n */\nHTMLAnchorElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67619266\n */\nHTMLAnchorElement.prototype.charset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92079539\n */\nHTMLAnchorElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88517319\n */\nHTMLAnchorElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87358513\n */\nHTMLAnchorElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32783304\n */\nHTMLAnchorElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3815891\n */\nHTMLAnchorElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58259771\n */\nHTMLAnchorElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49899808\n */\nHTMLAnchorElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41586466\n */\nHTMLAnchorElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6414197\n */\nHTMLAnchorElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63938221\n */\nHTMLAnchorElement.prototype.type;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65068939\n * @override\n */\nHTMLAnchorElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47150313\n * @override\n */\nHTMLAnchorElement.prototype.focus = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17701901\n */\nfunction HTMLImageElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3211094\n */\nHTMLImageElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95636861\n */\nHTMLImageElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-136671\n */\nHTMLImageElement.prototype.border;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91561496\n */\nHTMLImageElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53675471\n */\nHTMLImageElement.prototype.hspace;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58983880\n */\nHTMLImageElement.prototype.isMap;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77376969\n */\nHTMLImageElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91256910\n */\nHTMLImageElement.prototype.lowSrc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47534097\n */\nHTMLImageElement.prototype.name;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87762984\n */\nHTMLImageElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35981181\n */\nHTMLImageElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85374897\n */\nHTMLImageElement.prototype.vspace;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13839076\n */\nHTMLImageElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9893177\n */\nfunction HTMLObjectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16962097\n */\nHTMLObjectElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47783837\n */\nHTMLObjectElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82818419\n */\nHTMLObjectElement.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75241146\n */\nHTMLObjectElement.prototype.code;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25709136\n */\nHTMLObjectElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19945008\n */\nHTMLObjectElement.prototype.codeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538621\n */\nHTMLObjectElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81766986\n */\nHTMLObjectElement.prototype.data;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-942770\n */\nHTMLObjectElement.prototype.declare;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46094773\n */\nHTMLObjectElement.prototype.form;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88925838\n */\nHTMLObjectElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17085376\n */\nHTMLObjectElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20110362\n */\nHTMLObjectElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25039673\n */\nHTMLObjectElement.prototype.standby;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27083787\n */\nHTMLObjectElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91665621\n */\nHTMLObjectElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6649772\n */\nHTMLObjectElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8682483\n */\nHTMLObjectElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538620\n */\nHTMLObjectElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64077273\n */\nfunction HTMLParamElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59871447\n */\nHTMLParamElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18179888\n */\nHTMLParamElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77971357\n */\nHTMLParamElement.prototype.value;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23931872\n */\nHTMLParamElement.prototype.valueType;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31006348\n */\nfunction HTMLAppletElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8049912\n */\nHTMLAppletElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58610064\n */\nHTMLAppletElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14476360\n */\nHTMLAppletElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61509645\n */\nHTMLAppletElement.prototype.code;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6581160\n */\nHTMLAppletElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90184867\n */\nHTMLAppletElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1567197\n */\nHTMLAppletElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39843695\n */\nHTMLAppletElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93681523\n */\nHTMLAppletElement.prototype.object;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22637173\n */\nHTMLAppletElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16526327\n */\nHTMLAppletElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94109203\n */\nfunction HTMLMapElement() {}\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71838730\n */\nHTMLMapElement.prototype.areas;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52696514\n */\nHTMLMapElement.prototype.name;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26019118\n */\nfunction HTMLAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57944457\n */\nHTMLAreaElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39775416\n */\nHTMLAreaElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66021476\n */\nHTMLAreaElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34672936\n */\nHTMLAreaElement.prototype.href;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61826871\n */\nHTMLAreaElement.prototype.noHref;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85683271\n */\nHTMLAreaElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8722121\n */\nHTMLAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46054682\n */\nHTMLAreaElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81598695\n */\nfunction HTMLScriptElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35305677\n */\nHTMLScriptElement.prototype.charset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93788534\n */\nHTMLScriptElement.prototype.defer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56700403\n */\nHTMLScriptElement.prototype.event;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66979266\n */\nHTMLScriptElement.prototype.htmlFor;\n\n/**\n * @type {?function(!Event)}\n */\nHTMLScriptElement.prototype.onreadystatechange;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75147231\n */\nHTMLScriptElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46872999\n */\nHTMLScriptElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30534818\n */\nHTMLScriptElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64060425\n */\nfunction HTMLTableElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23180977\n */\nHTMLTableElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83532985\n */\nHTMLTableElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50969400\n */\nHTMLTableElement.prototype.border;\n\n/**\n * @type {HTMLTableCaptionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14594520\n */\nHTMLTableElement.prototype.caption;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59162158\n */\nHTMLTableElement.prototype.cellPadding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68907883\n */\nHTMLTableElement.prototype.cellSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64808476\n */\nHTMLTableElement.prototype.frame;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6156016\n */\nHTMLTableElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26347553\n */\nHTMLTableElement.prototype.rules;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-44998528\n */\nHTMLTableElement.prototype.summary;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63206416\n */\nHTMLTableElement.prototype.tBodies;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64197097\n */\nHTMLTableElement.prototype.tFoot;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9530944\n */\nHTMLTableElement.prototype.tHead;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77447361\n */\nHTMLTableElement.prototype.width;\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96920263\n */\nHTMLTableElement.prototype.createCaption = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8453710\n */\nHTMLTableElement.prototype.createTFoot = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70313345\n */\nHTMLTableElement.prototype.createTHead = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22930071\n */\nHTMLTableElement.prototype.deleteCaption = function() {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13114938\n */\nHTMLTableElement.prototype.deleteRow = function(index) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78363258\n */\nHTMLTableElement.prototype.deleteTFoot = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38310198\n */\nHTMLTableElement.prototype.deleteTHead = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltableelement\n */\nHTMLTableElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-12035137\n */\nfunction HTMLTableCaptionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79875068\n */\nHTMLTableCaptionElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84150186\n */\nfunction HTMLTableColElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31128447\n */\nHTMLTableColElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9447412\n */\nHTMLTableColElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57779225\n */\nHTMLTableColElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96511335\n */\nHTMLTableColElement.prototype.span;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83291710\n */\nHTMLTableColElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25196799\n */\nHTMLTableColElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67417573\n */\nfunction HTMLTableSectionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40530119\n */\nHTMLTableSectionElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83470012\n */\nHTMLTableSectionElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53459732\n */\nHTMLTableSectionElement.prototype.chOff;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52092650\n */\nHTMLTableSectionElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-4379116\n */\nHTMLTableSectionElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5625626\n */\nHTMLTableSectionElement.prototype.deleteRow = function(index) {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltablesectionelement\n */\nHTMLTableSectionElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6986576\n */\nfunction HTMLTableRowElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74098257\n */\nHTMLTableRowElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18161327\n */\nHTMLTableRowElement.prototype.bgColor;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67349879\n */\nHTMLTableRowElement.prototype.cells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16230502\n */\nHTMLTableRowElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68207461\n */\nHTMLTableRowElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67347567\n */\nHTMLTableRowElement.prototype.rowIndex;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79105901\n */\nHTMLTableRowElement.prototype.sectionRowIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90000058\n */\nHTMLTableRowElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11738598\n */\nHTMLTableRowElement.prototype.deleteCell = function(index) {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68927016\n */\nHTMLTableRowElement.prototype.insertCell = function(index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82915075\n */\nfunction HTMLTableCellElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74444037\n */\nHTMLTableCellElement.prototype.abbr;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98433879\n */\nHTMLTableCellElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76554418\n */\nHTMLTableCellElement.prototype.axis;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88135431\n */\nHTMLTableCellElement.prototype.bgColor;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80748363\n */\nHTMLTableCellElement.prototype.cellIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30914780\n */\nHTMLTableCellElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20144310\n */\nHTMLTableCellElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84645244\n */\nHTMLTableCellElement.prototype.colSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89104817\n */\nHTMLTableCellElement.prototype.headers;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83679212\n */\nHTMLTableCellElement.prototype.height;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62922045\n */\nHTMLTableCellElement.prototype.noWrap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48237625\n */\nHTMLTableCellElement.prototype.rowSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36139952\n */\nHTMLTableCellElement.prototype.scope;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58284221\n */\nHTMLTableCellElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27480795\n */\nHTMLTableCellElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43829095\n */\nfunction HTMLFrameSetElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98869594\n */\nHTMLFrameSetElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19739247\n */\nHTMLFrameSetElement.prototype.rows;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97790553\n */\nfunction HTMLFrameElement() {}\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799536\n */\nHTMLFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11858633\n */\nHTMLFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7836998\n */\nHTMLFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55569778\n */\nHTMLFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8369969\n */\nHTMLFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91128709\n */\nHTMLFrameElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80766578\n */\nHTMLFrameElement.prototype.noResize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45411424\n */\nHTMLFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799535\n */\nHTMLFrameElement.prototype.src;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50708718\n */\nfunction HTMLIFrameElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11309947\n */\nHTMLIFrameElement.prototype.align;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133006\n */\nHTMLIFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22463410\n */\nHTMLIFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1678118\n */\nHTMLIFrameElement.prototype.height;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70472105\n */\nHTMLIFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91371294\n */\nHTMLIFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66486595\n */\nHTMLIFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96819659\n */\nHTMLIFrameElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36369822\n */\nHTMLIFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43933957\n */\nHTMLIFrameElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133005\n */\nHTMLIFrameElement.prototype.width;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_STATE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.SYNTAX_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_MODIFICATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.NAMESPACE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_ACCESS_ERR;\n/**\n * @type {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.closed\n */\nWindow.prototype.closed;\n\n/**\n * @type {HTMLObjectElement|HTMLIFrameElement|null}\n * @see https://developer.mozilla.org/en/DOM/window.frameElement\n */\nWindow.prototype.frameElement;\n\n/**\n * Allows lookup of frames by index or by name.\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.frames\n */\nWindow.prototype.frames;\n\n/**\n * @type {!History}\n * @suppress {duplicate}\n * @see https://developer.mozilla.org/en/DOM/window.history\n */\nvar history;\n\n/**\n * @type {!History}\n * @see https://developer.mozilla.org/en/DOM/window.history\n */\nWindow.prototype.history;\n\n/**\n * Returns the number of frames (either frame or iframe elements) in the\n * window.\n *\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/window.length\n */\nWindow.prototype.length;\n\n/**\n * Location has an exception in the DeclaredGlobalExternsOnWindow pass\n * so we have to manually include it:\n * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116\n *\n * @type {!Location}\n * @implicitCast\n * @see https://developer.mozilla.org/en/DOM/window.location\n */\nWindow.prototype.location;\n\n/**\n\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/window.name\n */\nWindow.prototype.name;\n\n/**\n * @type {Navigator}\n * @see https://developer.mozilla.org/en/DOM/window.navigator\n */\nWindow.prototype.navigator;\n\n/**\n * @type {?Window}\n * @see https://developer.mozilla.org/en/DOM/window.opener\n */\nWindow.prototype.opener;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.parent\n */\nWindow.prototype.parent;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.self;\n\n/**\n * @type {?string}\n * @see https://developer.mozilla.org/en/DOM/window.status\n */\nWindow.prototype.status;\n\n/**\n * @interface\n * @see https://html.spec.whatwg.org/multipage/window-object.html#the-status-bar-barprop-object\n */\nfunction BarProp() {}\n\n/** @const {boolean} */\nBarProp.prototype.visible;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.locationbar\n */\nWindow.prototype.locationbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.menubar\n */\nWindow.prototype.menubar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.personalbar\n */\nWindow.prototype.personalbar;\n\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.scrollbars\n */\nWindow.prototype.scrollbars;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.statusbar\n */\nWindow.prototype.statusbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.mozilla.org/en/DOM/window.toolbar\n */\nWindow.prototype.toolbar;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.top;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.window;\n\n/**\n * @param {*} message\n * @see https://developer.mozilla.org/en/DOM/window.alert\n * @return {undefined}\n */\nWindow.prototype.alert = function(message) {};\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.confirm\n */\nWindow.prototype.confirm = function(message) {};\n\n/**\n * @param {string} message\n * @param {string=} value\n * @return {?string}\n * @see https://developer.mozilla.org/en/DOM/window.prompt\n */\nWindow.prototype.prompt = function(message, value) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.blur\n * @return {undefined}\n */\nWindow.prototype.blur = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.close\n * @return {undefined}\n */\nWindow.prototype.close = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.focus\n * @return {undefined}\n */\nWindow.prototype.focus = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/print\n * @return {undefined}\n */\nWindow.prototype.print = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/stop\n * @return {undefined}\n */\nWindow.prototype.stop = function() {};\n\n/**\n * @param {*=} url\n * @param {string=} windowName\n * @param {string=} windowFeatures\n * @param {boolean=} replace\n * @return {Window}\n * @see http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx\n */\nWindow.prototype.open = function(url, windowName, windowFeatures, replace) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML\n * @implicitCast\n */\nElement.prototype.innerHTML;\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface\n */\nElement.prototype.outerHTML;\n\n', +-"externs/w3c_dom3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 3 specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.prototype.code;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.VALIDATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.TYPE_MISMATCH_ERR;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList\n */\nfunction DOMStringList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-length\n */\nDOMStringList.prototype.length;\n\n/**\n * @param {string} str\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-contains\n * @nosideeffects\n */\nDOMStringList.prototype.contains = function(str) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-item\n * @nosideeffects\n */\nDOMStringList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList\n */\nfunction DOMImplementationList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-length\n */\nDOMImplementationList.prototype.length;\n\n/**\n * @param {number} index\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-item\n * @nosideeffects\n */\nDOMImplementationList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationSource\n */\nfunction DOMImplementationSource() {}\n\n/**\n * @param {?string} namespaceURI\n * @param {string} publicId\n * @param {DocumentType} doctype\n * @return {Document}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocument = function(namespaceURI, publicId, doctype) {};\n\n/**\n * @param {string} qualifiedName\n * @param {string} publicId\n * @param {string} systemId\n * @return {DocumentType}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocType\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpl\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementation = function(features) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementationList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpls\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementationList = function(features) {};\n\n/**\n * @param {Node} externalNode\n * @return {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-adoptNode\n */\nDocument.prototype.adoptNode = function(externalNode) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-documentURI\n */\nDocument.prototype.documentURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-inputEncoding\n */\nDocument.prototype.inputEncoding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-encoding\n */\nDocument.prototype.xmlEncoding;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-standalone\n */\nDocument.prototype.xmlStandalone;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-version\n */\nDocument.prototype.xmlVersion;\n\n/**\n * @type {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-baseURI\n */\nNode.prototype.baseURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSLocalN\n */\nNode.prototype.localName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSname\n */\nNode.prototype.namespaceURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSPrefix\n */\nNode.prototype.prefix;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent\n */\nNode.prototype.textContent;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_DISCONNECTED\n */\nNode.DOCUMENT_POSITION_DISCONNECTED;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_PRECEDING\n */\nNode.DOCUMENT_POSITION_PRECEDING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_FOLLOWING\n */\nNode.DOCUMENT_POSITION_FOLLOWING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINS\n */\nNode.DOCUMENT_POSITION_CONTAINS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINED_BY\n */\nNode.DOCUMENT_POSITION_CONTAINED_BY;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n */\nNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n\n/**\n * @param {Node} other\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition\n * @nosideeffects\n */\nNode.prototype.compareDocumentPosition = function(other) {};\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getFeature\n * @nosideeffects\n */\nNode.prototype.getFeature = function(feature, version) {};\n\n/**\n * @param {string} key\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getUserData\n * @nosideeffects\n */\nNode.prototype.getUserData = function(key) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeHasAttrs\n * @nosideeffects\n */\nNode.prototype.hasAttributes = function() {};\n\n/**\n * @param {?string} namespaceURI\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n * @nosideeffects\n */\nNode.prototype.isDefaultNamespace = function(namespaceURI) {};\n\n/**\n * @param {Node} arg\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isEqualNode\n * @nosideeffects\n */\nNode.prototype.isEqualNode = function(arg) {};\n\n/**\n * @param {Node} other\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isSameNode\n * @nosideeffects\n */\nNode.prototype.isSameNode = function(other) {};\n\n/**\n * @param {string} prefix\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n * @nosideeffects\n */\nNode.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * @param {?string} namespaceURI\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n * @nosideeffects\n */\nNode.prototype.lookupPrefix = function(namespaceURI) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-normalize\n */\nNode.prototype.normalize = function() {};\n\n/**\n * @param {string} query\n * @return {?Element}\n * @see http://www.w3.org/TR/selectors-api/#queryselector\n * @nosideeffects\n */\nNode.prototype.querySelector = function(query) {};\n\n/**\n * @param {string} query\n * @return {!NodeList}\n * @see http://www.w3.org/TR/selectors-api/#queryselectorall\n * @nosideeffects\n */\nNode.prototype.querySelectorAll = function(query) {};\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-ownerElement\n */\nAttr.prototype.ownerElement;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-isId\n */\nAttr.prototype.isId;\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAtNodeNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAttrNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-A6C90942\n * @nosideeffects\n */\nElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttr\n * @nosideeffects\n */\nElement.prototype.hasAttribute = function(name) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttrNS\n * @nosideeffects\n */\nElement.prototype.hasAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElRemAtNS\n */\nElement.prototype.removeAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {Attr} newAttr\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAtNodeNS\n */\nElement.prototype.setAttributeNodeNS = function(newAttr) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string|number|boolean} value Values are converted to strings with\n * ToString, so we accept number and boolean since both convert easily to\n * strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAttrNS\n */\nElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-wholeText\n */\nText.prototype.wholeText;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMError\n */\nfunction DOMError() {}\n\n/**\n * @type {DOMLocator}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-location\n */\nDOMError.prototype.location;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-message\n */\nDOMError.prototype.message;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedData\n */\nDOMError.prototype.relatedData;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedException\n */\nDOMError.prototype.relatedException;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-warning\n */\nDOMError.SEVERITY_WARNING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-error\n */\nDOMError.SEVERITY_ERROR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-fatal-error\n */\nDOMError.SEVERITY_FATAL_ERROR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity\n */\nDOMError.prototype.severity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-type\n */\nDOMError.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/dom/#domerror\n */\nDOMError.prototype.name;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMErrorHandler\n */\nfunction DOMErrorHandler() {}\n\n/**\n * @param {DOMError} error\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ERRORS-DOMErrorHandler-handleError\n */\nDOMErrorHandler.prototype.handleError = function(error) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Interfaces-DOMLocator\n */\nfunction DOMLocator() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-byteOffset\n */\nDOMLocator.prototype.byteOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-column-number\n */\nDOMLocator.prototype.columnNumber;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-line-number\n */\nDOMLocator.prototype.lineNumber;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-node\n */\nDOMLocator.prototype.relatedNode;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-uri\n */\nDOMLocator.prototype.uri;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-utf16Offset\n */\nDOMLocator.prototype.utf16Offset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-publicId\n */\nDocumentType.prototype.publicId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-systemId\n */\nDocumentType.prototype.systemId;\n', +-"externs/w3c_dom4.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM4 specification. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/domcore/.\n *\n * @externs\n * @author zhoumotongxue008@gmail.com (Michael Zhou)\n */\n\n/**\n * @typedef {?(DocumentType|Element|CharacterData)}\n * @see https://www.w3.org/TR/domcore/#interface-childnode\n */\nvar ChildNode;\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nDocumentType.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nElement.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nCharacterData.prototype.remove = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nDocumentType.prototype.replaceWith = function(nodes) {};\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.name;\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.message;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.SECURITY_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.NETWORK_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.ABORT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.URL_MISMATCH_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.TIMEOUT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.INVALID_NODE_TYPE_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.DATA_CLONE_ERR;\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nElement.prototype.replaceWith = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nCharacterData.prototype.replaceWith = function(nodes) {};\n\n/**\n * @return {!Array}\n * @see https://dom.spec.whatwg.org/#dom-element-getattributenames\n */\nElement.prototype.getAttributeNames = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nElement.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocument.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocumentFragment.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nElement.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocument.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocumentFragment.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nElement.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nDocumentType.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nCharacterData.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nElement.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nDocumentType.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nCharacterData.prototype.after = function(nodes) {};\n\n/**\n * @param {string} name\n * @param {boolean=} force\n * @return {boolean}\n * @throws {DOMException}\n * @see https://dom.spec.whatwg.org/#dom-element-toggleattribute\n */\nElement.prototype.toggleAttribute = function(name, force) {};\n\n/**\n * @type {Element}\n * @see http://msdn.microsoft.com/en-us/library/ms534327(VS.85).aspx\n */\nNode.prototype.parentElement;\n\n/**\n * @param {string} name\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname-classnames-classnames\n */\nDocument.prototype.getElementsByClassName = function(name) {};\n\n/**\n * @param {string} classNames\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname-classnames-classnames\n */\nElement.prototype.getElementsByClassName = function(classNames) {};\n', +-"externs/gecko_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s DOM specification by Gecko. This file depends on\n * w3c_dom2.js.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n// Gecko DOM;\n\n/**\n * Mozilla only???\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSpanElement() {}\n\n/**\n * @see https://developer.mozilla.org/en/Components_object\n */\nWindow.prototype.Components;\n\n/**\n * @type {Window}\n * @see https://developer.mozilla.org/en/DOM/window.content\n */\nWindow.prototype.content;\n\n/** @see https://developer.mozilla.org/en/DOM/window.controllers */\nWindow.prototype.controllers;\n\n/** @see https://developer.mozilla.org/en/DOM/window.crypto */\nWindow.prototype.crypto;\n\n/**\n * Gets/sets the status bar text for the given window.\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/window.defaultStatus\n */\nWindow.prototype.defaultStatus;\n\n/** @see https://developer.mozilla.org/en/DOM/window.dialogArguments */\nWindow.prototype.dialogArguments;\n\n/** @see https://developer.mozilla.org/en/DOM/window.directories */\nWindow.prototype.directories;\n\n/**\n * @type {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.fullScreen\n */\nWindow.prototype.fullScreen;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Storage#globalStorage\n */\nWindow.prototype.globalStorage;\n\n/** @see https://developer.mozilla.org/en/DOM/window.pkcs11 */\nWindow.prototype.pkcs11;\n\n/** @see https://developer.mozilla.org/en/DOM/window */\nWindow.prototype.returnValue;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.scrollMaxX\n */\nWindow.prototype.scrollMaxX;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.scrollMaxY\n */\nWindow.prototype.scrollMaxY;\n\n/** @see https://developer.mozilla.org/en/DOM/Storage#sessionStorage */\nWindow.prototype.sessionStorage;\n\n/** @see https://developer.mozilla.org/en/DOM/window.sidebar */\nWindow.prototype.sidebar;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.back\n * @return {undefined}\n */\nWindow.prototype.back = function() {};\n\n/** @deprecated */\nWindow.prototype.captureEvents;\n\n/**@see https://developer.mozilla.org/en/DOM/window.find */\nWindow.prototype.find;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.forward\n * @return {undefined}\n */\nWindow.prototype.forward = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.getAttention\n * @return {undefined}\n */\nWindow.prototype.getAttention = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.home\n * @return {undefined}\n */\nWindow.prototype.home = function() {};\n\nWindow.prototype.openDialog;\nWindow.prototype.releaseEvents;\nWindow.prototype.scrollByLines;\nWindow.prototype.scrollByPages;\n\n/**\n * @param {string} uri\n * @param {?=} opt_arguments\n * @param {string=} opt_options\n * @see https://developer.mozilla.org/en/DOM/window.showModalDialog\n */\nWindow.prototype.showModalDialog;\n\nWindow.prototype.sizeToContent;\n\nWindow.prototype.updateCommands;\n\n// properties of Document\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.alinkColor\n * @type {string}\n */\nDocument.prototype.alinkColor;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.anchors\n * @type {HTMLCollection}\n */\nDocument.prototype.anchors;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.applets\n * @type {HTMLCollection}\n */\nDocument.prototype.applets;\n/** @type {?string} */ Document.prototype.baseURI;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.bgColor\n * @type {string}\n */\nDocument.prototype.bgColor;\n\n/** @type {HTMLBodyElement} */ Document.prototype.body;\nDocument.prototype.characterSet;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.compatMode\n * @type {string}\n */\nDocument.prototype.compatMode;\n\nDocument.prototype.contentType;\n/** @type {string} */ Document.prototype.cookie;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/defaultView\n * @type {?Window}\n */\nDocument.prototype.defaultView;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.designMode\n * @type {string}\n */\nDocument.prototype.designMode;\n\nDocument.prototype.documentURIObject;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.domain\n * @type {string}\n */\nDocument.prototype.domain;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.embeds\n * @type {HTMLCollection}\n */\nDocument.prototype.embeds;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.fgColor\n * @type {string}\n */\nDocument.prototype.fgColor;\n\n/** @type {Element} */ Document.prototype.firstChild;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.forms\n * @type {HTMLCollection}\n */\nDocument.prototype.forms;\n\n/** @type {HTMLCollection} */\nDocument.prototype.images;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.lastModified\n */\nDocument.prototype.lastModified;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.linkColor\n */\nDocument.prototype.linkColor;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.links\n * @type {HTMLCollection<(!HTMLAreaElement|!HTMLAnchorElement)>}\n */\nDocument.prototype.links;\n\n/**\n * @type {!Location}\n * @implicitCast\n */\nDocument.prototype.location;\n\nDocument.prototype.namespaceURI;\nDocument.prototype.nodePrincipal;\nDocument.prototype.plugins;\nDocument.prototype.popupNode;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.referrer\n */\nDocument.prototype.referrer;\n\n/**\n * @type {StyleSheetList}\n * @see https://developer.mozilla.org/en/DOM/document.styleSheets\n */\nDocument.prototype.styleSheets;\n\n/** @type {?string} */ Document.prototype.title;\nDocument.prototype.tooltipNode;\n/** @type {string} */ Document.prototype.URL;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.vlinkColor\n */\nDocument.prototype.vlinkColor;\n\n/** @type {number} */ Document.prototype.width;\n\n// Methods of Document\n/**\n * @see https://developer.mozilla.org/en/DOM/document.clear\n * @return {undefined}\n */\nDocument.prototype.clear = function() {};\n\n/**\n * @param {string} type\n * @return {Event}\n */\nDocument.prototype.createEvent = function(type) {};\nDocument.prototype.createNSResolver;\n/** @return {Range} */ Document.prototype.createRange = function() {};\nDocument.prototype.createTreeWalker;\n\nDocument.prototype.evaluate;\n\n/**\n * @param {string} commandName\n * @param {?boolean=} opt_showUi\n * @param {*=} opt_value\n * @see https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing_Commands\n */\nDocument.prototype.execCommand;\n\nDocument.prototype.loadOverlay;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536676(VS.85).aspx\n */\nDocument.prototype.queryCommandEnabled;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536678(VS.85).aspx\n */\nDocument.prototype.queryCommandIndeterm;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536679(VS.85).aspx\n */\nDocument.prototype.queryCommandState;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.queryCommandSupported\n * @see http://msdn.microsoft.com/en-us/library/ms536681(VS.85).aspx\n * @param {string} command\n * @return {?} Implementation-specific.\n */\nDocument.prototype.queryCommandSupported;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536683(VS.85).aspx\n */\nDocument.prototype.queryCommandValue;\n\nDocument.prototype.ononline;\nDocument.prototype.onoffline;\n\n// XUL\n/**\n * @see http://developer.mozilla.org/en/DOM/document.getBoxObjectFor\n * @return {BoxObject}\n * @nosideeffects\n */\nDocument.prototype.getBoxObjectFor = function(element) {};\n\n// From:\n// http://lxr.mozilla.org/mozilla1.8/source/dom/public/idl/range/nsIDOMNSRange.idl\n\n/**\n * @param {!TrustedHTML|string} tag\n * @return {DocumentFragment}\n */\nRange.prototype.createContextualFragment;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.isPointInRange;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.comparePoint;\n\n/**\n * @param {Node} n\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.intersectsNode;\n\n/**\n * @param {Node} n\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.compareNode;\n\n/**\n * @type {!NodeList}\n * @see https://developer.mozilla.org/en/DOM/element.children\n */\nElement.prototype.children;\n\n/**\n * Firebug sets this property on elements it is inserting into the DOM.\n * @type {boolean}\n */\nElement.prototype.firebugIgnore;\n\n/**\n * Note: According to the spec, name is defined on specific types of\n * HTMLElements, rather than on Node, Element, or HTMLElement directly.\n * Ignore this.\n * @type {string}\n */\nElement.prototype.name;\n\nElement.prototype.nodePrincipal;\n\n/**\n * @type {!CSSStyleDeclaration}\n * This belongs on HTMLElement rather than Element, but that\n * breaks a lot.\n * TODO(rdcronin): Remove this declaration once the breakage is fixed.\n */\nElement.prototype.style;\n\n/**\n * @override\n * @return {!Element}\n */\nElement.prototype.cloneNode = function(deep) {};\n\n/** @return {undefined} */\nElement.prototype.click = function() {};\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionStart;\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionEnd;\n\n/**\n * @param {number} selectionStart\n * @param {number} selectionEnd\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setSelectionRange =\n function(selectionStart, selectionEnd) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.buildID\n */\nNavigator.prototype.buildID;\n\n/**\n * @type {!Array|undefined}\n * @see https://developer.mozilla.org/en/Navigator.languages\n */\nNavigator.prototype.languages;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.oscpu\n */\nNavigator.prototype.oscpu;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.productSub\n */\nNavigator.prototype.productSub;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.securityPolicy\n */\nNavigator.prototype.securityPolicy;\n\n/**\n * @param {string} url\n * @param {ArrayBufferView|Blob|string|FormData=} opt_data\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon\n */\nNavigator.prototype.sendBeacon = function(url, opt_data) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.vendor\n */\nNavigator.prototype.vendor;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.vendorSub\n */\nNavigator.prototype.vendorSub;\n\n\n/** @constructor */\nfunction BoxObject() {}\n\n/** @type {Element} */\nBoxObject.prototype.element;\n\n/** @type {number} */\nBoxObject.prototype.screenX;\n\n/** @type {number} */\nBoxObject.prototype.screenY;\n\n/** @type {number} */\nBoxObject.prototype.x;\n\n/** @type {number} */\nBoxObject.prototype.y;\n\n/** @type {number} */\nBoxObject.prototype.width;\n\n\n/**\n * @param {Element} element\n * @param {?string=} pseudoElt\n * @return {?CSSStyleDeclaration}\n * @nosideeffects\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getComputedStyle(element, pseudoElt) {}\n', +-"externs/ie_dom.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM specification by IE in JScript. This file depends on\n * w3c_dom2.js. The whole file has NOT been fully type annotated.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n// TODO(nicksantos): Rewrite all the DOM interfaces as interfaces, instead\n// of kludging them as an inheritance hierarchy.\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://msdn.microsoft.com/en-us/library/ms757878(VS.85).aspx\n */\nfunction XMLDOMDocument() {}\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms761398(VS.85).aspx\n */\nXMLDOMDocument.prototype.async;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms762647(VS.85).aspx\n */\nXMLDOMDocument.prototype.ondataavailable;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms764640(VS.85).aspx\n */\nXMLDOMDocument.prototype.onreadystatechange;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms753795(VS.85).aspx\n */\nXMLDOMDocument.prototype.ontransformnode;\n\n/**\n * @type {Object}\n * @see http://msdn.microsoft.com/en-us/library/ms756041(VS.85).aspx\n */\nXMLDOMDocument.prototype.parseError;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms761353(VS.85).aspx\n */\nXMLDOMDocument.prototype.preserveWhiteSpace;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms753702(VS.85).aspx\n */\nXMLDOMDocument.prototype.readyState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms762283(VS.85).aspx\n * @type {boolean}\n */\nXMLDOMDocument.prototype.resolveExternals;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms760290(v=vs.85).aspx\n * @param {string} name\n * @param {*} value\n * @return {undefined}\n */\nXMLDOMDocument.prototype.setProperty = function(name, value) {};\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms767669(VS.85).aspx\n */\nXMLDOMDocument.prototype.url;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms762791(VS.85).aspx\n */\nXMLDOMDocument.prototype.validateOnParse;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms763830(VS.85).aspx\n * @return {undefined}\n */\nXMLDOMDocument.prototype.abort = function() {};\n\n/**\n * @param {*} type\n * @param {string} name\n * @param {string} namespaceURI\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms757901(VS.85).aspx\n * @nosideeffects\n */\nXMLDOMDocument.prototype.createNode = function(type, name, namespaceURI) {};\n\n/**\n * @param {string} xmlString\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms754585(VS.85).aspx\n * @override\n */\nXMLDOMDocument.prototype.loadXML = function(xmlString) {};\n\n/**\n * @param {string} id\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms766397(VS.85).aspx\n */\nXMLDOMDocument.prototype.nodeFromID = function(id) {};\n\n//==============================================================================\n// XMLNode methods and properties\n// In a real DOM hierarchy, XMLDOMDocument inherits from XMLNode and Document.\n// Since we can't express that in our type system, we put XMLNode properties\n// on Node.\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms767570(VS.85).aspx\n */\nNode.prototype.baseName;\n\n/**\n * @type {?string}\n * @see http://msdn.microsoft.com/en-us/library/ms762763(VS.85).aspx\n */\nNode.prototype.dataType;\n\n/**\n * @type {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms764733(VS.85).aspx\n */\nNode.prototype.definition;\n\n/**\n * IE5 used document instead of ownerDocument.\n * Old versions of WebKit used document instead of contentDocument.\n * @type {Document}\n */\nNode.prototype.document;\n\n\n/**\n * Inserts the given HTML text into the element at the location.\n * @param {string} sWhere Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!TrustedHTML|string} sText HTML text to insert.\n * @see http://msdn.microsoft.com/en-us/library/ms536452(VS.85).aspx\n * @return {undefined}\n */\nNode.prototype.insertAdjacentHTML = function(sWhere, sText) {};\n\n/**\n * @type {*}\n * @see http://msdn.microsoft.com/en-us/library/ms762308(VS.85).aspx\n */\nNode.prototype.nodeTypedValue;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms757895(VS.85).aspx\n */\nNode.prototype.nodeTypeString;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms762237(VS.85).aspx\n */\nNode.prototype.parsed;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms753816(VS.85).aspx\n */\nNode.prototype.specified;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms762687(VS.85).aspx\n */\nNode.prototype.text;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms755989(VS.85).aspx\n */\nNode.prototype.xml;\n\n/**\n * @param {string} expression An XPath expression.\n * @return {!NodeList}\n * @see http://msdn.microsoft.com/en-us/library/ms754523(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectNodes = function(expression) {};\n\n/**\n * @param {string} expression An XPath expression.\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms757846(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectSingleNode = function(expression) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @return {string}\n * @see http://msdn.microsoft.com/en-us/library/ms761399(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.transformNode = function(stylesheet) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @param {Object} outputObject\n * @see http://msdn.microsoft.com/en-us/library/ms766561(VS.85).aspx\n * @return {Object}\n */\nNode.prototype.transformNodeToObject =\n function(stylesheet, outputObject) {};\n\n//==============================================================================\n// Node methods\n\n/**\n * @param {boolean=} opt_bRemoveChildren Whether to remove the entire sub-tree.\n * Defaults to false.\n * @return {Node} The object that was removed.\n * @see http://msdn.microsoft.com/en-us/library/ms536708(VS.85).aspx\n */\nNode.prototype.removeNode = function(opt_bRemoveChildren) {};\n\n/**\n * @constructor\n */\nfunction ClipboardData() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string=} opt_type Type of clipboard data to clear. 'Text' or\n * 'URL' or 'File' or 'HTML' or 'Image'.\n * @return {undefined}\n */\nClipboardData.prototype.clearData = function(opt_type) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to set ('Text' or 'URL').\n * @param {string} data Data to set\n * @return {boolean} Whether the data were set correctly.\n */\nClipboardData.prototype.setData = function(type, data) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to get ('Text' or 'URL').\n * @return {string} The current data\n */\nClipboardData.prototype.getData = function(type) { };\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @type {ClipboardData}\n */\nWindow.prototype.clipboardData;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533724(VS.85).aspx\n */\nWindow.prototype.dialogHeight;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533725(VS.85).aspx\n */\nWindow.prototype.dialogLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533726(VS.85).aspx\n */\nWindow.prototype.dialogTop;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533727(VS.85).aspx\n */\nWindow.prototype.dialogWidth;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535863(VS.85).aspx\n */\nWindow.prototype.event;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc197012(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPer1_0Server;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc197013(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPerServer;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534198(VS.85).aspx\n */\nWindow.prototype.offscreenBuffering;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenTop;\n\n// Functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536343(VS.85).aspx\n */\nWindow.prototype.attachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536392(VS.85).aspx\n */\nWindow.prototype.createPopup;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536411(VS.85).aspx\n */\nWindow.prototype.detachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536420(VS.85).aspx\n */\nWindow.prototype.execScript;\n\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536638(VS.85).aspx\n */\nWindow.prototype.navigate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536738(VS.85).aspx\n */\nWindow.prototype.setActive;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536758(VS.85).aspx\n */\nWindow.prototype.showHelp;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx\n */\nWindow.prototype.showModelessDialog;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535246%28v=vs.85%29.aspx\n * @const {!Object}\n */\nWindow.prototype.external;\n\n/**\n * @see https://msdn.microsoft.com/en-us/ie/dn265046(v=vs.94)\n * @const {!Object}\n */\nWindow.prototype.msCrypto;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.microsoft.com/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLFrameElement.prototype.allowTransparency;\n\n/**\n * @type {Window}\n * @see http://msdn.microsoft.com/en-us/library/ms533692(VS.85).aspx\n */\nHTMLFrameElement.prototype.contentWindow;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.microsoft.com/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLIFrameElement.prototype.allowTransparency;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536385(VS.85).aspx\n */\nHTMLBodyElement.prototype.createControlRange;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLScriptElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLIFrameElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLImageElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLObjectElement.prototype.readyState;\n\n\n/**\n * @constructor\n */\nfunction ControlRange() {}\n\nControlRange.prototype.add;\nControlRange.prototype.addElement;\nControlRange.prototype.execCommand;\nControlRange.prototype.item;\nControlRange.prototype.queryCommandEnabled;\nControlRange.prototype.queryCommandIndeterm;\nControlRange.prototype.queryCommandState;\nControlRange.prototype.queryCommandSupported;\nControlRange.prototype.queryCommandValue;\nControlRange.prototype.remove;\nControlRange.prototype.scrollIntoView;\nControlRange.prototype.select;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms535872.aspx\n */\nfunction TextRange() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533538(VS.85).aspx\n */\nTextRange.prototype.boundingHeight;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533539(VS.85).aspx\n */\nTextRange.prototype.boundingLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533540(VS.85).aspx\n */\nTextRange.prototype.boundingTop;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533541(VS.85).aspx\n */\nTextRange.prototype.boundingWidth;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533874(VS.85).aspx\n */\nTextRange.prototype.htmlText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534200(VS.85).aspx\n */\nTextRange.prototype.offsetLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534303(VS.85).aspx\n */\nTextRange.prototype.offsetTop;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534676(VS.85).aspx\n */\nTextRange.prototype.text;\n\n/**\n * @param {boolean=} opt_toStart\n * @see http://msdn.microsoft.com/en-us/library/ms536371(VS.85).aspx\n */\nTextRange.prototype.collapse;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536373(VS.85).aspx\n */\nTextRange.prototype.compareEndPoints;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536416(VS.85).aspx\n */\nTextRange.prototype.duplicate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536419(VS.85).aspx\n */\nTextRange.prototype.execCommand;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536421(VS.85).aspx\n */\nTextRange.prototype.expand;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536422(VS.85).aspx\n */\nTextRange.prototype.findText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536432(VS.85).aspx\n */\nTextRange.prototype.getBookmark;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536433(VS.85).aspx\n */\nTextRange.prototype.getBoundingClientRect;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536435(VS.85).aspx\n */\nTextRange.prototype.getClientRects;\n\n/**\n * @param {TextRange|ControlRange} range\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536450(VS.85).aspx\n */\nTextRange.prototype.inRange;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536458(VS.85).aspx\n */\nTextRange.prototype.isEqual;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536616(VS.85).aspx\n */\nTextRange.prototype.move;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536620(VS.85).aspx\n */\nTextRange.prototype.moveEnd;\n\n/**\n * @param {string} unit\n * @param {number=} opt_count\n * @see http://msdn.microsoft.com/en-us/library/ms536623(VS.85).aspx\n */\nTextRange.prototype.moveStart;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536628(VS.85).aspx\n */\nTextRange.prototype.moveToBookmark;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536630(VS.85).aspx\n */\nTextRange.prototype.moveToElementText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536632(VS.85).aspx\n */\nTextRange.prototype.moveToPoint;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536654(VS.85).aspx\n * @return {?Element}\n */\nTextRange.prototype.parentElement;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536656(VS.85).aspx\n */\nTextRange.prototype.pasteHTML;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536676(VS.85).aspx\n */\nTextRange.prototype.queryCommandEnabled;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536678(VS.85).aspx\n */\nTextRange.prototype.queryCommandIndeterm;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536679(VS.85).aspx\n */\nTextRange.prototype.queryCommandState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536681(VS.85).aspx\n */\nTextRange.prototype.queryCommandSupported;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536683(VS.85).aspx\n */\nTextRange.prototype.queryCommandValue;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536730(VS.85).aspx\n */\nTextRange.prototype.scrollIntoView;\n\n/**\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms536735(VS.85).aspx\n */\nTextRange.prototype.select = function() {};\n\n/**\n * @param {string} how\n * @param {TextRange|ControlRange} sourceRange\n * @see http://msdn.microsoft.com/en-us/library/ms536745(VS.85).aspx\n */\nTextRange.prototype.setEndPoint;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms537447(VS.85).aspx\n */\nfunction controlRange() {}\n\n\nDocument.prototype.loadXML;\n\n\n// http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533553(VS.85).aspx\n */\nDocument.prototype.charset;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533693(VS.85).aspx\n */\nDocument.prototype.cookie;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533731(VS.85).aspx\n */\nDocument.prototype.dir;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc196988(VS.85).aspx\n */\nDocument.prototype.documentMode;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533747(VS.85).aspx\n */\nDocument.prototype.expando;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533750(VS.85).aspx\n */\nDocument.prototype.fileCreatedDate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533751(VS.85).aspx\n */\nDocument.prototype.fileModifiedDate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533752(VS.85).aspx\n */\nDocument.prototype.fileSize;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534331(VS.85).aspx\n * @type {?Window}\n */\nDocument.prototype.parentWindow;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534353(VS.85).aspx\n */\nDocument.prototype.protocol;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLDocument.prototype.readyState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534704(VS.85).aspx\n */\nDocument.prototype.uniqueID;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534709(VS.85).aspx\n */\nDocument.prototype.URLUnencoded;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535155(VS.85).aspx\n */\nDocument.prototype.XMLDocument;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535163(VS.85).aspx\n */\nDocument.prototype.XSLDocument;\n\n// functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536343(VS.85).aspx\n */\nDocument.prototype.attachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536390(VS.85).aspx\n */\nDocument.prototype.createEventObject;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms531194(VS.85).aspx\n */\nDocument.prototype.createStyleSheet;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536411(VS.85).aspx\n */\nDocument.prototype.detachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536425(VS.85).aspx\n */\nDocument.prototype.focus;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536614(VS.85).aspx\n */\nDocument.prototype.mergeAttributes;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536685(VS.85).aspx\n */\nDocument.prototype.recalc;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536689(VS.85).aspx\n */\nDocument.prototype.releaseCapture;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536738(VS.85).aspx\n */\nDocument.prototype.setActive;\n\n\n// collections\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537434(VS.85).aspx\n */\nDocument.prototype.all;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537445(VS.85).aspx\n */\nDocument.prototype.childNodes;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537459(VS.85).aspx\n */\nDocument.prototype.frames;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537470(VS.85).aspx\n */\nDocument.prototype.namespaces;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537487(VS.85).aspx\n * @type {!HTMLCollection}\n */\nDocument.prototype.scripts;\n\n/**\n * @param {string} sUrl\n * @return {number}\n * @see http://msdn.microsoft.com/en-us/library/ms535922(VS.85).aspx\n */\nElement.prototype.addBehavior = function(sUrl) {};\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/mm536343(v=vs.85).aspx\n */\nElement.prototype.attachEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533546(VS.85).aspx\n */\nElement.prototype.canHaveChildren;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533559(v=vs.85).aspx\n */\nElement.prototype.classid;\n\n/**\n * @param {number} iCoordX Integer that specifies the client window coordinate\n * of x.\n * @param {number} iCoordY Integer that specifies the client window coordinate\n * of y.\n * @return {string} The component of an element located at the specified\n * coordinates.\n * @see http://msdn.microsoft.com/en-us/library/ms536375(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.componentFromPoint = function(iCoordX, iCoordY) {};\n\n\n/**\n * TODO(tjgq): Make this string once existing usages have been migrated.\n * @type {string|boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533690(VS.85).aspx\n */\nElement.prototype.contentEditable;\n\n/**\n * @return {TextRange}\n * @see http://msdn.microsoft.com/en-us/library/ms536401(VS.85).aspx\n */\nElement.prototype.createTextRange;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535231(VS.85).aspx\n * @type {?CSSStyleDeclaration}\n */\nElement.prototype.currentStyle;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ie/ms536411(v=vs.85).aspx\n */\nElement.prototype.detachEvent;\n\n/**\n * @param {string=} opt_action\n * @see http://msdn.microsoft.com/en-us/library/ms536414%28VS.85%29.aspx\n * @return {undefined}\n */\nElement.prototype.doScroll = function(opt_action) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536423(VS.85).aspx\n */\nElement.prototype.fireEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533783(VS.85).aspx\n */\nElement.prototype.hideFocus;\n\n/**\n * @type {string}\n * @implicitCast\n *\n * TODO(lharker): remove the @implicitCast to enforce assigning an explicit\n * string to innerText instead of relying on coercion.\n *\n * @see http://msdn.microsoft.com/en-us/library/ms533899.aspx\n */\nElement.prototype.innerText;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms537838(VS.85).aspx\n */\nElement.prototype.isContentEditable;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms531395(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with subclasses.\n */\nElement.prototype.load;\n\n/**\n * @param {number} pointerId Id of the pointer that is assign to the element.\n * @see http://msdn.microsoft.com/en-us/library/ie/hh771882(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.msSetPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see http://msdn.microsoft.com/en-us/library/ie/hh771880.aspx\n * @return {undefined}\n */\nElement.prototype.msReleasePointerCapture = function(pointerId) {};\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536903(v=vs.85).aspx\n */\nElement.prototype.onbeforedeactivate;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536945(VS.85).aspx\n */\nElement.prototype.onmouseenter;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536946(VS.85).aspx\n */\nElement.prototype.onmouseleave;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536689(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.releaseCapture = function() {};\n\n/**\n * @param {number} iID\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536700(VS.85).aspx\n */\nElement.prototype.removeBehavior = function(iID) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/aa703996(VS.85).aspx\n */\nElement.prototype.runtimeStyle;\n\n/**\n * @param {string} sStoreName The arbitrary name assigned to a persistent object\n * in a UserData store.\n * @see http://msdn.microsoft.com/en-us/library/ms531403(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.save = function(sStoreName) {};\n\n/**\n * @param {boolean=} opt_bContainerCapture Events originating in a container are\n * captured by the container. Defaults to true.\n * @see http://msdn.microsoft.com/en-us/library/ms536742(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.setCapture = function(opt_bContainerCapture) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534635(VS.85).aspx\n */\nElement.prototype.sourceIndex;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms537840.aspx\n */\nElement.prototype.unselectable;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/aa752462(v=vs.85).aspx\n */\nfunction HTMLFiltersCollection() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/aa752463(v=vs.85).aspx\n * @type {number}\n */\nHTMLFiltersCollection.prototype.length;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537452(v=vs.85).aspx\n * @type {HTMLFiltersCollection}\n */\nElement.prototype.filters;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms532853(v=vs.85).aspx\n */\nfunction HTMLFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532954(v=vs.85).aspx\n * @return {undefined}\n */\nHTMLFilter.prototype.apply = function() {};\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.microsoft.com/en-us/library/ms532967(v=vs.85).aspx\n */\nfunction AlphaFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532910(v=vs.85).aspx\n * @type {number}\n */\nAlphaFilter.prototype.Opacity;\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.microsoft.com/en-us/library/ms532969(v=vs.85).aspx\n */\nfunction AlphaImageLoaderFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532920(v=vs.85).aspx\n * @type {string}\n */\nAlphaImageLoaderFilter.prototype.sizingMethod;\n\n// For IE, returns an object representing key-value pairs for all the global\n// variables prefixed with str, e.g. test*\n\n/** @param {*=} opt_str\n */\nfunction RuntimeObject(opt_str) {}\n\n\n/**\n * @type {StyleSheet}\n * @see http://msdn.microsoft.com/en-us/library/dd347030(VS.85).aspx\n */\nHTMLStyleElement.prototype.styleSheet;\n\n\n/**\n * IE implements Cross Origin Resource Sharing (cross-domain XMLHttpRequests)\n * via the XDomainRequest object.\n *\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/cc288060(v=vs.85).aspx\n * @see http://www.w3.org/TR/cors/\n */\nfunction XDomainRequest() {}\n\n/**\n * Aborts the request.\n * @see http://msdn.microsoft.com/en-us/library/cc288129(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.abort = function() {};\n\n/**\n * Sets the method and URL for the request.\n * @param {string} bstrMethod Either \"GET\" or \"POST\"\n * @param {string} bstrUrl The target URL\n * @see http://msdn.microsoft.com/en-us/library/cc288168(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.open = function(bstrMethod, bstrUrl) {};\n\n/**\n * Sends the request.\n * @param {string=} varBody The POST body to send to the server. If omitted,\n * the behavior is identical to sending an empty string.\n * @see http://msdn.microsoft.com/en-us/library/cc288207(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.send = function(varBody) {};\n\n/**\n * Called if the request could not be completed. Note that error information is\n * not available.\n * @see http://msdn.microsoft.com/en-us/library/ms536930%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onerror;\n\n/**\n * Called when the response has finished.\n * @see http://msdn.microsoft.com/en-us/library/ms536942%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onload;\n\n/**\n * Called every time part of the response has been received.\n * @see http://msdn.microsoft.com/en-us/library/cc197058%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onprogress;\n\n/**\n * Called if the timeout period has elapsed.\n * @see http://msdn.microsoft.com/en-us/library/cc197061%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.ontimeout;\n\n/**\n * The current response body.\n * @see http://msdn.microsoft.com/en-us/library/cc287956%28v=VS.85%29.aspx\n * @type {string}\n */\nXDomainRequest.prototype.responseText;\n\n/**\n * The timeout (in milliseconds) for the request.\n * @type {number}\n */\nXDomainRequest.prototype.timeout;\n\n/**\n * The Content-Type of the response, or an empty string.\n * @type {string}\n */\nXDomainRequest.prototype.contentType;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533542(v=vs.85).aspx\n */\nNavigator.prototype.browserLanguage;\n\n/**\n * @type {number}\n * @see https://msdn.microsoft.com/en-us/library/ie/hh772144(v=vs.85).aspx\n */\nNavigator.prototype.msMaxTouchPoints;\n\n/**\n * @type {boolean}\n * @see http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx\n */\nNavigator.prototype.msPointerEnabled;\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.microsoft.com/en-us/library/hh772331(v=vs.85).aspx\n */\nNavigator.prototype.msSaveBlob = function(blob, opt_defaultName) {};\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.microsoft.com/en-us/library/hh772332(v=vs.85).aspx\n */\nNavigator.prototype.msSaveOrOpenBlob = function(blob, opt_defaultName) {};\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms533721(v=vs.85).aspx\n */\nScreen.prototype.deviceXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms534128%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms534130%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalYDPI;\n", +-"externs/webkit_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s DOM\n * specification by WebKit. This file depends on w3c_dom2.js.\n * All the provided definitions has been type annotated\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/**\n * @param {boolean=} opt_center\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=403510\n * @return {undefined}\n */\nElement.prototype.scrollIntoViewIfNeeded = function(opt_center) {};\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfileNode.idl\n */\nfunction ScriptProfileNode() {};\n\n/** @type {string} */\nScriptProfileNode.prototype.functionName;\n\n/** @type {string} */\nScriptProfileNode.prototype.url;\n\n/** @type {number} */\nScriptProfileNode.prototype.lineNumber;\n\n/** @type {number} */\nScriptProfileNode.prototype.totalTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.selfTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.numberOfCalls;\n\n/** @type {Array} */\nScriptProfileNode.prototype.children;\n\n/** @type {boolean} */\nScriptProfileNode.prototype.visible;\n\n/** @type {number} */\nScriptProfileNode.prototype.callUID;\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfile.idl\n */\nfunction ScriptProfile() {};\n\n/** @type {string} */\nScriptProfile.prototype.title;\n\n/** @type {number} */\nScriptProfile.prototype.uid;\n\n/** @type {ScriptProfileNode} */\nScriptProfile.prototype.head;\n\n/**\n * @type {number}\n * @see http://developer.android.com/reference/android/webkit/WebView.html\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {string} contextId\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @return {undefined}\n */\nDocument.prototype.getCSSCanvasContext =\n function(contextId, name, width, height) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Range}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint\n */\nDocument.prototype.caretRangeFromPoint = function(x, y) {};\n\n/**\n * @return {!Promise}\n * @nosideeffects\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n */\nDocument.prototype.hasStorageAccess = function() {};\n\n/**\n * @return {!Promise}\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n * @see https://developer.mozilla.org/docs/Web/API/Document/requestStorageAccess#Syntax\n */\nDocument.prototype.requestStorageAccess = function() {};\n', +-"externs/w3c_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's CSS specification\n * The whole file has been fully type annotated.\n * http://www.w3.org/TR/DOM-Level-2-Style/css.html\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n *\n * TODO(nicksantos): When there are no more occurrences of w3c_range.js and\n * gecko_dom.js being included directly in BUILD files, bug dbeam to split the\n * bottom part of this file into a separate externs.\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet\n */\nfunction StyleSheet() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-type\n */\nStyleSheet.prototype.type;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-disabled\n */\nStyleSheet.prototype.disabled;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-owner\n */\nStyleSheet.prototype.ownerNode;\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-parentStyleSheet\n */\nStyleSheet.prototype.parentStyleSheet;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-href\n */\nStyleSheet.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-title\n */\nStyleSheet.prototype.title;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-media\n */\nStyleSheet.prototype.media;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList\n */\nfunction StyleSheetList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-length\n */\nStyleSheetList.prototype.length;\n\n/**\n * @param {number} index\n * @return {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-item\n */\nStyleSheetList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList\n */\nfunction MediaList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-mediaText\n */\nMediaList.prototype.mediaText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-length\n */\nMediaList.prototype.length;\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-item\n */\nMediaList.prototype.item = function(index) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle\n */\nfunction LinkStyle() {}\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle-sheet\n */\nLinkStyle.prototype.sheet;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle\n */\nfunction DocumentStyle() {}\n\n/**\n * @type {StyleSheetList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle-styleSheets\n */\nDocumentStyle.prototype.styleSheets;\n\n/**\n * @constructor\n * @extends {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet\n */\nfunction CSSStyleSheet() {}\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-ownerRule\n */\nCSSStyleSheet.prototype.ownerRule;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-cssRules\n */\nCSSStyleSheet.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-insertRule\n */\nCSSStyleSheet.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-deleteRule\n * @return {undefined}\n */\nCSSStyleSheet.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList\n */\nfunction CSSRuleList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-length\n */\nCSSRuleList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-item\n */\nCSSRuleList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\n */\nfunction CSSRule() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-cssText\n */\nCSSRule.prototype.cssText;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-sheet\n */\nCSSRule.prototype.parentStyleSheet;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-parentRule\n */\nCSSRule.prototype.parentRule;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nCSSRule.prototype.style;\n\n/**\n * Indicates that the rule is a {@see CSSUnknownRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.UNKNOWN_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSStyleRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.STYLE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSCharsetRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.CHARSET_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSImportRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.IMPORT_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSMediaRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.MEDIA_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSFontFaceRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.FONT_FACE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSPageRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.PAGE_RULE;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nfunction CSSStyleRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-selectorText\n */\nCSSStyleRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-style\n */\nCSSStyleRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\n */\nfunction CSSMediaRule() {}\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-mediaTypes\n */\nCSSMediaRule.prototype.media;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\n */\nCSSMediaRule.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-insertRule\n */\nCSSMediaRule.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-deleteRule\n * @return {undefined}\n */\nCSSMediaRule.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule\n */\nfunction CSSFontFaceRule() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule-style\n */\nCSSFontFaceRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule\n */\nfunction CSSPageRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-name\n */\nCSSPageRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-style\n */\nCSSPageRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule\n */\nfunction CSSImportRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-href\n */\nCSSImportRule.prototype.href;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-media\n */\nCSSImportRule.prototype.media;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-styleSheet\n */\nCSSImportRule.prototype.styleSheet;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule\n */\nfunction CSSCharsetRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule-encoding\n */\nCSSCharsetRule.prototype.encoding;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSUnknownRule\n */\nfunction CSSUnknownRule() {}\n\n/**\n * @constructor\n * @extends {CSSProperties}\n * @implements {IObject<(string|number), string>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration\n */\nfunction CSSStyleDeclaration() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-cssText\n */\nCSSStyleDeclaration.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-length\n */\nCSSStyleDeclaration.prototype.length;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-parentRule\n */\nCSSStyleDeclaration.prototype.parentRule;\n\n/**\n * @param {string} propertyName\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyCSSValue\n */\nCSSStyleDeclaration.prototype.getPropertyCSSValue = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyPriority\n */\nCSSStyleDeclaration.prototype.getPropertyPriority = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue\n */\nCSSStyleDeclaration.prototype.getPropertyValue = function(propertyName) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-item\n */\nCSSStyleDeclaration.prototype.item = function(index) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty\n */\nCSSStyleDeclaration.prototype.removeProperty = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @param {string} value\n * @param {string=} opt_priority\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty\n */\nCSSStyleDeclaration.prototype.setProperty = function(propertyName, value, opt_priority) {};\n\n// IE-specific\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {string|number|boolean|null}\n * @see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getAttribute = function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {string|number|boolean|null}\n * @see http://msdn.microsoft.com/en-us/library/aa358797(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getExpression = function(name) {};\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536696(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeAttribute =\n function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/aa358798(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeExpression = function(name) {};\n\n/**\n * @deprecated\n * @param {string} name\n * @param {*} value\n * @param {number=} opt_flags\n * @see http://msdn.microsoft.com/en-us/library/ms536739(VS.85).aspx\n * @return {undefined}\n */\nCSSStyleDeclaration.prototype.setAttribute = function(name, value, opt_flags) {};\n\n/**\n * @param {string} name\n * @param {string} expr\n * @param {string=} opt_language\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms531196(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.setExpression =\n function(name, expr, opt_language) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\n */\nfunction CSSValue() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssText\n */\nCSSValue.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssValueType\n */\nCSSValue.prototype.cssValueType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_INHERIT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_PRIMITIVE_VALUE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_VALUE_LIST;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_CUSTOM;\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nfunction CSSPrimitiveValue() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.prototype.primitiveType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_UNKNOWN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_NUMBER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PERCENTAGE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EMS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EXS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PX;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_CM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PC;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DEG;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_GRAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_S;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_HZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_KHZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DIMENSION;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_STRING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_URI;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IDENT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_ATTR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_COUNTER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RECT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RGBCOLOR;\n\n/**\n * @return {Counter}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getCounterValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getCounterValue = function() {};\n\n/**\n * @param {number} unitType\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getFloatValue = function(unitType) {};\n\n/**\n * @return {RGBColor}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRGBColorValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRGBColorValue = function() {};\n\n/**\n * @return {Rect}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRectValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRectValue = function() {};\n\n/**\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getStringValue = function() {};\n\n/**\n * @param {number} unitType\n * @param {number} floatValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setFloatValue = function(unitType, floatValue) {};\n\n/**\n * @param {number} stringType\n * @param {string} stringValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setStringValue = function(stringType, stringValue) {};\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList\n */\nfunction CSSValueList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-length\n */\nCSSValueList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-item\n */\nCSSValueList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor\n */\nfunction RGBColor() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-red\n */\nRGBColor.prototype.red;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-green\n */\nRGBColor.prototype.green;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-blue\n */\nRGBColor.prototype.blue;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect\n */\nfunction Rect() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-top\n */\nRect.prototype.top;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-right\n */\nRect.prototype.right;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-bottom\n */\nRect.prototype.bottom;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-left\n */\nRect.prototype.left;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter\n */\nfunction Counter() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-identifier\n */\nCounter.prototype.identifier;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-listStyle\n */\nCounter.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-separator\n */\nCounter.prototype.separator;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ViewCSS\n */\nfunction ViewCSS() {}\n\n/**\n * @param {Element} elt\n * @param {?string=} opt_pseudoElt This argument is required according to the\n * CSS2 specification, but optional in all major browsers. See the note at\n * https://developer.mozilla.org/en-US/docs/Web/API/Window.getComputedStyle\n * @return {?CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSview-getComputedStyle\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nViewCSS.prototype.getComputedStyle = function(elt, opt_pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS\n */\nfunction DocumentCSS() {}\n\n/**\n * @param {Element} elt\n * @param {string} pseudoElt\n * @return {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS-getOverrideStyle\n */\nDocumentCSS.prototype.getOverrideStyle = function(elt, pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS\n */\nfunction DOMImplementationCSS() {}\n\n/**\n * @param {string} title\n * @param {string} media\n * @return {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS-createCSSStyleSheet\n * @throws DOMException {@see DomException.SYNTAX_ERR}\n */\nDOMImplementationCSS.prototype.createCSSStyleSheet = function(title, media) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nfunction ElementCSSInlineStyle() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle-style\n */\nElementCSSInlineStyle.prototype.style;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties\n */\nfunction CSSProperties() {}\n\n// CSS 2 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-azimuth\n */\nCSSProperties.prototype.azimuth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-background\n */\nCSSProperties.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundAttachment\n */\nCSSProperties.prototype.backgroundAttachment;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundColor\n */\nCSSProperties.prototype.backgroundColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundImage\n */\nCSSProperties.prototype.backgroundImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundPosition\n */\nCSSProperties.prototype.backgroundPosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundRepeat\n */\nCSSProperties.prototype.backgroundRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-background-size\n */\nCSSProperties.prototype.backgroundSize;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-border\n */\nCSSProperties.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderCollapse\n */\nCSSProperties.prototype.borderCollapse;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderColor\n */\nCSSProperties.prototype.borderColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderSpacing\n */\nCSSProperties.prototype.borderSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-borderStyle\n */\nCSSProperties.prototype.borderStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTop\n */\nCSSProperties.prototype.borderTop;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRight\n */\nCSSProperties.prototype.borderRight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottom\n */\nCSSProperties.prototype.borderBottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeft\n */\nCSSProperties.prototype.borderLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopColor\n */\nCSSProperties.prototype.borderTopColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightColor\n */\nCSSProperties.prototype.borderRightColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomColor\n */\nCSSProperties.prototype.borderBottomColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftColor\n */\nCSSProperties.prototype.borderLeftColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopStyle\n */\nCSSProperties.prototype.borderTopStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightStyle\n */\nCSSProperties.prototype.borderRightStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomStyle\n */\nCSSProperties.prototype.borderBottomStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftStyle\n */\nCSSProperties.prototype.borderLeftStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopWidth\n */\nCSSProperties.prototype.borderTopWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightWidth\n */\nCSSProperties.prototype.borderRightWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomWidth\n */\nCSSProperties.prototype.borderBottomWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftWidth\n */\nCSSProperties.prototype.borderLeftWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderWidth\n */\nCSSProperties.prototype.borderWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomRightRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopRightRadius;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-source\n */\nCSSProperties.prototype.borderImageSource;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-slice\n */\nCSSProperties.prototype.borderImageSlice;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-width\n */\nCSSProperties.prototype.borderImageWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-outset\n */\nCSSProperties.prototype.borderImageOutset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-repeat\n */\nCSSProperties.prototype.borderImageRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image\n */\nCSSProperties.prototype.borderImage;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-bottom\n */\nCSSProperties.prototype.bottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-captionSide\n */\nCSSProperties.prototype.captionSide;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clear\n */\nCSSProperties.prototype.clear;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clip\n */\nCSSProperties.prototype.clip;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-color\n */\nCSSProperties.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-content\n */\nCSSProperties.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterIncrement\n */\nCSSProperties.prototype.counterIncrement;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterReset\n */\nCSSProperties.prototype.counterReset;\n\n/**\n * This is not an official part of the W3C spec. In practice, this is a settable\n * property that works cross-browser. It is used in goog.dom.setProperties() and\n * needs to be extern'd so the --disambiguate_properties JS compiler pass works.\n * @type {string}\n */\nCSSProperties.prototype.cssText;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cue\n */\nCSSProperties.prototype.cue;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueAfter\n */\nCSSProperties.prototype.cueAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueBefore\n */\nCSSProperties.prototype.cueBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cursor\n */\nCSSProperties.prototype.cursor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-direction\n */\nCSSProperties.prototype.direction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-display\n */\nCSSProperties.prototype.display;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-elevation\n */\nCSSProperties.prototype.elevation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-emptyCells\n */\nCSSProperties.prototype.emptyCells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cssFloat\n */\nCSSProperties.prototype.cssFloat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-font\n */\nCSSProperties.prototype.font;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontFamily\n */\nCSSProperties.prototype.fontFamily;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSize\n */\nCSSProperties.prototype.fontSize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSizeAdjust\n */\nCSSProperties.prototype.fontSizeAdjust;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStretch\n */\nCSSProperties.prototype.fontStretch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStyle\n */\nCSSProperties.prototype.fontStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontVariant\n */\nCSSProperties.prototype.fontVariant;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontWeight\n */\nCSSProperties.prototype.fontWeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-height\n */\nCSSProperties.prototype.height;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-left\n */\nCSSProperties.prototype.left;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-letterSpacing\n */\nCSSProperties.prototype.letterSpacing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-lineHeight\n */\nCSSProperties.prototype.lineHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyle\n */\nCSSProperties.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleImage\n */\nCSSProperties.prototype.listStyleImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStylePosition\n */\nCSSProperties.prototype.listStylePosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleType\n */\nCSSProperties.prototype.listStyleType;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-margin\n */\nCSSProperties.prototype.margin;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginTop\n */\nCSSProperties.prototype.marginTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginRight\n */\nCSSProperties.prototype.marginRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginBottom\n */\nCSSProperties.prototype.marginBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginLeft\n */\nCSSProperties.prototype.marginLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-markerOffset\n */\nCSSProperties.prototype.markerOffset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marks\n */\nCSSProperties.prototype.marks;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxHeight\n */\nCSSProperties.prototype.maxHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxWidth\n */\nCSSProperties.prototype.maxWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minHeight\n */\nCSSProperties.prototype.minHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minWidth\n */\nCSSProperties.prototype.minWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-orphans\n */\nCSSProperties.prototype.orphans;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outline\n */\nCSSProperties.prototype.outline;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineColor\n */\nCSSProperties.prototype.outlineColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineStyle\n */\nCSSProperties.prototype.outlineStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineWidth\n */\nCSSProperties.prototype.outlineWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-overflow\n */\nCSSProperties.prototype.overflow;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-padding\n */\nCSSProperties.prototype.padding;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingTop\n */\nCSSProperties.prototype.paddingTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingRight\n */\nCSSProperties.prototype.paddingRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingBottom\n */\nCSSProperties.prototype.paddingBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingLeft\n */\nCSSProperties.prototype.paddingLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-page\n */\nCSSProperties.prototype.page;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakAfter\n */\nCSSProperties.prototype.pageBreakAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakBefore\n */\nCSSProperties.prototype.pageBreakBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakInside\n */\nCSSProperties.prototype.pageBreakInside;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pause\n */\nCSSProperties.prototype.pause;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseAfter\n */\nCSSProperties.prototype.pauseAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseBefore\n */\nCSSProperties.prototype.pauseBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitch\n */\nCSSProperties.prototype.pitch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitchRange\n */\nCSSProperties.prototype.pitchRange;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-playDuring\n */\nCSSProperties.prototype.playDuring;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-position\n */\nCSSProperties.prototype.position;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-quotes\n */\nCSSProperties.prototype.quotes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#resize\n */\nCSSProperties.prototype.resize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-richness\n */\nCSSProperties.prototype.richness;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-right\n */\nCSSProperties.prototype.right;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-size\n */\nCSSProperties.prototype.size;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speak\n */\nCSSProperties.prototype.speak;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakHeader\n */\nCSSProperties.prototype.speakHeader;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakNumeral\n */\nCSSProperties.prototype.speakNumeral;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakPunctuation\n */\nCSSProperties.prototype.speakPunctuation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speechRate\n */\nCSSProperties.prototype.speechRate;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-stress\n */\nCSSProperties.prototype.stress;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-tableLayout\n */\nCSSProperties.prototype.tableLayout;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textAlign\n */\nCSSProperties.prototype.textAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textDecoration\n */\nCSSProperties.prototype.textDecoration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textIndent\n */\nCSSProperties.prototype.textIndent;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textShadow\n */\nCSSProperties.prototype.textShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textTransform\n */\nCSSProperties.prototype.textTransform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-top\n */\nCSSProperties.prototype.top;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-unicodeBidi\n */\nCSSProperties.prototype.unicodeBidi;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-verticalAlign\n */\nCSSProperties.prototype.verticalAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-visibility\n */\nCSSProperties.prototype.visibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-voiceFamily\n */\nCSSProperties.prototype.voiceFamily;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-volume\n */\nCSSProperties.prototype.volume;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-whiteSpace\n */\nCSSProperties.prototype.whiteSpace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-widows\n */\nCSSProperties.prototype.widows;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-width\n */\nCSSProperties.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordSpacing\n */\nCSSProperties.prototype.wordSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordWrap\n */\nCSSProperties.prototype.wordWrap;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-zIndex\n */\nCSSProperties.prototype.zIndex;\n\n// CSS 3 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#box-shadow\n */\nCSSProperties.prototype.boxShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#box-sizing\n */\nCSSProperties.prototype.boxSizing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-color/#transparency\n */\nCSSProperties.prototype.opacity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#text-overflow\n */\nCSSProperties.prototype.textOverflow;\n\n// CSS 3 animations\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation\n */\nCSSProperties.prototype.animation;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-delay\n */\nCSSProperties.prototype.animationDelay;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-direction\n */\nCSSProperties.prototype.animationDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-duration\n */\nCSSProperties.prototype.animationDuration;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-fill-mode\n */\nCSSProperties.prototype.animationFillMode;\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation-iteration-count\n */\nCSSProperties.prototype.animationIterationCount;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-name\n */\nCSSProperties.prototype.animationName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-play-state\n */\nCSSProperties.prototype.animationPlayState;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-timing-function\n */\nCSSProperties.prototype.animationTimingFunction;\n\n// CSS 3 transforms\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#backface-visibility-property\n */\nCSSProperties.prototype.backfaceVisibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective\n */\nCSSProperties.prototype.perspective;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective-origin\n */\nCSSProperties.prototype.perspectiveOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#effects\n */\nCSSProperties.prototype.transform;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-origin\n */\nCSSProperties.prototype.transformOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-style\n */\nCSSProperties.prototype.transformStyle;\n\n// CSS 3 transitions\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition\n */\nCSSProperties.prototype.transition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-delay\n */\nCSSProperties.prototype.transitionDelay;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-duration\n */\nCSSProperties.prototype.transitionDuration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-property-property\n */\nCSSProperties.prototype.transitionProperty;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-timing-function\n */\nCSSProperties.prototype.transitionTimingFunction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/SVG11/interact.html#PointerEventsProperty\n */\nCSSProperties.prototype.pointerEvents;\n\n\n// CSS Flexbox 1\n\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-content-property\n */\nCSSProperties.prototype.alignContent;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignItems;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignSelf;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-property\n */\nCSSProperties.prototype.flex;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-basis-property\n */\nCSSProperties.prototype.flexBasis;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-direction-property\n */\nCSSProperties.prototype.flexDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-flow-property\n */\nCSSProperties.prototype.flexFlow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-grow-property\n */\nCSSProperties.prototype.flexGrow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-shrink-property\n */\nCSSProperties.prototype.flexShrink;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-wrap-property\n */\nCSSProperties.prototype.flexWrap;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#justify-content-property\n */\nCSSProperties.prototype.justifyContent;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#order-property\n */\nCSSProperties.prototype.order;\n\n// Externs for CSS Will Change Module Level 1\n// http://www.w3.org/TR/css-will-change/\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css-will-change-1/#will-change\n */\nCSSProperties.prototype.willChange;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-ui-4/#propdef-user-select\n */\nCSSProperties.prototype.userSelect;\n\n// CSS 3 Images\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#the-object-fit\n */\nCSSProperties.prototype.objectFit;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#object-position\n */\nCSSProperties.prototype.objectPosition;\n\n// CSS Masking\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-masking-1/\n */\nCSSProperties.prototype.clipPath;\n\n// CSS Containment\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-contain-1/\n */\nCSSProperties.prototype.contain;\n\n/**\n * TODO(dbeam): Put this in separate file named w3c_cssom.js.\n * Externs for the CSSOM View Module.\n * @see http://www.w3.org/TR/cssom-view/\n */\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface\n\n/**\n * @param {string} media_query_list\n * @return {!MediaQueryList}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-matchmedia\n */\nWindow.prototype.matchMedia = function(media_query_list) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerwidth\n */\nWindow.prototype.innerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerheight\n */\nWindow.prototype.innerHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollx\n */\nWindow.prototype.scrollX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pagexoffset\n */\nWindow.prototype.pageXOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrolly\n */\nWindow.prototype.scrollY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pageyoffset\n */\nWindow.prototype.pageYOffset;\n\n/**\n * @typedef {{\n * left: (number|undefined),\n * top: (number|undefined),\n * behavior: (string|undefined)\n * }}\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrolltooptions\n */\nvar ScrollToOptions;\n\n/**\n * @record\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrollintoviewoptions\n */\nfunction ScrollIntoViewOptions () {}\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.behavior;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.block;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.inline;\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scroll\n * @return {undefined}\n */\nWindow.prototype.scroll = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollto\n * @return {undefined}\n */\nWindow.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollby\n * @return {undefined}\n */\nWindow.prototype.scrollBy = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screenx\n */\nWindow.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screeny\n */\nWindow.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerwidth\n */\nWindow.prototype.outerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerheight\n */\nWindow.prototype.outerHeight;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-devicepixelratio\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveto\n */\nWindow.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveby\n */\nWindow.prototype.moveBy = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeto\n */\nWindow.prototype.resizeTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeby\n */\nWindow.prototype.resizeBy = function(x, y) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylist\n */\nfunction MediaQueryList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-media\n */\nMediaQueryList.prototype.media;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-matches\n */\nMediaQueryList.prototype.matches;\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-addlistener\n * @return {undefined}\n */\nMediaQueryList.prototype.addListener = function(listener) {};\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-removelistener\n * @return {undefined}\n */\nMediaQueryList.prototype.removeListener = function(listener) {};\n\n/** @override Not available in some browsers; use addListener instead. */\nMediaQueryList.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override Not available in old browsers; use removeListener instead. */\nMediaQueryList.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaQueryList.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @typedef {(function(!MediaQueryList) : void)}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylistlistener\n */\nvar MediaQueryListListener;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#screen\n */\nfunction Screen() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availwidth\n */\nScreen.prototype.availWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availheight\n */\nScreen.prototype.availHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-width\n */\nScreen.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-height\n */\nScreen.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-colordepth\n */\nScreen.prototype.colorDepth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-pixeldepth\n */\nScreen.prototype.pixelDepth;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-document-interface\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint\n */\nDocument.prototype.elementFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementsfrompoint\n */\nDocument.prototype.elementsFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {CaretPosition}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-caretpositionfrompoint\n */\nDocument.prototype.caretPositionFromPoint = function(x, y) {};\n\n/**\n * @type {Element}\n * @see http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement\n */\nDocument.prototype.scrollingElement;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#caretposition\n */\nfunction CaretPosition() {}\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offsetnode\n */\nCaretPosition.prototype.offsetNode;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offset\n */\nCaretPosition.prototype.offset;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-element-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getclientrects\n */\nElement.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect\n */\nElement.prototype.getBoundingClientRect = function() {};\n\n/**\n * @param {(boolean|ScrollIntoViewOptions)=} top\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview\n * @return {undefined}\n */\nElement.prototype.scrollIntoView = function(top) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see https://www.w3.org/TR/cssom-view/#extension-to-the-element-interface\n * @return {undefined}\n */\nElement.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrolltop\n */\nElement.prototype.scrollTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollleft\n */\nElement.prototype.scrollLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollwidth\n */\nElement.prototype.scrollWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollheight\n */\nElement.prototype.scrollHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clienttop\n */\nElement.prototype.clientTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientleft\n */\nElement.prototype.clientLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientwidth\n */\nElement.prototype.clientWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientheight\n */\nElement.prototype.clientHeight;\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetparent\n */\nHTMLElement.prototype.offsetParent;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop\n */\nHTMLElement.prototype.offsetTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetleft\n */\nHTMLElement.prototype.offsetLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetwidth\n */\nHTMLElement.prototype.offsetWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetheight\n */\nHTMLElement.prototype.offsetHeight;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-range-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getclientrects\n */\nRange.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getboundingclientrect\n */\nRange.prototype.getBoundingClientRect = function() {};\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-mouseevent-interface\n\n// MouseEvent: screen{X,Y} and client{X,Y} are in DOM Level 2/3 Event as well,\n// so it seems like a specification issue. I've emailed www-style@w3.org in\n// hopes of resolving the conflict, but in the mean time they can live here\n// (http://lists.w3.org/Archives/Public/www-style/2012May/0039.html).\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screenx\n */\n//MouseEvent.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screeny\n */\n//MouseEvent.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagex\n */\nMouseEvent.prototype.pageX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagey\n */\nMouseEvent.prototype.pageY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clientx\n */\n//MouseEvent.prototype.clientX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clienty\n */\n//MouseEvent.prototype.clientY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-x\n */\nMouseEvent.prototype.x;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-y\n */\nMouseEvent.prototype.y;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsetx\n */\nMouseEvent.prototype.offsetX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsety\n */\nMouseEvent.prototype.offsetY;\n\n\n// http://www.w3.org/TR/cssom-view/#rectangles\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#the-clientrectlist-interface\n * @implements {IArrayLike}\n */\nfunction ClientRectList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-length\n */\nClientRectList.prototype.length;\n\n/**\n * @param {number} index\n * @return {?DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-item\n */\nClientRectList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * http://www.w3.org/TR/css3-conditional/#CSS-interface\n */\nfunction CSSInterface() {}\n\n/**\n * @param {string} ident\n * @return {string}\n * @see http://www.w3.org/TR/cssom/#the-css.escape()-method\n * @throws DOMException {@see DOMException.INVALID_CHARACTER_ERR}\n */\nCSSInterface.prototype.escape = function(ident) {};\n\n/**\n * @param {string} property\n * @param {string=} opt_value\n * @return {boolean}\n */\nCSSInterface.prototype.supports = function(property, opt_value) {};\n\n/**\n * TODO(nicksantos): This suppress tag probably isn't needed, and\n * should be removed.\n * @suppress {duplicate}\n * @type {CSSInterface}\n */\nvar CSS;\n\n/** @type {CSSInterface} */\nWindow.prototype.CSS;\n\n// http://dev.w3.org/csswg/css-font-loading/\n\n/**\n * Set of possible string values: 'error', 'loaded', 'loading', 'unloaded'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfaceloadstatus\n */\nvar FontFaceLoadStatus;\n\n/**\n * @typedef {{\n * style: (string|undefined),\n * weight: (string|undefined),\n * stretch: (string|undefined),\n * unicodeRange: (string|undefined),\n * variant: (string|undefined),\n * featureSettings: (string|undefined)\n * }}\n * @see http://dev.w3.org/csswg/css-font-loading/#dictdef-fontfacedescriptors\n */\nvar FontFaceDescriptors;\n\n/**\n * @constructor\n * @param {string} fontFamily\n * @param {(string|ArrayBuffer|ArrayBufferView)} source\n * @param {!FontFaceDescriptors=} opt_descriptors\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-constructor\n */\nfunction FontFace(fontFamily, source, opt_descriptors) {}\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-family\n */\nFontFace.prototype.family;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-style\n */\nFontFace.prototype.style;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-weight\n */\nFontFace.prototype.weight;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-stretch\n */\nFontFace.prototype.stretch;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-unicoderange\n */\nFontFace.prototype.unicodeRange;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-variant\n */\nFontFace.prototype.variant;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-featuresettings\n */\nFontFace.prototype.featureSettings;\n\n/**\n * @type {FontFaceLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-status\n */\nFontFace.prototype.status;\n\n/**\n * @return {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-load\n */\nFontFace.prototype.load = function() {};\n\n/**\n * Set of possible string values: 'loaded', 'loading'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfacesetloadstatus\n */\nvar FontFaceSetLoadStatus;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-interface\n */\nfunction FontFaceSet() {}\n\n// Event handlers\n// http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-events\n\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloading;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingdone;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingerror;\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-add\n * @return {undefined}\n */\nFontFaceSet.prototype.add = function(value) {};\n\n/**\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-clear\n * @return {undefined}\n */\nFontFaceSet.prototype.clear = function() {};\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-delete\n * @return {undefined}\n */\nFontFaceSet.prototype.delete = function(value) {};\n\n/**\n * @param {!FontFace} font\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-has\n */\nFontFaceSet.prototype.has = function(font) {};\n\n/**\n * @param {function(!FontFace, number, !FontFaceSet)} callback\n * @param {?Object=} selfObj\n * see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-foreach\n * @return {undefined}\n */\nFontFaceSet.prototype.forEach = function(callback, selfObj) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {!Promise>}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-load\n */\nFontFaceSet.prototype.load = function(font, opt_text) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-check\n */\nFontFaceSet.prototype.check = function(font, opt_text) {};\n\n/**\n * @type {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-ready\n */\nFontFaceSet.prototype.ready;\n\n/**\n * @type {FontFaceSetLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-status\n */\nFontFaceSet.prototype.status;\n\n/**\n * @constructor\n * @param {string} type\n * @param {{\n * animationName: (string|undefined),\n * elapsedTime: (number|undefined),\n * pseudoElement: (string|undefined)\n * }=} opt_animationEventInitDict\n * @extends {Event}\n * @see https://drafts.csswg.org/css-animations/#interface-animationevent\n */\nfunction AnimationEvent(type, opt_animationEventInitDict) {};\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-animationname\n */\nAnimationEvent.prototype.animationName;\n\n/**\n * @type {number}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-elapsedtime\n */\nAnimationEvent.prototype.elapsedTime;\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-pseudoelement\n */\nAnimationEvent.prototype.pseudoElement;\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframerule\n */\nfunction CSSKeyframeRule() {}\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-keytext\n */\nCSSKeyframeRule.prototype.keyText;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-style\n */\nCSSKeyframeRule.prototype.style;\n\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframesrule\n */\nfunction CSSKeyframesRule() {}\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-name\n * @type {string}\n */\nCSSKeyframesRule.prototype.name;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-cssrules\n * @type {!CSSRuleList}\n */\nCSSKeyframesRule.prototype.cssRules;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-findrule\n * @param {string} key The key text for the rule to find.\n * @return {?CSSKeyframeRule}\n */\nCSSKeyframesRule.prototype.findRule = function(key) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-appendrule\n * @param {string} rule The text for the rule to append.\n */\nCSSKeyframesRule.prototype.appendRule = function(rule) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule\n * @param {string} key The key text for the rule to delete.\n */\nCSSKeyframesRule.prototype.deleteRule = function(key) {};\n", +-"externs/gecko_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Gecko\'s custom CSS properties. Copied from:\n * http://mxr.mozilla.org/mozilla2.0/source/dom/interfaces/css/nsIDOMCSS2Properties.idl\n *\n * @externs\n * @author nicksantos@google.com (Nick Santos)\n */\n\n\n/** @type {string} */ CSSProperties.prototype.MozAppearance;\n/** @type {string} */ CSSProperties.prototype.MozBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundInlinePolicy;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.MozBinding;\n/** @type {string} */ CSSProperties.prototype.MozBorderBottomColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderEnd;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderImage;\n/** @type {string} */ CSSProperties.prototype.MozBorderLeftColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadius;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRightColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderStart;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderTopColors;\n/** @type {string} */ CSSProperties.prototype.MozBoxAlign;\n/** @type {string} */ CSSProperties.prototype.MozBoxDirection;\n/** @type {string} */ CSSProperties.prototype.MozBoxFlex;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrient;\n/** @type {string} */ CSSProperties.prototype.MozBoxPack;\n/** @type {string} */ CSSProperties.prototype.MozBoxSizing;\n/** @type {string} */ CSSProperties.prototype.MozBoxShadow;\n/** @type {string} */ CSSProperties.prototype.MozColumnCount;\n/** @type {string} */ CSSProperties.prototype.MozColumnGap;\n/** @type {string} */ CSSProperties.prototype.MozColumnRule;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.MozColumnWidth;\n/** @type {string} */ CSSProperties.prototype.MozFloatEdge;\n/** @type {string} */ CSSProperties.prototype.MozFontFeatureSettings;\n/** @type {string} */ CSSProperties.prototype.MozFontLanguageOverride;\n/** @type {string} */ CSSProperties.prototype.MozForceBrokenImageIcon;\n/** @type {string} */ CSSProperties.prototype.MozImageRegion;\n/** @type {string} */ CSSProperties.prototype.MozMarginEnd;\n/** @type {string} */ CSSProperties.prototype.MozMarginStart;\n/** @type {number|string} */ CSSProperties.prototype.MozOpacity;\n/** @type {string} */ CSSProperties.prototype.MozOutline;\n/** @type {string} */ CSSProperties.prototype.MozOutlineColor;\n/** @type {string} */ CSSProperties.prototype.MozOutlineOffset;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadius;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineStyle;\n/** @type {string} */ CSSProperties.prototype.MozOutlineWidth;\n/** @type {string} */ CSSProperties.prototype.MozPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.MozPaddingStart;\n/** @type {string} */ CSSProperties.prototype.MozPerspective;\n/** @type {string} */ CSSProperties.prototype.MozStackSizing;\n/** @type {string} */ CSSProperties.prototype.MozTabSize;\n/** @type {string} */ CSSProperties.prototype.MozTransform;\n/** @type {string} */ CSSProperties.prototype.MozTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.MozTransition;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.MozTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.MozTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.MozUserFocus;\n/** @type {string} */ CSSProperties.prototype.MozUserInput;\n/** @type {string} */ CSSProperties.prototype.MozUserModify;\n/** @type {string} */ CSSProperties.prototype.MozUserSelect;\n/** @type {string} */ CSSProperties.prototype.MozWindowShadow;\n\n\n// These are non-standard Gecko CSSOM properties on Window.prototype.screen.\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.availTop\n */\nScreen.prototype.availTop;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.availLeft\n */\nScreen.prototype.availLeft;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.left\n */\nScreen.prototype.left;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.top\n */\nScreen.prototype.top;\n', +-"externs/ie_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s custom CSS properties, as defined here:\n * http://msdn.microsoft.com/en-us/library/aa768661(VS.85).aspx\n *\n * This page is also useful for the IDL definitions:\n * http://source.winehq.org/source/include/mshtml.idl\n *\n * @externs\n * @author nicksantos@google.com\n */\n\n/** @type {Element} */\nStyleSheet.prototype.owningElement;\n\n/** @type {boolean} */\nStyleSheet.prototype.readOnly;\n\n/** @type {StyleSheetList} */\nStyleSheet.prototype.imports;\n\n/** @type {string} */\nStyleSheet.prototype.id;\n\n/**\n * @param {string} bstrURL\n * @param {number} lIndex\n * @return {number}\n */\nStyleSheet.prototype.addImport;\n\n/**\n * @param {string} bstrSelector\n * @param {string} bstrStyle\n * @param {number=} opt_iIndex\n * @return {number}\n * @see http://msdn.microsoft.com/en-us/library/aa358796%28v=vs.85%29.aspx\n */\nStyleSheet.prototype.addRule;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeImport;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeRule;\n\n/** @type {string} */\nStyleSheet.prototype.cssText;\n\n/** @type {CSSRuleList} */\nStyleSheet.prototype.rules;\n\n// StyleSheet methods\n\n/**\n * @param {string} propName\n * @return {string}\n * @see http://msdn.microsoft.com/en-us/library/aa358797(VS.85).aspx\n */\nStyleSheet.prototype.getExpression;\n\n/**\n * @param {string} name\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms531196(VS.85).aspx\n */\nStyleSheet.prototype.setExpression;\n\n/**\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/aa358798(VS.85).aspx\n */\nStyleSheet.prototype.removeExpression;\n\n// IE-only CSS style names.\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionX;\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionY;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ie/ms531081(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with caller.\n */\nCSSProperties.prototype.behavior;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533883.aspx\n */\nCSSProperties.prototype.imeMode;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534176(VS.85).aspx\n */\nCSSProperties.prototype.msInterpolationMode;\n\n/** @type {string} */ CSSProperties.prototype.overflowX;\n\n/** @type {string} */ CSSProperties.prototype.overflowY;\n\n/** @type {number} */ CSSProperties.prototype.pixelWidth;\n\n/** @type {number} */ CSSProperties.prototype.pixelHeight;\n\n/** @type {number} */ CSSProperties.prototype.pixelLeft;\n\n/** @type {number} */ CSSProperties.prototype.pixelTop;\n\n/** @type {string} */ CSSProperties.prototype.styleFloat;\n\n/**\n * @type {string|number}\n * @see http://msdn.microsoft.com/en-us/library/ms535169(VS.85).aspx\n */\nCSSProperties.prototype.zoom;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms535153(VS.85).aspx\n */\nCSSProperties.prototype.writingMode;\n\n/**\n * IE-specific extensions.\n * @see http://blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx\n */\n\n/** @type {string} */\nCSSProperties.prototype.MsAccelerator;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionX;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionY;\n\n/** @type {string} */\nCSSProperties.prototype.MsBehavior;\n\n/** @type {string} */\nCSSProperties.prototype.MsBlockProgression;\n\n/** @type {string} */\nCSSProperties.prototype.MsFilter;\n\n/** @type {string} */\nCSSProperties.prototype.MsImeMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGrid;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridChar;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridLine;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridType;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsInterpolationMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowX;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowY;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbar3dlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarArrowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarBaseColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarDarkshadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarFaceColor;\n\nCSSProperties.prototype.MsScrollbarHighlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarShadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarTrackColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAlignLast;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAutospace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextJustify;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextKashidaSpace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextOverflow;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextUnderlinePosition;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordWrap;\n\n/** @type {string} */\nCSSProperties.prototype.MsWritingMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsZoom;\n\n/** @type {string} */\nCSSProperties.prototype.MsUserSelect;\n\n// See: http://msdn.microsoft.com/en-us/library/windows/apps/Hh702466.aspx\n\n/** @type {string} */\nCSSProperties.prototype.msContentZooming;\n\n/** @type {string} */\nCSSProperties.prototype.msTouchAction;\n\n/** @type {string} */\nCSSProperties.prototype.msTransform;\n\n/** @type {string} */\nCSSProperties.prototype.msTransition;\n', +-"externs/webkit_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebKit\'s custom CSS properties. Copied from:\n * {@link\n * http://trac.webkit.org/browser/trunk/Source/WebCore/css/CSSPropertyNames.in}\n *\n * If you make changes to this file, notice that every property appears\n * twice: once as an uppercase name and once as a lowercase name.\n * WebKit allows both. The uppercase version is preferred.\n *\n * @externs\n * @author nicksantos@google.com (Nick Santos)\n * @author mastepien@google.com (Marek Stepien)\n */\n\n/** @type {string} */ CSSProperties.prototype.WebkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimation;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitAppearance;\n/** @type {string} */ CSSProperties.prototype.WebkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.WebkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.WebkitBinding;\n/** @type {string} */ CSSProperties.prototype.WebkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.WebkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitFilter;\n/** @type {string} */ CSSProperties.prototype.WebkitFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRow;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRows;\n/** @type {string} */ CSSProperties.prototype.WebkitHighlight;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphens;\n/** @type {string} */ CSSProperties.prototype.WebkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.WebkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.WebkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.WebkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.WebkitLocale;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarquee;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitMask;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.WebkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.WebkitOrder;\n/** @type {string} */ CSSProperties.prototype.WebkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspective;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.WebkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.WebkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.WebkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.WebkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitTransform;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTransition;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.WebkitUserModify;\n/** @type {string} */ CSSProperties.prototype.WebkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.WebkitWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.WebkitWritingMode;\n\n// WebKit also adds bindings for the lowercase versions of these properties.\n// The uppercase version is preferred.\n\n/** @type {string} */ CSSProperties.prototype.webkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.webkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.webkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.webkitAnimation;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitAppearance;\n/** @type {string} */ CSSProperties.prototype.webkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.webkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.webkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.webkitBinding;\n/** @type {string} */ CSSProperties.prototype.webkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.webkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.webkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.webkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.webkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.webkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.webkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.webkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.webkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.webkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.webkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.webkitColumns;\n/** @type {string} */ CSSProperties.prototype.webkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.webkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.webkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.webkitFilter;\n/** @type {string} */ CSSProperties.prototype.webkitFlex;\n/** @type {string} */ CSSProperties.prototype.webkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.webkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.webkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.webkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.webkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.webkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.webkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.webkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.webkitGridRow;\n/** @type {string} */ CSSProperties.prototype.webkitGridRows;\n/** @type {string} */ CSSProperties.prototype.webkitHighlight;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.webkitHyphens;\n/** @type {string} */ CSSProperties.prototype.webkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.webkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.webkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.webkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.webkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.webkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.webkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.webkitLocale;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.webkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.webkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarquee;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitMask;\n/** @type {string} */ CSSProperties.prototype.webkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.webkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.webkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.webkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.webkitOrder;\n/** @type {string} */ CSSProperties.prototype.webkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.webkitPerspective;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.webkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.webkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.webkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.webkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.webkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.webkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.webkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.webkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.webkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.webkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitTransform;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.webkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTransition;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.webkitUserModify;\n/** @type {string} */ CSSProperties.prototype.webkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.webkitWrap;\n/** @type {string} */ CSSProperties.prototype.webkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.webkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.webkitWritingMode;\n\n/**\n * @constructor\n * @param {number} x\n * @param {number} y\n */\nfunction WebKitPoint(x, y) {}\n\n/** @type {number} */\nWebKitPoint.prototype.x;\n\n/** @type {number} */\nWebKitPoint.prototype.y;\n', +-"externs/google_legacy.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the type level google namespace.\n * @externs\n * @author nicksantos@google.com (Nick Santos)\n */\n\n/**\n * Suppresses the compiler warning when multiple externs files declare the\n * google namespace.\n * @suppress {duplicate,strictMissingProperties}\n * NOTE: This definition should be marked \\@const, and when it is we can remove\n * the "strictMissingProperties" suppression.\n */\n// TODO(nicksantos): Consolidate to one google namespace declaration.\nvar google = {};\n', +-"externs/deprecated.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins that are not part of any specifications\n * but are still needed in some project\'s build.\n * @externs\n */\nvar opera = {};\n\nopera.postError;\n\n/** @nosideeffects */\nopera.version = function() {};\n\n/** @constructor */\nfunction XSLTProcessor() {}\n\n/**\n * @constructor\n * @extends {HTMLOptionElement}\n * @param {*=} opt_text\n * @param {*=} opt_value\n * @param {*=} opt_defaultSelected\n * @param {*=} opt_selected\n */\nfunction Option(opt_text, opt_value, opt_defaultSelected, opt_selected) {}\n\n\n// The "methods" object is a place to hang arbitrary external\n// properties. It is a throwback to pre-typed days, and should\n// not be used for any new definitions; it exists only to bridge\n// the gap between the old way and the new way.\nvar methods = {};\n\n/**\n * FF 1.5+ only\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @template T,S\n * @deprecated\n */\nArray.every = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @template T,S\n * @deprecated\n */\nArray.filter = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @template T,S\n * @return {undefined}\n * @deprecated\n */\nArray.forEach = function(arr, callback, opt_context) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.indexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.lastIndexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @deprecated\n * @template T,S,R\n */\nArray.map = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @deprecated\n * @template T,S\n */\nArray.some = function(arr, callback, opt_context) {};\n', +-"externs/es6_proxy.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 Proxy objects.\n * @see https://tc39.github.io/ecma262/#sec-proxy-objects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n * @externs\n */\n\n\n/**\n * @record\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler\n */\nfunction ProxyHandler() {}\n\n/**\n * @type {(function(TARGET):?Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getPrototypeOf\n */\nProxyHandler.prototype.getPrototypeOf /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, ?Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/setPrototypeOf\n */\nProxyHandler.prototype.setPrototypeOf /* = function(target, proto) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-isextensible\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/isExtensible\n */\nProxyHandler.prototype.isExtensible /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/preventExtensions\n */\nProxyHandler.prototype.preventExtensions /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):(!ObjectPropertyDescriptor|undefined))|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor\n */\nProxyHandler.prototype.getOwnPropertyDescriptor /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !ObjectPropertyDescriptor):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/defineProperty\n */\nProxyHandler.prototype.defineProperty /* = function(target, prop, desc) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/has\n */\nProxyHandler.prototype.has /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !Object):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/get\n */\nProxyHandler.prototype.get /* = function(target, prop, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), *, !Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set\n */\nProxyHandler.prototype.set /* = function(target, prop, value, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty\n */\nProxyHandler.prototype.deleteProperty /* = function (target, prop) {} */;\n\n/**\n * @type {(function(TARGET):!Array<(string|symbol)>)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/ownKeys\n */\nProxyHandler.prototype.ownKeys /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, *, !Array):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply\n */\nProxyHandler.prototype.apply /* = function(target, thisArg, argList) {} */;\n\n/**\n * @type {(function(TARGET, !Array, function(new: ?, ...?)):!Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/construct\n */\nProxyHandler.prototype.construct /* = function(target, argList, newTarget) {} */;\n\n\n/**\n * @constructor\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#Syntax\n */\nfunction Proxy(target, handler) {}\n\n/**\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @return {{proxy: !Proxy, revoke: function():void}}\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy.revocable\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable\n */\nProxy.revocable = function(target, handler) {};\n', +-"externs/fido.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions from the FIDO Specifications\n * @see https://fidoalliance.org/download/\n *\n * @externs\n * @author arnarbi@gmail.com (Arnar Birgisson)\n */\n\n/**\n * U2F JavaScript API namespace\n * @see https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html\n * @const\n */\nvar u2f = {};\n\n/**\n * Data object for a single sign request.\n * @typedef {string}\n */\nu2f.Transport;\n\n/**\n * Data object for a registered key.\n * @typedef {{\n * version: string,\n * keyHandle: string,\n * transports: (!Array|undefined),\n * appId: ?string\n * }}\n */\nu2f.RegisteredKey;\n\n/**\n * An error object for responses\n * @typedef {{\n * errorCode: number,\n * errorMessage: ?string\n * }}\n */\nu2f.Error;\n\n/**\n * Data object for a sign response.\n * @typedef {{\n * keyHandle: string,\n * signatureData: string,\n * clientData: string\n * }}\n */\nu2f.SignResponse;\n\n/**\n * @typedef {{\n * version: string,\n * challenge: string\n * }}\n */\nu2f.RegisterRequest\n\n/**\n * @param {string} appId\n * @param {string} challenge\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.sign = function(\n appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {};\n\n/**\n * @param {string} appId\n * @param {!Array} registerRequests\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.register = function(\n appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {};\n', ++"externs/w3c_dom1.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM Level 1 specification.\n * The whole file has been fully type annotated. Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n/**\n * @constructor\n * @param {string=} message\n * @param {string=} name\n * @see https://heycam.github.io/webidl/#idl-DOMException\n */\nfunction DOMException(message, name) {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INDEX_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.DOMSTRING_SIZE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.HIERARCHY_REQUEST_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.WRONG_DOCUMENT_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INVALID_CHARACTER_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_DATA_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_FOUND_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_SUPPORTED_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INUSE_ATTRIBUTE_ERR;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nfunction ExceptionCode() {}\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation() {}\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-5CED94D7\n * @nosideeffects\n */\nDOMImplementation.prototype.hasFeature = function(feature, version) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nfunction Node() {}\n\n/** @override */\nNode.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nNode.prototype.attributes;\n\n/**\n * @type {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-childNodes\n */\nNode.prototype.childNodes;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-firstChild\n */\nNode.prototype.firstChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-lastChild\n */\nNode.prototype.lastChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nextSibling\n */\nNode.prototype.nextSibling;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeName\n */\nNode.prototype.nodeName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeValue\n */\nNode.prototype.nodeValue;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeType\n */\nNode.prototype.nodeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-ownerDocument\n */\nNode.prototype.ownerDocument;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-parentNode\n */\nNode.prototype.parentNode;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-previousSibling\n */\nNode.prototype.previousSibling;\n\n/**\n * @param {Node} newChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-appendChild\n */\nNode.prototype.appendChild = function(newChild) {};\n\n/**\n * @param {boolean} deep\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-cloneNode\n * @nosideeffects\n */\nNode.prototype.cloneNode = function(deep) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-hasChildNodes\n * @nosideeffects\n */\nNode.prototype.hasChildNodes = function() {};\n\n/**\n * @param {Node} newChild\n * @param {Node} refChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-insertBefore\n */\nNode.prototype.insertBefore = function(newChild, refChild) {};\n\n/**\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeChild\n */\nNode.prototype.removeChild = function(oldChild) {};\n\n/**\n * @param {Node} newChild\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-replaceChild\n */\nNode.prototype.replaceChild = function(newChild, oldChild) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ATTRIBUTE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.CDATA_SECTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.COMMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_FRAGMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_TYPE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ELEMENT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_REFERENCE_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.PROCESSING_INSTRUCTION_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.TEXT_NODE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.NOTATION_NODE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-B63ED1A3\n */\nfunction DocumentFragment() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#i-Document\n */\nfunction Document() {}\n\n/**\n * @type {DocumentType}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-doctype\n */\nDocument.prototype.doctype;\n\n/**\n * @type {!HTMLHtmlElement}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-documentElement\n */\nDocument.prototype.documentElement;\n\n/**\n * @type {DOMImplementation}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-implementation\n */\nDocument.prototype.implementation;\n\n/**\n * @param {string} name\n * @return {!Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createAttribute\n * @nosideeffects\n */\nDocument.prototype.createAttribute = function(name) {};\n\n/**\n * @param {string} data\n * @return {!Comment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createComment\n * @nosideeffects\n */\nDocument.prototype.createComment = function(data) {};\n\n/**\n * @param {string} data\n * @return {!CDATASection}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createCDATASection\n * @nosideeffects\n */\nDocument.prototype.createCDATASection = function(data) {};\n\n/**\n * @return {!DocumentFragment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createDocumentFragment\n * @nosideeffects\n */\nDocument.prototype.createDocumentFragment = function() {};\n\n/**\n * Create a DOM element.\n *\n * Web components introduced the second parameter as a way of extending existing\n * tags (e.g. document.createElement('button', 'fancy-button')).\n *\n * @param {string} tagName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @nosideeffects\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createElement\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate\n */\nDocument.prototype.createElement = function(tagName, opt_typeExtension) {};\n\n/**\n * @param {string} target\n * @param {string} data\n * @return {!ProcessingInstruction}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createProcessingInstruction\n * @nosideeffects\n */\nDocument.prototype.createProcessingInstruction = function(target, data) {};\n\n/**\n * @param {number|string} data\n * @return {!Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createTextNode\n * @nosideeffects\n */\nDocument.prototype.createTextNode = function(data) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-A6C9094\n * @nosideeffects\n */\nDocument.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/open\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-open\n */\nDocument.prototype.open;\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-close\n */\nDocument.prototype.close = function() {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-write\n */\nDocument.prototype.write = function(text) {};\n\n/**\n * @param {!TrustedHTML|string} text\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-document-writeln\n */\nDocument.prototype.writeln = function(text) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-536297177\n */\nfunction NodeList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-203510337\n */\nNodeList.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-844377136\n */\nNodeList.prototype.item = function(index) {};\n\n/**\n * @param {?function(this:S, T, number, !NodeList): ?} callback\n * @param {S=} opt_thisobj\n * @template S\n * @return {undefined}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/NodeList/forEach\n */\nNodeList.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number), T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1780488922\n */\nfunction NamedNodeMap() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6D0FB19E\n */\nNamedNodeMap.prototype.length;\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1074577549\n * @nosideeffects\n */\nNamedNodeMap.prototype.getNamedItem = function(name) {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-349467F9\n * @nosideeffects\n */\nNamedNodeMap.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D58B193\n */\nNamedNodeMap.prototype.removeNamedItem = function(name) {};\n\n/**\n * @param {Node} arg\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1025163788\n */\nNamedNodeMap.prototype.setNamedItem = function(arg) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-FF21A306\n */\nfunction CharacterData() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-72AB8359\n */\nCharacterData.prototype.data;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7D61178C\n */\nCharacterData.prototype.length;\n\n/**\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-32791A2F\n */\nCharacterData.prototype.appendData = function(arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7C603781\n */\nCharacterData.prototype.deleteData = function(offset, count) {};\n\n/**\n * @param {number} offset\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-3EDB695F\n */\nCharacterData.prototype.insertData = function(offset, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-E5CBA7FB\n */\nCharacterData.prototype.replaceData = function(offset, count, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6531BCCF\n * @nosideeffects\n */\nCharacterData.prototype.substringData = function(offset, count) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-637646024\n */\nfunction Attr() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1112119403\n */\nAttr.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-862529273\n */\nAttr.prototype.specified;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-221662474\n */\nAttr.prototype.value;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-745549614\n */\nfunction Element() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://dom.spec.whatwg.org/index.html#dom-element-id\n */\nElement.prototype.id;\n\n/**\n * An Element always contains a non-null NamedNodeMap containing the attributes\n * of this node.\n * @type {!NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nElement.prototype.attributes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-tagName\n */\nElement.prototype.tagName;\n\n/**\n * @implicitCast\n * @type {?}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element/className\n * We type it as ? even though it is a string, because some SVG elements have\n * className that is an object, which isn't a subtype of string.\n * Alternative: TypeScript types this as string and types className on\n * SVGElement as ?.\n */\nElement.prototype.className;\n\n/**\n * @param {string} name\n * @param {?number=} flags\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttribute\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536429(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.getAttribute = function(name, flags) {};\n\n/**\n * @param {string} name\n * @return {Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttributeNode\n * @nosideeffects\n */\nElement.prototype.getAttributeNode = function(name) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1938918D\n * @nosideeffects\n */\nElement.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttribute\n */\nElement.prototype.removeAttribute = function(name) {};\n\n/**\n * @param {Attr} oldAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttributeNode\n */\nElement.prototype.removeAttributeNode = function(oldAttr) {};\n\n/**\n * @param {string} name\n * @param {string|number|boolean|!TrustedHTML|!TrustedScriptURL|!TrustedURL}\n * value Values are converted to strings with ToString, so we accept number\n * and boolean since both convert easily to strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttribute\n */\nElement.prototype.setAttribute = function(name, value) {};\n\n/**\n * @param {Attr} newAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttributeNode\n */\nElement.prototype.setAttributeNode = function(newAttr) {};\n\n// Event handlers\n// The DOM level 3 spec has a good index of these\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-types\n\n/** @type {?function (Event)} */ Element.prototype.onabort;\n/** @type {?function (Event)} */ Element.prototype.onbeforeinput;\n/** @type {?function (Event)} */ Element.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Element.prototype.onblur;\n/** @type {?function (Event)} */ Element.prototype.onchange;\n/** @type {?function (Event)} */ Element.prototype.onclick;\n/** @type {?function (Event)} */ Element.prototype.oncompositionstart;\n/** @type {?function (Event)} */ Element.prototype.oncompositionupdate;\n/** @type {?function (Event)} */ Element.prototype.oncompositionend;\n/** @type {?function (Event)} */ Element.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Element.prototype.oncopy;\n/** @type {?function (Event)} */ Element.prototype.oncut;\n/** @type {?function (Event)} */ Element.prototype.ondblclick;\n/** @type {?function (Event)} */ Element.prototype.onerror;\n/** @type {?function (Event)} */ Element.prototype.onfocus;\n/** @type {?function (Event)} */ Element.prototype.onfocusin;\n/** @type {?function (Event)} */ Element.prototype.onfocusout;\n/** @type {?function (Event)} */ Element.prototype.oninput;\n/** @type {?function (Event)} */ Element.prototype.onkeydown;\n/** @type {?function (Event)} */ Element.prototype.onkeypress;\n/** @type {?function (Event)} */ Element.prototype.onkeyup;\n/** @type {?function (Event): void} */ Element.prototype.onload;\n/** @type {?function (Event): void} */ Element.prototype.onunload;\n/** @type {?function (Event)} */ Element.prototype.onmousedown;\n/** @type {?function (Event)} */ Element.prototype.onmousemove;\n/** @type {?function (Event)} */ Element.prototype.onmouseout;\n/** @type {?function (Event)} */ Element.prototype.onmouseover;\n/** @type {?function (Event)} */ Element.prototype.onmouseup;\n/** @type {?function (Event)} */ Element.prototype.onmousewheel;\n/** @type {?function (Event)} */ Element.prototype.onpaste;\n/** @type {?function (Event)} */ Element.prototype.onreset;\n/** @type {?function (Event)} */ Element.prototype.onresize;\n/** @type {?function (Event)} */ Element.prototype.onscroll;\n/** @type {?function (Event)} */ Element.prototype.onselect;\n/** @type {?function (Event=)} */ Element.prototype.onsubmit;\n/** @type {?function (Event)} */ Element.prototype.ontextinput;\n/** @type {?function (Event)} */ Element.prototype.onwheel;\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @param {string=} contents Optional textual content.\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1312295772\n */\nfunction Text(contents) {}\n\n/**\n * @param {number} offset\n * @return {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-38853C1D\n */\nText.prototype.splitText = function(offset) {};\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1728279322\n */\nfunction Comment() {}\n\n/**\n * @constructor\n * @extends {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-667469212\n */\nfunction CDATASection() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-412266927\n */\nfunction DocumentType() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1844763134\n */\nDocumentType.prototype.name;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1004215813\n */\nfunction ProcessingInstruction() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-837822393\n */\nProcessingInstruction.prototype.data;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1478689192\n */\nProcessingInstruction.prototype.target;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction Window() {}\nWindow.prototype.Window;\n\n/** @override */\nWindow.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWindow.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function (Event)} */ Window.prototype.onabort;\n/** @type {?function (Event)} */ Window.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Window.prototype.onblur;\n/** @type {?function (Event)} */ Window.prototype.onchange;\n/** @type {?function (Event)} */ Window.prototype.onclick;\n/** @type {?function (Event)} */ Window.prototype.onclose;\n/** @type {?function (Event)} */ Window.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Window.prototype.ondblclick;\n/** @type {?function (Event)} */ Window.prototype.ondragdrop;\n// onerror has a special signature.\n// See\n// https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/GlobalEventHandlers/onerror\n/**\n * @type {?function (string, string, number, number, !Error):?}\n */\nWindow.prototype.onerror;\n/** @type {?function (Event)} */ Window.prototype.onfocus;\n/** @type {?function (Event)} */ Window.prototype.onhashchange;\n/** @type {?function (Event)} */ Window.prototype.onkeydown;\n/** @type {?function (Event)} */ Window.prototype.onkeypress;\n/** @type {?function (Event)} */ Window.prototype.onkeyup;\n/** @type {?function (Event)} */ Window.prototype.onload;\n/** @type {?function (Event)} */ Window.prototype.onmousedown;\n/** @type {?function (Event)} */ Window.prototype.onmousemove;\n/** @type {?function (Event)} */ Window.prototype.onmouseout;\n/** @type {?function (Event)} */ Window.prototype.onmouseover;\n/** @type {?function (Event)} */ Window.prototype.onmouseup;\n/** @type {?function (Event)} */ Window.prototype.onmousewheel;\n/** @type {?function (Event)} */ Window.prototype.onpaint;\n/** @type {?function (Event)} */ Window.prototype.onpopstate;\n/** @type {?function (Event)} */ Window.prototype.onreset;\n/** @type {?function (Event)} */ Window.prototype.onresize;\n/** @type {?function (Event)} */ Window.prototype.onscroll;\n/** @type {?function (Event)} */ Window.prototype.onselect;\n/** @type {?function (Event=)} */ Window.prototype.onsubmit;\n/** @type {?function (Event)} */ Window.prototype.onunhandledrejection;\n/** @type {?function (Event)} */ Window.prototype.onunload;\n/** @type {?function (Event)} */ Window.prototype.onwheel;\n", ++"externs/w3c_dom2.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 2 specification.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n */\n\n/**\n * @param {string} s id.\n * @return {Element}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBId\n */\nDocument.prototype.getElementById = function(s) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createElementNS =\n function(namespaceURI, qualifiedName, opt_typeExtension) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @return {!Attr}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createAttributeNS =\n function(namespaceURI, qualifiedName) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!NodeIterator}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createNodeIterator = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!TreeWalker}\n * @see https://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html#Traversal-Document\n * @see https://dom.spec.whatwg.org/#interface-document\n * @nosideeffects\n */\nDocument.prototype.createTreeWalker = function(\n root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {string} namespace\n * @param {string} name\n * @return {!NodeList}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBTNNS\n */\nDocument.prototype.getElementsByTagNameNS = function(namespace, name) {};\n\n/**\n * @param {!Node} externalNode\n * @param {boolean=} deep\n * @return {!Node}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#Core-Document-importNode\n */\nDocument.prototype.importNode = function(externalNode, deep) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75708506\n */\nfunction HTMLCollection() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40057551\n */\nHTMLCollection.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33262535\n * @nosideeffects\n */\nHTMLCollection.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21069976\n * @nosideeffects\n */\nHTMLCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#htmloptionscollection\n */\nfunction HTMLOptionsCollection() {}\n\n/**\n * @type {number}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-length\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.length;\n\n/**\n * @param {HTMLOptionElement|HTMLOptGroupElement} element\n * @param {HTMLElement|number=} before\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-add\n */\nHTMLOptionsCollection.prototype.add = function(element, before) {};\n\n/**\n * NOTE(tjgq): The HTMLOptionsCollection#item method is inherited from\n * HTMLCollection, but it must be declared explicitly to work around an error\n * when building a jsinterop library for GWT.\n * @param {number} index\n * @return {HTMLOptionElement}\n * @override\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.item = function(index) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#dom-htmloptionscollection-remove\n */\nHTMLOptionsCollection.prototype.remove = function(index) {};\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26809268\n */\nfunction HTMLDocument() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18446827\n */\nHTMLDocument.prototype.title;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95229140\n */\nHTMLDocument.prototype.referrer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2250147\n */\nHTMLDocument.prototype.domain;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46183437\n */\nHTMLDocument.prototype.URL;\n\n/**\n * @type {!HTMLBodyElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56360201\n */\nHTMLDocument.prototype.body;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90379117\n */\nHTMLDocument.prototype.images;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85113862\n */\nHTMLDocument.prototype.applets;\n\n/**\n * @type {!HTMLCollection<(!HTMLAnchorElement|!HTMLAreaElement)>}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7068919\n */\nHTMLDocument.prototype.links;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1689064\n */\nHTMLDocument.prototype.forms;\n\n/**\n * @type {!HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7577272\n */\nHTMLDocument.prototype.anchors;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8747038\n */\nHTMLDocument.prototype.cookie;\n\n/**\n * @param {string=} opt_mimeType\n * @param {string=} opt_replace\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72161170\n * Even though official spec says "no parameters" some old browsers might take\n * optional parameters: https://msdn.m1cr050ft.qjz9zk/en-us/library/ms536652(v=vs.85).aspx\n * @override\n */\nHTMLDocument.prototype.open = function(opt_mimeType, opt_replace) {};\n\n/**\n * @param {string} elementName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71555259\n * @nosideeffects\n */\nHTMLDocument.prototype.getElementsByName = function(elementName) {};\n\n\n/** @typedef {{\n createNodeIterator: function(Node, number=, NodeFilter=, boolean=) : NodeIterator,\n createTreeWalker: function(Node, number=, NodeFilter=, boolean=) : TreeWalker\n}} */\nvar TraversalDocument;\n\n/**\n * @record\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter\n*/\nfunction NodeFilter() {}\n\n/* Constants for whatToShow */\n/** @const {number} */ NodeFilter.SHOW_ALL;\n/** @const {number} */ NodeFilter.SHOW_ATTRIBUTE;\n/** @const {number} */ NodeFilter.SHOW_CDATA_SECTION;\n/** @const {number} */ NodeFilter.SHOW_COMMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_FRAGMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_TYPE;\n/** @const {number} */ NodeFilter.SHOW_ELEMENT;\n/** @const {number} */ NodeFilter.SHOW_ENTITY;\n/** @const {number} */ NodeFilter.SHOW_ENTITY_REFERENCE;\n/** @const {number} */ NodeFilter.SHOW_NOTATION;\n/** @const {number} */ NodeFilter.SHOW_PROCESSING_INSTRUCTION;\n/** @const {number} */ NodeFilter.SHOW_TEXT;\n\n/* Consants for acceptNode */\n/** @const {number} */ NodeFilter.FILTER_ACCEPT;\n/** @const {number} */ NodeFilter.FILTER_REJECT;\n/** @const {number} */ NodeFilter.FILTER_SKIP;\n\n/**\n * @param {Node} n\n * @return {number} Any of NodeFilter.FILTER_* constants.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter-acceptNode\n*/\nNodeFilter.prototype.acceptNode = function(n) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator\n*/\nfunction NodeIterator() {}\n\n/**\n * Detach and invalidate the NodeIterator.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-detach\n * @return {undefined}\n */\nNodeIterator.prototype.detach = function() {};\n\n/**\n * @return {Node} Next node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-nextNode\n */\nNodeIterator.prototype.nextNode = function() {};\n\n/**\n * @return {Node} Previous node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-previousNode\n */\nNodeIterator.prototype.previousNode = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker\n*/\nfunction TreeWalker() {}\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-firstChild\n */\nTreeWalker.prototype.firstChild = function() {};\n\n/**\n * @return {?Node} The new Node or null..\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-lastChild\n */\nTreeWalker.prototype.lastChild = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextNode\n */\nTreeWalker.prototype.nextNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextSibling\n */\nTreeWalker.prototype.nextSibling = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-parentNode\n */\nTreeWalker.prototype.parentNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousNode\n */\nTreeWalker.prototype.previousNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousSibling\n */\nTreeWalker.prototype.previousSibling = function() {};\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.root;\n\n/**\n * @type {number}\n */\nTreeWalker.prototype.whatToShow;\n\n/**\n * @type {NodeFilter}\n */\nTreeWalker.prototype.filter;\n\n/**\n * @type {boolean}\n */\nTreeWalker.prototype.expandEntityReference;\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.currentNode;\n\n/**\n * @constructor\n * @extends {Element}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58190037\n */\nfunction HTMLElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78276800\n */\nHTMLElement.prototype.title;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nHTMLElement.prototype.style;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59132807\n */\nHTMLElement.prototype.lang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52460740\n */\nHTMLElement.prototype.dir;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95362176\n */\nHTMLElement.prototype.className;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40676705\n */\nHTMLElement.prototype.tabIndex;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33759296\n */\nfunction HTMLHtmlElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9383775\n */\nHTMLHtmlElement.prototype.version;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77253168\n */\nfunction HTMLHeadElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96921909\n */\nHTMLHeadElement.prototype.profile;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35143001\n */\nfunction HTMLLinkElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87355129\n */\nHTMLLinkElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63954491\n */\nHTMLLinkElement.prototype.charset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33532588\n */\nHTMLLinkElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85145682\n */\nHTMLLinkElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75813125\n */\nHTMLLinkElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41369587\n */\nHTMLLinkElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40715461\n */\nHTMLLinkElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84183095\n */\nHTMLLinkElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32498296\n */\nHTMLLinkElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLLinkElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79243169\n */\nfunction HTMLTitleElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77500413\n */\nHTMLTitleElement.prototype.text;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37041454\n */\nfunction HTMLMetaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87670826\n */\nHTMLMetaElement.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77289449\n */\nHTMLMetaElement.prototype.httpEquiv;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31037081\n */\nHTMLMetaElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35993789\n */\nHTMLMetaElement.prototype.scheme;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73629039\n */\nfunction HTMLBaseElement() {}\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65382887\n */\nHTMLBaseElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73844298\n */\nHTMLBaseElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85283003\n */\nfunction HTMLIsIndexElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87069980\n */\nHTMLIsIndexElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33589862\n */\nHTMLIsIndexElement.prototype.prompt;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16428977\n */\nfunction HTMLStyleElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51162010\n */\nHTMLStyleElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76412738\n */\nHTMLStyleElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22472002\n */\nHTMLStyleElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLStyleElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62018039\n */\nfunction HTMLBodyElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59424581\n */\nHTMLBodyElement.prototype.aLink;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37574810\n */\nHTMLBodyElement.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24940084\n */\nHTMLBodyElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7662206\n */\nHTMLBodyElement.prototype.link;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73714763\n */\nHTMLBodyElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83224305\n */\nHTMLBodyElement.prototype.vLink;\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @implements {IObject)>}\n * @implements {IArrayLike}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlformcontrolscollection-interface\n */\nfunction HTMLFormControlsCollection() {}\n\n/**\n * @param {string} name\n * @return {T|RadioNodeList|null}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#dom-htmlformcontrolscollection-nameditem\n * @nosideeffects\n * @override\n */\nHTMLFormControlsCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40002357\n */\nfunction HTMLFormElement() {}\n\n/**\n * @type {!HTMLFormControlsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76728479\n */\nHTMLFormElement.prototype.elements;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLFormElement-length\n */\nHTMLFormElement.prototype.length;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22051454\n */\nHTMLFormElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19661795\n */\nHTMLFormElement.prototype.acceptCharset;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74049184\n */\nHTMLFormElement.prototype.action;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84227810\n */\nHTMLFormElement.prototype.enctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82545539\n */\nHTMLFormElement.prototype.method;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6512890\n */\nHTMLFormElement.prototype.target;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767676\n */\nHTMLFormElement.prototype.submit = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767677\n */\nHTMLFormElement.prototype.reset = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94282980\n */\nfunction HTMLSelectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58783172\n */\nHTMLSelectElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85676760\n */\nHTMLSelectElement.prototype.selectedIndex;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59351919\n */\nHTMLSelectElement.prototype.value;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5933486\n */\nHTMLSelectElement.prototype.length;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20489458\n */\nHTMLSelectElement.prototype.form;\n\n/**\n * @type {!HTMLOptionsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30606413\n */\nHTMLSelectElement.prototype.options;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79102918\n */\nHTMLSelectElement.prototype.disabled;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13246613\n */\nHTMLSelectElement.prototype.multiple;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41636323\n */\nHTMLSelectElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18293826\n */\nHTMLSelectElement.prototype.size;\n\n/**\n * @param {HTMLElement} element\n * @param {HTMLElement=} opt_before\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14493106\n */\nHTMLSelectElement.prototype.add = function(element, opt_before) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-28216144\n * @override\n */\nHTMLSelectElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32130014\n * @override\n */\nHTMLSelectElement.prototype.focus = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33404570\n * @override\n */\nHTMLSelectElement.prototype.remove = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38450247\n */\nfunction HTMLOptGroupElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15518803\n */\nHTMLOptGroupElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95806054\n */\nHTMLOptGroupElement.prototype.label;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70901257\n */\nfunction HTMLOptionElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37770574\n */\nHTMLOptionElement.prototype.defaultSelected;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23482473\n */\nHTMLOptionElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17116503\n */\nHTMLOptionElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14038413\n */\nHTMLOptionElement.prototype.index;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40736115\n */\nHTMLOptionElement.prototype.label;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70874476\n */\nHTMLOptionElement.prototype.selected;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48154426\n */\nHTMLOptionElement.prototype.text;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6185554\n */\nHTMLOptionElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6043025\n */\nfunction HTMLInputElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15328520\n */\nHTMLInputElement.prototype.accept;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59914154\n */\nHTMLInputElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96991182\n */\nHTMLInputElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92701314\n */\nHTMLInputElement.prototype.alt;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30233917\n */\nHTMLInputElement.prototype.checked;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20509171\n */\nHTMLInputElement.prototype.defaultChecked;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26091157\n */\nHTMLInputElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50886781\n */\nHTMLInputElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63239895\n */\nHTMLInputElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-54719353\n */\nHTMLInputElement.prototype.maxLength;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89658498\n */\nHTMLInputElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88461592\n */\nHTMLInputElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79659438\n */\nHTMLInputElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97320704\n */\nHTMLInputElement.prototype.src;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62176355\n */\nHTMLInputElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62883744\n */\nHTMLInputElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32463706\n */\nHTMLInputElement.prototype.useMap;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49531485\n */\nHTMLInputElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26838235\n * @override\n */\nHTMLInputElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2651361\n * @override\n */\nHTMLInputElement.prototype.click = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65996295\n * @override\n */\nHTMLInputElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34677168\n */\nHTMLInputElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24874179\n */\nfunction HTMLTextAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93102991\n */\nHTMLTextAreaElement.prototype.accessKey;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51387225\n */\nHTMLTextAreaElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36152213\n */\nHTMLTextAreaElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98725443\n */\nHTMLTextAreaElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18911464\n */\nHTMLTextAreaElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715578\n */\nHTMLTextAreaElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39131423\n */\nHTMLTextAreaElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46975887\n */\nHTMLTextAreaElement.prototype.rows;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-60363303\n */\nHTMLTextAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLTextAreaElement-type\n */\nHTMLTextAreaElement.prototype.type;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715579\n */\nHTMLTextAreaElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6750689\n * @override\n */\nHTMLTextAreaElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39055426\n * @override\n */\nHTMLTextAreaElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48880622\n */\nHTMLTextAreaElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34812697\n */\nfunction HTMLButtonElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73169431\n */\nHTMLButtonElement.prototype.accessKey;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92757155\n */\nHTMLButtonElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71254493\n */\nHTMLButtonElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11029910\n */\nHTMLButtonElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39190908\n */\nHTMLButtonElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27430092\n */\nHTMLButtonElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72856782\n */\nHTMLButtonElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13691394\n */\nfunction HTMLLabelElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43589892\n */\nHTMLLabelElement.prototype.accessKey;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32480901\n */\nHTMLLabelElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96509813\n */\nHTMLLabelElement.prototype.htmlFor;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7365882\n */\nfunction HTMLFieldSetElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75392630\n */\nHTMLFieldSetElement.prototype.form;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#attr-fieldset-disabled\n */\nHTMLFieldSetElement.prototype.disabled;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21482039\n */\nfunction HTMLLegendElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11297832\n */\nHTMLLegendElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79538067\n */\nHTMLLegendElement.prototype.align;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-29594519\n */\nHTMLLegendElement.prototype.form;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-86834457\n */\nfunction HTMLUListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39864178\n */\nHTMLUListElement.prototype.compact;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96874670\n */\nHTMLUListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58056027\n */\nfunction HTMLOListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76448506\n */\nHTMLOListElement.prototype.compact;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14793325\n */\nHTMLOListElement.prototype.start;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40971103\n */\nHTMLOListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52368974\n */\nfunction HTMLDListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21738539\n */\nHTMLDListElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71600284\n */\nfunction HTMLDirectoryElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75317739\n */\nHTMLDirectoryElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72509186\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menu-element\n */\nfunction HTMLMenuElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68436464\n */\nHTMLMenuElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74680021\n */\nfunction HTMLLIElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52387668\n */\nHTMLLIElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45496263\n */\nHTMLLIElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22445964\n */\nfunction HTMLDivElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70908791\n */\nHTMLDivElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84675076\n */\nfunction HTMLParagraphElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53465507\n */\nHTMLParagraphElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43345119\n */\nfunction HTMLHeadingElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6796462\n */\nHTMLHeadingElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70319763\n */\nfunction HTMLQuoteElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53895598\n */\nHTMLQuoteElement.prototype.cite;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11383425\n */\nfunction HTMLPreElement() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13894083\n */\nHTMLPreElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56836063\n */\nfunction HTMLBRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82703081\n */\nHTMLBRElement.prototype.clear;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32774408\n */\nfunction HTMLBaseFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87502302\n */\nHTMLBaseFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88128969\n */\nHTMLBaseFontElement.prototype.face;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38930424\n */\nHTMLBaseFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43943847\n */\nfunction HTMLFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53532975\n */\nHTMLFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55715655\n */\nHTMLFontElement.prototype.face;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90127284\n */\nHTMLFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68228811\n */\nfunction HTMLHRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15235012\n */\nHTMLHRElement.prototype.align;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79813978\n */\nHTMLHRElement.prototype.noShade;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77612587\n */\nHTMLHRElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87744198\n */\nHTMLHRElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79359609\n */\nfunction HTMLModElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75101708\n */\nHTMLModElement.prototype.cite;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88432678\n */\nHTMLModElement.prototype.dateTime;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48250443\n */\nfunction HTMLAnchorElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89647724\n */\nHTMLAnchorElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67619266\n */\nHTMLAnchorElement.prototype.charset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92079539\n */\nHTMLAnchorElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88517319\n */\nHTMLAnchorElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87358513\n */\nHTMLAnchorElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32783304\n */\nHTMLAnchorElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3815891\n */\nHTMLAnchorElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58259771\n */\nHTMLAnchorElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49899808\n */\nHTMLAnchorElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41586466\n */\nHTMLAnchorElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6414197\n */\nHTMLAnchorElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63938221\n */\nHTMLAnchorElement.prototype.type;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65068939\n * @override\n */\nHTMLAnchorElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47150313\n * @override\n */\nHTMLAnchorElement.prototype.focus = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17701901\n */\nfunction HTMLImageElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3211094\n */\nHTMLImageElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95636861\n */\nHTMLImageElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-136671\n */\nHTMLImageElement.prototype.border;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91561496\n */\nHTMLImageElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53675471\n */\nHTMLImageElement.prototype.hspace;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58983880\n */\nHTMLImageElement.prototype.isMap;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77376969\n */\nHTMLImageElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91256910\n */\nHTMLImageElement.prototype.lowSrc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47534097\n */\nHTMLImageElement.prototype.name;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87762984\n */\nHTMLImageElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35981181\n */\nHTMLImageElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85374897\n */\nHTMLImageElement.prototype.vspace;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13839076\n */\nHTMLImageElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9893177\n */\nfunction HTMLObjectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16962097\n */\nHTMLObjectElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47783837\n */\nHTMLObjectElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82818419\n */\nHTMLObjectElement.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75241146\n */\nHTMLObjectElement.prototype.code;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25709136\n */\nHTMLObjectElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19945008\n */\nHTMLObjectElement.prototype.codeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538621\n */\nHTMLObjectElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81766986\n */\nHTMLObjectElement.prototype.data;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-942770\n */\nHTMLObjectElement.prototype.declare;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46094773\n */\nHTMLObjectElement.prototype.form;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88925838\n */\nHTMLObjectElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17085376\n */\nHTMLObjectElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20110362\n */\nHTMLObjectElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25039673\n */\nHTMLObjectElement.prototype.standby;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27083787\n */\nHTMLObjectElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91665621\n */\nHTMLObjectElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6649772\n */\nHTMLObjectElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8682483\n */\nHTMLObjectElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538620\n */\nHTMLObjectElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64077273\n */\nfunction HTMLParamElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59871447\n */\nHTMLParamElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18179888\n */\nHTMLParamElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77971357\n */\nHTMLParamElement.prototype.value;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23931872\n */\nHTMLParamElement.prototype.valueType;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31006348\n */\nfunction HTMLAppletElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8049912\n */\nHTMLAppletElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58610064\n */\nHTMLAppletElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14476360\n */\nHTMLAppletElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61509645\n */\nHTMLAppletElement.prototype.code;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6581160\n */\nHTMLAppletElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90184867\n */\nHTMLAppletElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1567197\n */\nHTMLAppletElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39843695\n */\nHTMLAppletElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93681523\n */\nHTMLAppletElement.prototype.object;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22637173\n */\nHTMLAppletElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16526327\n */\nHTMLAppletElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94109203\n */\nfunction HTMLMapElement() {}\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71838730\n */\nHTMLMapElement.prototype.areas;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52696514\n */\nHTMLMapElement.prototype.name;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26019118\n */\nfunction HTMLAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57944457\n */\nHTMLAreaElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39775416\n */\nHTMLAreaElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66021476\n */\nHTMLAreaElement.prototype.coords;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34672936\n */\nHTMLAreaElement.prototype.href;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61826871\n */\nHTMLAreaElement.prototype.noHref;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85683271\n */\nHTMLAreaElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8722121\n */\nHTMLAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46054682\n */\nHTMLAreaElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81598695\n */\nfunction HTMLScriptElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35305677\n */\nHTMLScriptElement.prototype.charset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93788534\n */\nHTMLScriptElement.prototype.defer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56700403\n */\nHTMLScriptElement.prototype.event;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66979266\n */\nHTMLScriptElement.prototype.htmlFor;\n\n/**\n * @type {?function(!Event)}\n */\nHTMLScriptElement.prototype.onreadystatechange;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75147231\n */\nHTMLScriptElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46872999\n */\nHTMLScriptElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30534818\n */\nHTMLScriptElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64060425\n */\nfunction HTMLTableElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23180977\n */\nHTMLTableElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83532985\n */\nHTMLTableElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50969400\n */\nHTMLTableElement.prototype.border;\n\n/**\n * @type {HTMLTableCaptionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14594520\n */\nHTMLTableElement.prototype.caption;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59162158\n */\nHTMLTableElement.prototype.cellPadding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68907883\n */\nHTMLTableElement.prototype.cellSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64808476\n */\nHTMLTableElement.prototype.frame;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6156016\n */\nHTMLTableElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26347553\n */\nHTMLTableElement.prototype.rules;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-44998528\n */\nHTMLTableElement.prototype.summary;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63206416\n */\nHTMLTableElement.prototype.tBodies;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64197097\n */\nHTMLTableElement.prototype.tFoot;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9530944\n */\nHTMLTableElement.prototype.tHead;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77447361\n */\nHTMLTableElement.prototype.width;\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96920263\n */\nHTMLTableElement.prototype.createCaption = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8453710\n */\nHTMLTableElement.prototype.createTFoot = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70313345\n */\nHTMLTableElement.prototype.createTHead = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22930071\n */\nHTMLTableElement.prototype.deleteCaption = function() {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13114938\n */\nHTMLTableElement.prototype.deleteRow = function(index) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78363258\n */\nHTMLTableElement.prototype.deleteTFoot = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38310198\n */\nHTMLTableElement.prototype.deleteTHead = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltableelement\n */\nHTMLTableElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-12035137\n */\nfunction HTMLTableCaptionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79875068\n */\nHTMLTableCaptionElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84150186\n */\nfunction HTMLTableColElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31128447\n */\nHTMLTableColElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9447412\n */\nHTMLTableColElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57779225\n */\nHTMLTableColElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96511335\n */\nHTMLTableColElement.prototype.span;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83291710\n */\nHTMLTableColElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25196799\n */\nHTMLTableColElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67417573\n */\nfunction HTMLTableSectionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40530119\n */\nHTMLTableSectionElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83470012\n */\nHTMLTableSectionElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53459732\n */\nHTMLTableSectionElement.prototype.chOff;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52092650\n */\nHTMLTableSectionElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-4379116\n */\nHTMLTableSectionElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5625626\n */\nHTMLTableSectionElement.prototype.deleteRow = function(index) {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltablesectionelement\n */\nHTMLTableSectionElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6986576\n */\nfunction HTMLTableRowElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74098257\n */\nHTMLTableRowElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18161327\n */\nHTMLTableRowElement.prototype.bgColor;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67349879\n */\nHTMLTableRowElement.prototype.cells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16230502\n */\nHTMLTableRowElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68207461\n */\nHTMLTableRowElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67347567\n */\nHTMLTableRowElement.prototype.rowIndex;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79105901\n */\nHTMLTableRowElement.prototype.sectionRowIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90000058\n */\nHTMLTableRowElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11738598\n */\nHTMLTableRowElement.prototype.deleteCell = function(index) {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68927016\n */\nHTMLTableRowElement.prototype.insertCell = function(index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82915075\n */\nfunction HTMLTableCellElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74444037\n */\nHTMLTableCellElement.prototype.abbr;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98433879\n */\nHTMLTableCellElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76554418\n */\nHTMLTableCellElement.prototype.axis;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88135431\n */\nHTMLTableCellElement.prototype.bgColor;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80748363\n */\nHTMLTableCellElement.prototype.cellIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30914780\n */\nHTMLTableCellElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20144310\n */\nHTMLTableCellElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84645244\n */\nHTMLTableCellElement.prototype.colSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89104817\n */\nHTMLTableCellElement.prototype.headers;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83679212\n */\nHTMLTableCellElement.prototype.height;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62922045\n */\nHTMLTableCellElement.prototype.noWrap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48237625\n */\nHTMLTableCellElement.prototype.rowSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36139952\n */\nHTMLTableCellElement.prototype.scope;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58284221\n */\nHTMLTableCellElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27480795\n */\nHTMLTableCellElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43829095\n */\nfunction HTMLFrameSetElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98869594\n */\nHTMLFrameSetElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19739247\n */\nHTMLFrameSetElement.prototype.rows;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97790553\n */\nfunction HTMLFrameElement() {}\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799536\n */\nHTMLFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11858633\n */\nHTMLFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7836998\n */\nHTMLFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55569778\n */\nHTMLFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8369969\n */\nHTMLFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91128709\n */\nHTMLFrameElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80766578\n */\nHTMLFrameElement.prototype.noResize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45411424\n */\nHTMLFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799535\n */\nHTMLFrameElement.prototype.src;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50708718\n */\nfunction HTMLIFrameElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11309947\n */\nHTMLIFrameElement.prototype.align;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133006\n */\nHTMLIFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22463410\n */\nHTMLIFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1678118\n */\nHTMLIFrameElement.prototype.height;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70472105\n */\nHTMLIFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91371294\n */\nHTMLIFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66486595\n */\nHTMLIFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96819659\n */\nHTMLIFrameElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36369822\n */\nHTMLIFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43933957\n */\nHTMLIFrameElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133005\n */\nHTMLIFrameElement.prototype.width;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_STATE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.SYNTAX_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_MODIFICATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.NAMESPACE_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_ACCESS_ERR;\n/**\n * @type {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.closed\n */\nWindow.prototype.closed;\n\n/**\n * @type {HTMLObjectElement|HTMLIFrameElement|null}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.frameElement\n */\nWindow.prototype.frameElement;\n\n/**\n * Allows lookup of frames by index or by name.\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.frames\n */\nWindow.prototype.frames;\n\n/**\n * @type {!History}\n * @suppress {duplicate}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.history\n */\nvar history;\n\n/**\n * @type {!History}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.history\n */\nWindow.prototype.history;\n\n/**\n * Returns the number of frames (either frame or iframe elements) in the\n * window.\n *\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.length\n */\nWindow.prototype.length;\n\n/**\n * Location has an exception in the DeclaredGlobalExternsOnWindow pass\n * so we have to manually include it:\n * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116\n *\n * @type {!Location}\n * @implicitCast\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.location\n */\nWindow.prototype.location;\n\n/**\n\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.name\n */\nWindow.prototype.name;\n\n/**\n * @type {Navigator}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.navigator\n */\nWindow.prototype.navigator;\n\n/**\n * @type {?Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.opener\n */\nWindow.prototype.opener;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.parent\n */\nWindow.prototype.parent;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.self\n */\nWindow.prototype.self;\n\n/**\n * @type {?string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.status\n */\nWindow.prototype.status;\n\n/**\n * @interface\n * @see https://html.spec.whatwg.org/multipage/window-object.html#the-status-bar-barprop-object\n */\nfunction BarProp() {}\n\n/** @const {boolean} */\nBarProp.prototype.visible;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.locationbar\n */\nWindow.prototype.locationbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.menubar\n */\nWindow.prototype.menubar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.personalbar\n */\nWindow.prototype.personalbar;\n\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.scrollbars\n */\nWindow.prototype.scrollbars;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.statusbar\n */\nWindow.prototype.statusbar;\n\n/**\n * @type {!BarProp}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.toolbar\n */\nWindow.prototype.toolbar;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.self\n */\nWindow.prototype.top;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.self\n */\nWindow.prototype.window;\n\n/**\n * @param {*} message\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.alert\n * @return {undefined}\n */\nWindow.prototype.alert = function(message) {};\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.confirm\n */\nWindow.prototype.confirm = function(message) {};\n\n/**\n * @param {string} message\n * @param {string=} value\n * @return {?string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.prompt\n */\nWindow.prototype.prompt = function(message, value) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.blur\n * @return {undefined}\n */\nWindow.prototype.blur = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.close\n * @return {undefined}\n */\nWindow.prototype.close = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.focus\n * @return {undefined}\n */\nWindow.prototype.focus = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/print\n * @return {undefined}\n */\nWindow.prototype.print = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/stop\n * @return {undefined}\n */\nWindow.prototype.stop = function() {};\n\n/**\n * @param {*=} url\n * @param {string=} windowName\n * @param {string=} windowFeatures\n * @param {boolean=} replace\n * @return {Window}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536651(VS.85).aspx\n */\nWindow.prototype.open = function(url, windowName, windowFeatures, replace) {};\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element/innerHTML\n * @implicitCast\n */\nElement.prototype.innerHTML;\n\n/**\n * @type {string}\n * @implicitCast\n * @see https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface\n */\nElement.prototype.outerHTML;\n\n', ++"externs/w3c_dom3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM Level 3 specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.prototype.code;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.VALIDATION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.TYPE_MISMATCH_ERR;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList\n */\nfunction DOMStringList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-length\n */\nDOMStringList.prototype.length;\n\n/**\n * @param {string} str\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-contains\n * @nosideeffects\n */\nDOMStringList.prototype.contains = function(str) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-item\n * @nosideeffects\n */\nDOMStringList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList\n */\nfunction DOMImplementationList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-length\n */\nDOMImplementationList.prototype.length;\n\n/**\n * @param {number} index\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-item\n * @nosideeffects\n */\nDOMImplementationList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationSource\n */\nfunction DOMImplementationSource() {}\n\n/**\n * @param {?string} namespaceURI\n * @param {string} publicId\n * @param {DocumentType} doctype\n * @return {Document}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocument = function(namespaceURI, publicId, doctype) {};\n\n/**\n * @param {string} qualifiedName\n * @param {string} publicId\n * @param {string} systemId\n * @return {DocumentType}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocType\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpl\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementation = function(features) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementationList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpls\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementationList = function(features) {};\n\n/**\n * @param {Node} externalNode\n * @return {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-adoptNode\n */\nDocument.prototype.adoptNode = function(externalNode) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-documentURI\n */\nDocument.prototype.documentURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-inputEncoding\n */\nDocument.prototype.inputEncoding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-encoding\n */\nDocument.prototype.xmlEncoding;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-standalone\n */\nDocument.prototype.xmlStandalone;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-version\n */\nDocument.prototype.xmlVersion;\n\n/**\n * @type {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-baseURI\n */\nNode.prototype.baseURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSLocalN\n */\nNode.prototype.localName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSname\n */\nNode.prototype.namespaceURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSPrefix\n */\nNode.prototype.prefix;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent\n */\nNode.prototype.textContent;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_DISCONNECTED\n */\nNode.DOCUMENT_POSITION_DISCONNECTED;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_PRECEDING\n */\nNode.DOCUMENT_POSITION_PRECEDING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_FOLLOWING\n */\nNode.DOCUMENT_POSITION_FOLLOWING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINS\n */\nNode.DOCUMENT_POSITION_CONTAINS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINED_BY\n */\nNode.DOCUMENT_POSITION_CONTAINED_BY;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n */\nNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n\n/**\n * @param {Node} other\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition\n * @nosideeffects\n */\nNode.prototype.compareDocumentPosition = function(other) {};\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getFeature\n * @nosideeffects\n */\nNode.prototype.getFeature = function(feature, version) {};\n\n/**\n * @param {string} key\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getUserData\n * @nosideeffects\n */\nNode.prototype.getUserData = function(key) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeHasAttrs\n * @nosideeffects\n */\nNode.prototype.hasAttributes = function() {};\n\n/**\n * @param {?string} namespaceURI\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n * @nosideeffects\n */\nNode.prototype.isDefaultNamespace = function(namespaceURI) {};\n\n/**\n * @param {Node} arg\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isEqualNode\n * @nosideeffects\n */\nNode.prototype.isEqualNode = function(arg) {};\n\n/**\n * @param {Node} other\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isSameNode\n * @nosideeffects\n */\nNode.prototype.isSameNode = function(other) {};\n\n/**\n * @param {string} prefix\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n * @nosideeffects\n */\nNode.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * @param {?string} namespaceURI\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n * @nosideeffects\n */\nNode.prototype.lookupPrefix = function(namespaceURI) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-normalize\n */\nNode.prototype.normalize = function() {};\n\n/**\n * @param {string} query\n * @return {?Element}\n * @see http://www.w3.org/TR/selectors-api/#queryselector\n * @nosideeffects\n */\nNode.prototype.querySelector = function(query) {};\n\n/**\n * @param {string} query\n * @return {!NodeList}\n * @see http://www.w3.org/TR/selectors-api/#queryselectorall\n * @nosideeffects\n */\nNode.prototype.querySelectorAll = function(query) {};\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-ownerElement\n */\nAttr.prototype.ownerElement;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-isId\n */\nAttr.prototype.isId;\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAtNodeNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAttrNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-A6C90942\n * @nosideeffects\n */\nElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttr\n * @nosideeffects\n */\nElement.prototype.hasAttribute = function(name) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttrNS\n * @nosideeffects\n */\nElement.prototype.hasAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElRemAtNS\n */\nElement.prototype.removeAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {Attr} newAttr\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAtNodeNS\n */\nElement.prototype.setAttributeNodeNS = function(newAttr) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string|number|boolean} value Values are converted to strings with\n * ToString, so we accept number and boolean since both convert easily to\n * strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAttrNS\n */\nElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-wholeText\n */\nText.prototype.wholeText;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMError\n */\nfunction DOMError() {}\n\n/**\n * @type {DOMLocator}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-location\n */\nDOMError.prototype.location;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-message\n */\nDOMError.prototype.message;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedData\n */\nDOMError.prototype.relatedData;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedException\n */\nDOMError.prototype.relatedException;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-warning\n */\nDOMError.SEVERITY_WARNING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-error\n */\nDOMError.SEVERITY_ERROR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-fatal-error\n */\nDOMError.SEVERITY_FATAL_ERROR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity\n */\nDOMError.prototype.severity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-type\n */\nDOMError.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/dom/#domerror\n */\nDOMError.prototype.name;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMErrorHandler\n */\nfunction DOMErrorHandler() {}\n\n/**\n * @param {DOMError} error\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ERRORS-DOMErrorHandler-handleError\n */\nDOMErrorHandler.prototype.handleError = function(error) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Interfaces-DOMLocator\n */\nfunction DOMLocator() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-byteOffset\n */\nDOMLocator.prototype.byteOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-column-number\n */\nDOMLocator.prototype.columnNumber;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-line-number\n */\nDOMLocator.prototype.lineNumber;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-node\n */\nDOMLocator.prototype.relatedNode;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-uri\n */\nDOMLocator.prototype.uri;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-utf16Offset\n */\nDOMLocator.prototype.utf16Offset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-publicId\n */\nDocumentType.prototype.publicId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-systemId\n */\nDocumentType.prototype.systemId;\n', ++"externs/w3c_dom4.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s DOM4 specification. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/domcore/.\n *\n * @externs\n * @author zhoumotongxue008@9ma1l.qjz9zk (Michael Zhou)\n */\n\n/**\n * @typedef {?(DocumentType|Element|CharacterData)}\n * @see https://www.w3.org/TR/domcore/#interface-childnode\n */\nvar ChildNode;\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nDocumentType.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nElement.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nCharacterData.prototype.remove = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nDocumentType.prototype.replaceWith = function(nodes) {};\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.name;\n\n/**\n * @const {string}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#sec-domerror\n */\nDOMException.prototype.message;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.SECURITY_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.NETWORK_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.ABORT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.URL_MISMATCH_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.TIMEOUT_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.INVALID_NODE_TYPE_ERR;\n\n/**\n * @const {number}\n * @see https://www.w3.org/TR/2015/REC-dom-20151119/#dfn-error-names-table\n */\nDOMException.DATA_CLONE_ERR;\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nElement.prototype.replaceWith = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-replacewith\n */\nCharacterData.prototype.replaceWith = function(nodes) {};\n\n/**\n * @return {!Array}\n * @see https://dom.spec.whatwg.org/#dom-element-getattributenames\n */\nElement.prototype.getAttributeNames = function() {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nElement.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocument.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-append\n */\nDocumentFragment.prototype.append = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nElement.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocument.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-prepend\n */\nDocumentFragment.prototype.prepend = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nElement.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nDocumentType.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-before\n */\nCharacterData.prototype.before = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nElement.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nDocumentType.prototype.after = function(nodes) {};\n\n/**\n * @param {...(!Node|string)} nodes\n * @return {undefined}\n * @see https://dom.spec.whatwg.org/#dom-childnode-after\n */\nCharacterData.prototype.after = function(nodes) {};\n\n/**\n * @param {string} name\n * @param {boolean=} force\n * @return {boolean}\n * @throws {DOMException}\n * @see https://dom.spec.whatwg.org/#dom-element-toggleattribute\n */\nElement.prototype.toggleAttribute = function(name, force) {};\n\n/**\n * @type {Element}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534327(VS.85).aspx\n */\nNode.prototype.parentElement;\n\n/**\n * @param {string} name\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname-classnames-classnames\n */\nDocument.prototype.getElementsByClassName = function(name) {};\n\n/**\n * @param {string} classNames\n * @return {!HTMLCollection}\n * @nosideeffects\n * @see https://dom.spec.whatwg.org/#dom-element-getelementsbyclassname-classnames-classnames\n */\nElement.prototype.getElementsByClassName = function(classNames) {};\n', ++"externs/gecko_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n * W3C\'s DOM specification by Gecko. This file depends on\n * w3c_dom2.js.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n// Gecko DOM;\n\n/**\n * Mozilla only???\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSpanElement() {}\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Components_object\n */\nWindow.prototype.Components;\n\n/**\n * @type {Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.content\n */\nWindow.prototype.content;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.controllers */\nWindow.prototype.controllers;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.crypto */\nWindow.prototype.crypto;\n\n/**\n * Gets/sets the status bar text for the given window.\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.defaultStatus\n */\nWindow.prototype.defaultStatus;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.dialogArguments */\nWindow.prototype.dialogArguments;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.directories */\nWindow.prototype.directories;\n\n/**\n * @type {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.fullScreen\n */\nWindow.prototype.fullScreen;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/Storage#globalStorage\n */\nWindow.prototype.globalStorage;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.pkcs11 */\nWindow.prototype.pkcs11;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window */\nWindow.prototype.returnValue;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.scrollMaxX\n */\nWindow.prototype.scrollMaxX;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.scrollMaxY\n */\nWindow.prototype.scrollMaxY;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/Storage#sessionStorage */\nWindow.prototype.sessionStorage;\n\n/** @see https://developer.m0z111a.qjz9zk/en/DOM/window.sidebar */\nWindow.prototype.sidebar;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.back\n * @return {undefined}\n */\nWindow.prototype.back = function() {};\n\n/** @deprecated */\nWindow.prototype.captureEvents;\n\n/**@see https://developer.m0z111a.qjz9zk/en/DOM/window.find */\nWindow.prototype.find;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.forward\n * @return {undefined}\n */\nWindow.prototype.forward = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.getAttention\n * @return {undefined}\n */\nWindow.prototype.getAttention = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.home\n * @return {undefined}\n */\nWindow.prototype.home = function() {};\n\nWindow.prototype.openDialog;\nWindow.prototype.releaseEvents;\nWindow.prototype.scrollByLines;\nWindow.prototype.scrollByPages;\n\n/**\n * @param {string} uri\n * @param {?=} opt_arguments\n * @param {string=} opt_options\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.showModalDialog\n */\nWindow.prototype.showModalDialog;\n\nWindow.prototype.sizeToContent;\n\nWindow.prototype.updateCommands;\n\n// properties of Document\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.alinkColor\n * @type {string}\n */\nDocument.prototype.alinkColor;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.anchors\n * @type {HTMLCollection}\n */\nDocument.prototype.anchors;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.applets\n * @type {HTMLCollection}\n */\nDocument.prototype.applets;\n/** @type {?string} */ Document.prototype.baseURI;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.bgColor\n * @type {string}\n */\nDocument.prototype.bgColor;\n\n/** @type {HTMLBodyElement} */ Document.prototype.body;\nDocument.prototype.characterSet;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.compatMode\n * @type {string}\n */\nDocument.prototype.compatMode;\n\nDocument.prototype.contentType;\n/** @type {string} */ Document.prototype.cookie;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/defaultView\n * @type {?Window}\n */\nDocument.prototype.defaultView;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.designMode\n * @type {string}\n */\nDocument.prototype.designMode;\n\nDocument.prototype.documentURIObject;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.domain\n * @type {string}\n */\nDocument.prototype.domain;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.embeds\n * @type {HTMLCollection}\n */\nDocument.prototype.embeds;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.fgColor\n * @type {string}\n */\nDocument.prototype.fgColor;\n\n/** @type {Element} */ Document.prototype.firstChild;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.forms\n * @type {HTMLCollection}\n */\nDocument.prototype.forms;\n\n/** @type {HTMLCollection} */\nDocument.prototype.images;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.lastModified\n */\nDocument.prototype.lastModified;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.linkColor\n */\nDocument.prototype.linkColor;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.links\n * @type {HTMLCollection<(!HTMLAreaElement|!HTMLAnchorElement)>}\n */\nDocument.prototype.links;\n\n/**\n * @type {!Location}\n * @implicitCast\n */\nDocument.prototype.location;\n\nDocument.prototype.namespaceURI;\nDocument.prototype.nodePrincipal;\nDocument.prototype.plugins;\nDocument.prototype.popupNode;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.referrer\n */\nDocument.prototype.referrer;\n\n/**\n * @type {StyleSheetList}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.styleSheets\n */\nDocument.prototype.styleSheets;\n\n/** @type {?string} */ Document.prototype.title;\nDocument.prototype.tooltipNode;\n/** @type {string} */ Document.prototype.URL;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.vlinkColor\n */\nDocument.prototype.vlinkColor;\n\n/** @type {number} */ Document.prototype.width;\n\n// Methods of Document\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.clear\n * @return {undefined}\n */\nDocument.prototype.clear = function() {};\n\n/**\n * @param {string} type\n * @return {Event}\n */\nDocument.prototype.createEvent = function(type) {};\nDocument.prototype.createNSResolver;\n/** @return {Range} */ Document.prototype.createRange = function() {};\nDocument.prototype.createTreeWalker;\n\nDocument.prototype.evaluate;\n\n/**\n * @param {string} commandName\n * @param {?boolean=} opt_showUi\n * @param {*=} opt_value\n * @see https://developer.m0z111a.qjz9zk/en/Rich-Text_Editing_in_Mozilla#Executing_Commands\n */\nDocument.prototype.execCommand;\n\nDocument.prototype.loadOverlay;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536676(VS.85).aspx\n */\nDocument.prototype.queryCommandEnabled;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536678(VS.85).aspx\n */\nDocument.prototype.queryCommandIndeterm;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536679(VS.85).aspx\n */\nDocument.prototype.queryCommandState;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/document.queryCommandSupported\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536681(VS.85).aspx\n * @param {string} command\n * @return {?} Implementation-specific.\n */\nDocument.prototype.queryCommandSupported;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/Midas\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536683(VS.85).aspx\n */\nDocument.prototype.queryCommandValue;\n\nDocument.prototype.ononline;\nDocument.prototype.onoffline;\n\n// XUL\n/**\n * @see http://developer.m0z111a.qjz9zk/en/DOM/document.getBoxObjectFor\n * @return {BoxObject}\n * @nosideeffects\n */\nDocument.prototype.getBoxObjectFor = function(element) {};\n\n// From:\n// http://lxr.m0z111a.qjz9zk/mozilla1.8/source/dom/public/idl/range/nsIDOMNSRange.idl\n\n/**\n * @param {!TrustedHTML|string} tag\n * @return {DocumentFragment}\n */\nRange.prototype.createContextualFragment;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.isPointInRange;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.comparePoint;\n\n/**\n * @param {Node} n\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.intersectsNode;\n\n/**\n * @param {Node} n\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.compareNode;\n\n/**\n * @type {!NodeList}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/element.children\n */\nElement.prototype.children;\n\n/**\n * Firebug sets this property on elements it is inserting into the DOM.\n * @type {boolean}\n */\nElement.prototype.firebugIgnore;\n\n/**\n * Note: According to the spec, name is defined on specific types of\n * HTMLElements, rather than on Node, Element, or HTMLElement directly.\n * Ignore this.\n * @type {string}\n */\nElement.prototype.name;\n\nElement.prototype.nodePrincipal;\n\n/**\n * @type {!CSSStyleDeclaration}\n * This belongs on HTMLElement rather than Element, but that\n * breaks a lot.\n * TODO(rdcronin): Remove this declaration once the breakage is fixed.\n */\nElement.prototype.style;\n\n/**\n * @override\n * @return {!Element}\n */\nElement.prototype.cloneNode = function(deep) {};\n\n/** @return {undefined} */\nElement.prototype.click = function() {};\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionStart;\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionEnd;\n\n/**\n * @param {number} selectionStart\n * @param {number} selectionEnd\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setSelectionRange =\n function(selectionStart, selectionEnd) {};\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.buildID\n */\nNavigator.prototype.buildID;\n\n/**\n * @type {!Array|undefined}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.languages\n */\nNavigator.prototype.languages;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.oscpu\n */\nNavigator.prototype.oscpu;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.productSub\n */\nNavigator.prototype.productSub;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.securityPolicy\n */\nNavigator.prototype.securityPolicy;\n\n/**\n * @param {string} url\n * @param {ArrayBufferView|Blob|string|FormData=} opt_data\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/navigator.sendBeacon\n */\nNavigator.prototype.sendBeacon = function(url, opt_data) {};\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.vendor\n */\nNavigator.prototype.vendor;\n\n/**\n * @type {string}\n * @see https://developer.m0z111a.qjz9zk/en/Navigator.vendorSub\n */\nNavigator.prototype.vendorSub;\n\n\n/** @constructor */\nfunction BoxObject() {}\n\n/** @type {Element} */\nBoxObject.prototype.element;\n\n/** @type {number} */\nBoxObject.prototype.screenX;\n\n/** @type {number} */\nBoxObject.prototype.screenY;\n\n/** @type {number} */\nBoxObject.prototype.x;\n\n/** @type {number} */\nBoxObject.prototype.y;\n\n/** @type {number} */\nBoxObject.prototype.width;\n\n\n/**\n * @param {Element} element\n * @param {?string=} pseudoElt\n * @return {?CSSStyleDeclaration}\n * @nosideeffects\n * @see https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=548397\n */\nfunction getComputedStyle(element, pseudoElt) {}\n', ++"externs/ie_dom.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM specification by IE in JScript. This file depends on\n * w3c_dom2.js. The whole file has NOT been fully type annotated.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n// TODO(nicksantos): Rewrite all the DOM interfaces as interfaces, instead\n// of kludging them as an inheritance hierarchy.\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757878(VS.85).aspx\n */\nfunction XMLDOMDocument() {}\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms761398(VS.85).aspx\n */\nXMLDOMDocument.prototype.async;\n\n/**\n * @type {!Function}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762647(VS.85).aspx\n */\nXMLDOMDocument.prototype.ondataavailable;\n\n/**\n * @type {!Function}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms764640(VS.85).aspx\n */\nXMLDOMDocument.prototype.onreadystatechange;\n\n/**\n * @type {!Function}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms753795(VS.85).aspx\n */\nXMLDOMDocument.prototype.ontransformnode;\n\n/**\n * @type {Object}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms756041(VS.85).aspx\n */\nXMLDOMDocument.prototype.parseError;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms761353(VS.85).aspx\n */\nXMLDOMDocument.prototype.preserveWhiteSpace;\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms753702(VS.85).aspx\n */\nXMLDOMDocument.prototype.readyState;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762283(VS.85).aspx\n * @type {boolean}\n */\nXMLDOMDocument.prototype.resolveExternals;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms760290(v=vs.85).aspx\n * @param {string} name\n * @param {*} value\n * @return {undefined}\n */\nXMLDOMDocument.prototype.setProperty = function(name, value) {};\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms767669(VS.85).aspx\n */\nXMLDOMDocument.prototype.url;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762791(VS.85).aspx\n */\nXMLDOMDocument.prototype.validateOnParse;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms763830(VS.85).aspx\n * @return {undefined}\n */\nXMLDOMDocument.prototype.abort = function() {};\n\n/**\n * @param {*} type\n * @param {string} name\n * @param {string} namespaceURI\n * @return {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757901(VS.85).aspx\n * @nosideeffects\n */\nXMLDOMDocument.prototype.createNode = function(type, name, namespaceURI) {};\n\n/**\n * @param {string} xmlString\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms754585(VS.85).aspx\n * @override\n */\nXMLDOMDocument.prototype.loadXML = function(xmlString) {};\n\n/**\n * @param {string} id\n * @return {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms766397(VS.85).aspx\n */\nXMLDOMDocument.prototype.nodeFromID = function(id) {};\n\n//==============================================================================\n// XMLNode methods and properties\n// In a real DOM hierarchy, XMLDOMDocument inherits from XMLNode and Document.\n// Since we can't express that in our type system, we put XMLNode properties\n// on Node.\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms767570(VS.85).aspx\n */\nNode.prototype.baseName;\n\n/**\n * @type {?string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762763(VS.85).aspx\n */\nNode.prototype.dataType;\n\n/**\n * @type {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms764733(VS.85).aspx\n */\nNode.prototype.definition;\n\n/**\n * IE5 used document instead of ownerDocument.\n * Old versions of WebKit used document instead of contentDocument.\n * @type {Document}\n */\nNode.prototype.document;\n\n\n/**\n * Inserts the given HTML text into the element at the location.\n * @param {string} sWhere Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!TrustedHTML|string} sText HTML text to insert.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536452(VS.85).aspx\n * @return {undefined}\n */\nNode.prototype.insertAdjacentHTML = function(sWhere, sText) {};\n\n/**\n * @type {*}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762308(VS.85).aspx\n */\nNode.prototype.nodeTypedValue;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757895(VS.85).aspx\n */\nNode.prototype.nodeTypeString;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762237(VS.85).aspx\n */\nNode.prototype.parsed;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms753816(VS.85).aspx\n */\nNode.prototype.specified;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms762687(VS.85).aspx\n */\nNode.prototype.text;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms755989(VS.85).aspx\n */\nNode.prototype.xml;\n\n/**\n * @param {string} expression An XPath expression.\n * @return {!NodeList}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms754523(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectNodes = function(expression) {};\n\n/**\n * @param {string} expression An XPath expression.\n * @return {Node}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms757846(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectSingleNode = function(expression) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @return {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms761399(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.transformNode = function(stylesheet) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @param {Object} outputObject\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms766561(VS.85).aspx\n * @return {Object}\n */\nNode.prototype.transformNodeToObject =\n function(stylesheet, outputObject) {};\n\n//==============================================================================\n// Node methods\n\n/**\n * @param {boolean=} opt_bRemoveChildren Whether to remove the entire sub-tree.\n * Defaults to false.\n * @return {Node} The object that was removed.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536708(VS.85).aspx\n */\nNode.prototype.removeNode = function(opt_bRemoveChildren) {};\n\n/**\n * @constructor\n */\nfunction ClipboardData() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @param {string=} opt_type Type of clipboard data to clear. 'Text' or\n * 'URL' or 'File' or 'HTML' or 'Image'.\n * @return {undefined}\n */\nClipboardData.prototype.clearData = function(opt_type) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to set ('Text' or 'URL').\n * @param {string} data Data to set\n * @return {boolean} Whether the data were set correctly.\n */\nClipboardData.prototype.setData = function(type, data) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to get ('Text' or 'URL').\n * @return {string} The current data\n */\nClipboardData.prototype.getData = function(type) { };\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535220(VS.85).aspx\n * @type {ClipboardData}\n */\nWindow.prototype.clipboardData;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533724(VS.85).aspx\n */\nWindow.prototype.dialogHeight;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533725(VS.85).aspx\n */\nWindow.prototype.dialogLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533726(VS.85).aspx\n */\nWindow.prototype.dialogTop;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533727(VS.85).aspx\n */\nWindow.prototype.dialogWidth;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535863(VS.85).aspx\n */\nWindow.prototype.event;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197012(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPer1_0Server;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197013(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPerServer;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534198(VS.85).aspx\n */\nWindow.prototype.offscreenBuffering;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534389(VS.85).aspx\n * @type {number|undefined}\n */\nWindow.prototype.screenTop;\n\n// Functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536343(VS.85).aspx\n */\nWindow.prototype.attachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536392(VS.85).aspx\n */\nWindow.prototype.createPopup;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536411(VS.85).aspx\n */\nWindow.prototype.detachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536420(VS.85).aspx\n */\nWindow.prototype.execScript;\n\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536638(VS.85).aspx\n */\nWindow.prototype.navigate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536738(VS.85).aspx\n */\nWindow.prototype.setActive;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536758(VS.85).aspx\n */\nWindow.prototype.showHelp;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536761(VS.85).aspx\n */\nWindow.prototype.showModelessDialog;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535246%28v=vs.85%29.aspx\n * @const {!Object}\n */\nWindow.prototype.external;\n\n/**\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/ie/dn265046(v=vs.94)\n * @const {!Object}\n */\nWindow.prototype.msCrypto;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLFrameElement.prototype.allowTransparency;\n\n/**\n * @type {Window}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533692(VS.85).aspx\n */\nHTMLFrameElement.prototype.contentWindow;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLIFrameElement.prototype.allowTransparency;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536385(VS.85).aspx\n */\nHTMLBodyElement.prototype.createControlRange;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLScriptElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLIFrameElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLImageElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLObjectElement.prototype.readyState;\n\n\n/**\n * @constructor\n */\nfunction ControlRange() {}\n\nControlRange.prototype.add;\nControlRange.prototype.addElement;\nControlRange.prototype.execCommand;\nControlRange.prototype.item;\nControlRange.prototype.queryCommandEnabled;\nControlRange.prototype.queryCommandIndeterm;\nControlRange.prototype.queryCommandState;\nControlRange.prototype.queryCommandSupported;\nControlRange.prototype.queryCommandValue;\nControlRange.prototype.remove;\nControlRange.prototype.scrollIntoView;\nControlRange.prototype.select;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535872.aspx\n */\nfunction TextRange() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533538(VS.85).aspx\n */\nTextRange.prototype.boundingHeight;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533539(VS.85).aspx\n */\nTextRange.prototype.boundingLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533540(VS.85).aspx\n */\nTextRange.prototype.boundingTop;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533541(VS.85).aspx\n */\nTextRange.prototype.boundingWidth;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533874(VS.85).aspx\n */\nTextRange.prototype.htmlText;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534200(VS.85).aspx\n */\nTextRange.prototype.offsetLeft;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534303(VS.85).aspx\n */\nTextRange.prototype.offsetTop;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534676(VS.85).aspx\n */\nTextRange.prototype.text;\n\n/**\n * @param {boolean=} opt_toStart\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536371(VS.85).aspx\n */\nTextRange.prototype.collapse;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536373(VS.85).aspx\n */\nTextRange.prototype.compareEndPoints;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536416(VS.85).aspx\n */\nTextRange.prototype.duplicate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536419(VS.85).aspx\n */\nTextRange.prototype.execCommand;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536421(VS.85).aspx\n */\nTextRange.prototype.expand;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536422(VS.85).aspx\n */\nTextRange.prototype.findText;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536432(VS.85).aspx\n */\nTextRange.prototype.getBookmark;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536433(VS.85).aspx\n */\nTextRange.prototype.getBoundingClientRect;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536435(VS.85).aspx\n */\nTextRange.prototype.getClientRects;\n\n/**\n * @param {TextRange|ControlRange} range\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536450(VS.85).aspx\n */\nTextRange.prototype.inRange;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536458(VS.85).aspx\n */\nTextRange.prototype.isEqual;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536616(VS.85).aspx\n */\nTextRange.prototype.move;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536620(VS.85).aspx\n */\nTextRange.prototype.moveEnd;\n\n/**\n * @param {string} unit\n * @param {number=} opt_count\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536623(VS.85).aspx\n */\nTextRange.prototype.moveStart;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536628(VS.85).aspx\n */\nTextRange.prototype.moveToBookmark;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536630(VS.85).aspx\n */\nTextRange.prototype.moveToElementText;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536632(VS.85).aspx\n */\nTextRange.prototype.moveToPoint;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536654(VS.85).aspx\n * @return {?Element}\n */\nTextRange.prototype.parentElement;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536656(VS.85).aspx\n */\nTextRange.prototype.pasteHTML;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536676(VS.85).aspx\n */\nTextRange.prototype.queryCommandEnabled;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536678(VS.85).aspx\n */\nTextRange.prototype.queryCommandIndeterm;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536679(VS.85).aspx\n */\nTextRange.prototype.queryCommandState;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536681(VS.85).aspx\n */\nTextRange.prototype.queryCommandSupported;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536683(VS.85).aspx\n */\nTextRange.prototype.queryCommandValue;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536730(VS.85).aspx\n */\nTextRange.prototype.scrollIntoView;\n\n/**\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536735(VS.85).aspx\n */\nTextRange.prototype.select = function() {};\n\n/**\n * @param {string} how\n * @param {TextRange|ControlRange} sourceRange\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536745(VS.85).aspx\n */\nTextRange.prototype.setEndPoint;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537447(VS.85).aspx\n */\nfunction controlRange() {}\n\n\nDocument.prototype.loadXML;\n\n\n// http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531073(VS.85).aspx\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533553(VS.85).aspx\n */\nDocument.prototype.charset;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533693(VS.85).aspx\n */\nDocument.prototype.cookie;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533731(VS.85).aspx\n */\nDocument.prototype.dir;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc196988(VS.85).aspx\n */\nDocument.prototype.documentMode;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533747(VS.85).aspx\n */\nDocument.prototype.expando;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533750(VS.85).aspx\n */\nDocument.prototype.fileCreatedDate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533751(VS.85).aspx\n */\nDocument.prototype.fileModifiedDate;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533752(VS.85).aspx\n */\nDocument.prototype.fileSize;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534331(VS.85).aspx\n * @type {?Window}\n */\nDocument.prototype.parentWindow;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534353(VS.85).aspx\n */\nDocument.prototype.protocol;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534359(VS.85).aspx\n */\nHTMLDocument.prototype.readyState;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534704(VS.85).aspx\n */\nDocument.prototype.uniqueID;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534709(VS.85).aspx\n */\nDocument.prototype.URLUnencoded;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535155(VS.85).aspx\n */\nDocument.prototype.XMLDocument;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535163(VS.85).aspx\n */\nDocument.prototype.XSLDocument;\n\n// functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536343(VS.85).aspx\n */\nDocument.prototype.attachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536390(VS.85).aspx\n */\nDocument.prototype.createEventObject;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531194(VS.85).aspx\n */\nDocument.prototype.createStyleSheet;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536411(VS.85).aspx\n */\nDocument.prototype.detachEvent;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536425(VS.85).aspx\n */\nDocument.prototype.focus;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536614(VS.85).aspx\n */\nDocument.prototype.mergeAttributes;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536685(VS.85).aspx\n */\nDocument.prototype.recalc;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536689(VS.85).aspx\n */\nDocument.prototype.releaseCapture;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536738(VS.85).aspx\n */\nDocument.prototype.setActive;\n\n\n// collections\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537434(VS.85).aspx\n */\nDocument.prototype.all;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537445(VS.85).aspx\n */\nDocument.prototype.childNodes;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537459(VS.85).aspx\n */\nDocument.prototype.frames;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537470(VS.85).aspx\n */\nDocument.prototype.namespaces;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537487(VS.85).aspx\n * @type {!HTMLCollection}\n */\nDocument.prototype.scripts;\n\n/**\n * @param {string} sUrl\n * @return {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535922(VS.85).aspx\n */\nElement.prototype.addBehavior = function(sUrl) {};\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/mm536343(v=vs.85).aspx\n */\nElement.prototype.attachEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533546(VS.85).aspx\n */\nElement.prototype.canHaveChildren;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533559(v=vs.85).aspx\n */\nElement.prototype.classid;\n\n/**\n * @param {number} iCoordX Integer that specifies the client window coordinate\n * of x.\n * @param {number} iCoordY Integer that specifies the client window coordinate\n * of y.\n * @return {string} The component of an element located at the specified\n * coordinates.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536375(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.componentFromPoint = function(iCoordX, iCoordY) {};\n\n\n/**\n * TODO(tjgq): Make this string once existing usages have been migrated.\n * @type {string|boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533690(VS.85).aspx\n */\nElement.prototype.contentEditable;\n\n/**\n * @return {TextRange}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536401(VS.85).aspx\n */\nElement.prototype.createTextRange;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535231(VS.85).aspx\n * @type {?CSSStyleDeclaration}\n */\nElement.prototype.currentStyle;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms536411(v=vs.85).aspx\n */\nElement.prototype.detachEvent;\n\n/**\n * @param {string=} opt_action\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536414%28VS.85%29.aspx\n * @return {undefined}\n */\nElement.prototype.doScroll = function(opt_action) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536423(VS.85).aspx\n */\nElement.prototype.fireEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533783(VS.85).aspx\n */\nElement.prototype.hideFocus;\n\n/**\n * @type {string}\n * @implicitCast\n *\n * TODO(lharker): remove the @implicitCast to enforce assigning an explicit\n * string to innerText instead of relying on coercion.\n *\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533899.aspx\n */\nElement.prototype.innerText;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537838(VS.85).aspx\n */\nElement.prototype.isContentEditable;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531395(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with subclasses.\n */\nElement.prototype.load;\n\n/**\n * @param {number} pointerId Id of the pointer that is assign to the element.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh771882(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.msSetPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh771880.aspx\n * @return {undefined}\n */\nElement.prototype.msReleasePointerCapture = function(pointerId) {};\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536903(v=vs.85).aspx\n */\nElement.prototype.onbeforedeactivate;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536945(VS.85).aspx\n */\nElement.prototype.onmouseenter;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536946(VS.85).aspx\n */\nElement.prototype.onmouseleave;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536689(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.releaseCapture = function() {};\n\n/**\n * @param {number} iID\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536700(VS.85).aspx\n */\nElement.prototype.removeBehavior = function(iID) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa703996(VS.85).aspx\n */\nElement.prototype.runtimeStyle;\n\n/**\n * @param {string} sStoreName The arbitrary name assigned to a persistent object\n * in a UserData store.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531403(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.save = function(sStoreName) {};\n\n/**\n * @param {boolean=} opt_bContainerCapture Events originating in a container are\n * captured by the container. Defaults to true.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536742(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.setCapture = function(opt_bContainerCapture) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534635(VS.85).aspx\n */\nElement.prototype.sourceIndex;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537840.aspx\n */\nElement.prototype.unselectable;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa752462(v=vs.85).aspx\n */\nfunction HTMLFiltersCollection() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa752463(v=vs.85).aspx\n * @type {number}\n */\nHTMLFiltersCollection.prototype.length;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms537452(v=vs.85).aspx\n * @type {HTMLFiltersCollection}\n */\nElement.prototype.filters;\n\n/**\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532853(v=vs.85).aspx\n */\nfunction HTMLFilter() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532954(v=vs.85).aspx\n * @return {undefined}\n */\nHTMLFilter.prototype.apply = function() {};\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532967(v=vs.85).aspx\n */\nfunction AlphaFilter() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532910(v=vs.85).aspx\n * @type {number}\n */\nAlphaFilter.prototype.Opacity;\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532969(v=vs.85).aspx\n */\nfunction AlphaImageLoaderFilter() {}\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms532920(v=vs.85).aspx\n * @type {string}\n */\nAlphaImageLoaderFilter.prototype.sizingMethod;\n\n// For IE, returns an object representing key-value pairs for all the global\n// variables prefixed with str, e.g. test*\n\n/** @param {*=} opt_str\n */\nfunction RuntimeObject(opt_str) {}\n\n\n/**\n * @type {StyleSheet}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/dd347030(VS.85).aspx\n */\nHTMLStyleElement.prototype.styleSheet;\n\n\n/**\n * IE implements Cross Origin Resource Sharing (cross-domain XMLHttpRequests)\n * via the XDomainRequest object.\n *\n * @constructor\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288060(v=vs.85).aspx\n * @see http://www.w3.org/TR/cors/\n */\nfunction XDomainRequest() {}\n\n/**\n * Aborts the request.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288129(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.abort = function() {};\n\n/**\n * Sets the method and URL for the request.\n * @param {string} bstrMethod Either \"GET\" or \"POST\"\n * @param {string} bstrUrl The target URL\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288168(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.open = function(bstrMethod, bstrUrl) {};\n\n/**\n * Sends the request.\n * @param {string=} varBody The POST body to send to the server. If omitted,\n * the behavior is identical to sending an empty string.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc288207(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.send = function(varBody) {};\n\n/**\n * Called if the request could not be completed. Note that error information is\n * not available.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536930%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onerror;\n\n/**\n * Called when the response has finished.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536942%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onload;\n\n/**\n * Called every time part of the response has been received.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197058%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onprogress;\n\n/**\n * Called if the timeout period has elapsed.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc197061%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.ontimeout;\n\n/**\n * The current response body.\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/cc287956%28v=VS.85%29.aspx\n * @type {string}\n */\nXDomainRequest.prototype.responseText;\n\n/**\n * The timeout (in milliseconds) for the request.\n * @type {number}\n */\nXDomainRequest.prototype.timeout;\n\n/**\n * The Content-Type of the response, or an empty string.\n * @type {string}\n */\nXDomainRequest.prototype.contentType;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533542(v=vs.85).aspx\n */\nNavigator.prototype.browserLanguage;\n\n/**\n * @type {number}\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh772144(v=vs.85).aspx\n */\nNavigator.prototype.msMaxTouchPoints;\n\n/**\n * @type {boolean}\n * @see http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx\n */\nNavigator.prototype.msPointerEnabled;\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/library/hh772331(v=vs.85).aspx\n */\nNavigator.prototype.msSaveBlob = function(blob, opt_defaultName) {};\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.m1cr050ft.qjz9zk/en-us/library/hh772332(v=vs.85).aspx\n */\nNavigator.prototype.msSaveOrOpenBlob = function(blob, opt_defaultName) {};\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533721(v=vs.85).aspx\n */\nScreen.prototype.deviceXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534128%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534130%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalYDPI;\n", ++"externs/webkit_dom.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C\'s DOM\n * specification by WebKit. This file depends on w3c_dom2.js.\n * All the provided definitions has been type annotated\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/**\n * @param {boolean=} opt_center\n * @see https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=403510\n * @return {undefined}\n */\nElement.prototype.scrollIntoViewIfNeeded = function(opt_center) {};\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfileNode.idl\n */\nfunction ScriptProfileNode() {};\n\n/** @type {string} */\nScriptProfileNode.prototype.functionName;\n\n/** @type {string} */\nScriptProfileNode.prototype.url;\n\n/** @type {number} */\nScriptProfileNode.prototype.lineNumber;\n\n/** @type {number} */\nScriptProfileNode.prototype.totalTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.selfTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.numberOfCalls;\n\n/** @type {Array} */\nScriptProfileNode.prototype.children;\n\n/** @type {boolean} */\nScriptProfileNode.prototype.visible;\n\n/** @type {number} */\nScriptProfileNode.prototype.callUID;\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfile.idl\n */\nfunction ScriptProfile() {};\n\n/** @type {string} */\nScriptProfile.prototype.title;\n\n/** @type {number} */\nScriptProfile.prototype.uid;\n\n/** @type {ScriptProfileNode} */\nScriptProfile.prototype.head;\n\n/**\n * @type {number}\n * @see http://developer.8n6r01d.qjz9zk/reference/android/webkit/WebView.html\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {string} contextId\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @return {undefined}\n */\nDocument.prototype.getCSSCanvasContext =\n function(contextId, name, width, height) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Range}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/caretRangeFromPoint\n */\nDocument.prototype.caretRangeFromPoint = function(x, y) {};\n\n/**\n * @return {!Promise}\n * @nosideeffects\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n */\nDocument.prototype.hasStorageAccess = function() {};\n\n/**\n * @return {!Promise}\n * @see https://webkit.org/blog/8124/introducing-storage-access-api\n * @see https://developer.m0z111a.qjz9zk/docs/Web/API/Document/requestStorageAccess#Syntax\n */\nDocument.prototype.requestStorageAccess = function() {};\n', ++"externs/w3c_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's CSS specification\n * The whole file has been fully type annotated.\n * http://www.w3.org/TR/DOM-Level-2-Style/css.html\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n *\n * TODO(nicksantos): When there are no more occurrences of w3c_range.js and\n * gecko_dom.js being included directly in BUILD files, bug dbeam to split the\n * bottom part of this file into a separate externs.\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet\n */\nfunction StyleSheet() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-type\n */\nStyleSheet.prototype.type;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-disabled\n */\nStyleSheet.prototype.disabled;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-owner\n */\nStyleSheet.prototype.ownerNode;\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-parentStyleSheet\n */\nStyleSheet.prototype.parentStyleSheet;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-href\n */\nStyleSheet.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-title\n */\nStyleSheet.prototype.title;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-media\n */\nStyleSheet.prototype.media;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList\n */\nfunction StyleSheetList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-length\n */\nStyleSheetList.prototype.length;\n\n/**\n * @param {number} index\n * @return {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-item\n */\nStyleSheetList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList\n */\nfunction MediaList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-mediaText\n */\nMediaList.prototype.mediaText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-length\n */\nMediaList.prototype.length;\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-item\n */\nMediaList.prototype.item = function(index) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle\n */\nfunction LinkStyle() {}\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle-sheet\n */\nLinkStyle.prototype.sheet;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle\n */\nfunction DocumentStyle() {}\n\n/**\n * @type {StyleSheetList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle-styleSheets\n */\nDocumentStyle.prototype.styleSheets;\n\n/**\n * @constructor\n * @extends {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet\n */\nfunction CSSStyleSheet() {}\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-ownerRule\n */\nCSSStyleSheet.prototype.ownerRule;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-cssRules\n */\nCSSStyleSheet.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-insertRule\n */\nCSSStyleSheet.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-deleteRule\n * @return {undefined}\n */\nCSSStyleSheet.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList\n */\nfunction CSSRuleList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-length\n */\nCSSRuleList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-item\n */\nCSSRuleList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\n */\nfunction CSSRule() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-cssText\n */\nCSSRule.prototype.cssText;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-sheet\n */\nCSSRule.prototype.parentStyleSheet;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-parentRule\n */\nCSSRule.prototype.parentRule;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nCSSRule.prototype.style;\n\n/**\n * Indicates that the rule is a {@see CSSUnknownRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.UNKNOWN_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSStyleRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.STYLE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSCharsetRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.CHARSET_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSImportRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.IMPORT_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSMediaRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.MEDIA_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSFontFaceRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.FONT_FACE_RULE;\n\n/**\n * Indicates that the rule is a {@see CSSPageRule}.\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.PAGE_RULE;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nfunction CSSStyleRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-selectorText\n */\nCSSStyleRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-style\n */\nCSSStyleRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\n */\nfunction CSSMediaRule() {}\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-mediaTypes\n */\nCSSMediaRule.prototype.media;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\n */\nCSSMediaRule.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-insertRule\n */\nCSSMediaRule.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-deleteRule\n * @return {undefined}\n */\nCSSMediaRule.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule\n */\nfunction CSSFontFaceRule() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule-style\n */\nCSSFontFaceRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule\n */\nfunction CSSPageRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-name\n */\nCSSPageRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-style\n */\nCSSPageRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule\n */\nfunction CSSImportRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-href\n */\nCSSImportRule.prototype.href;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-media\n */\nCSSImportRule.prototype.media;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-styleSheet\n */\nCSSImportRule.prototype.styleSheet;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule\n */\nfunction CSSCharsetRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule-encoding\n */\nCSSCharsetRule.prototype.encoding;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSUnknownRule\n */\nfunction CSSUnknownRule() {}\n\n/**\n * @constructor\n * @extends {CSSProperties}\n * @implements {IObject<(string|number), string>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration\n */\nfunction CSSStyleDeclaration() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-cssText\n */\nCSSStyleDeclaration.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-length\n */\nCSSStyleDeclaration.prototype.length;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-parentRule\n */\nCSSStyleDeclaration.prototype.parentRule;\n\n/**\n * @param {string} propertyName\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyCSSValue\n */\nCSSStyleDeclaration.prototype.getPropertyCSSValue = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyPriority\n */\nCSSStyleDeclaration.prototype.getPropertyPriority = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue\n */\nCSSStyleDeclaration.prototype.getPropertyValue = function(propertyName) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-item\n */\nCSSStyleDeclaration.prototype.item = function(index) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty\n */\nCSSStyleDeclaration.prototype.removeProperty = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @param {string} value\n * @param {string=} opt_priority\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty\n */\nCSSStyleDeclaration.prototype.setProperty = function(propertyName, value, opt_priority) {};\n\n// IE-specific\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {string|number|boolean|null}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536429(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getAttribute = function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {string|number|boolean|null}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358797(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getExpression = function(name) {};\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536696(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeAttribute =\n function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358798(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeExpression = function(name) {};\n\n/**\n * @deprecated\n * @param {string} name\n * @param {*} value\n * @param {number=} opt_flags\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms536739(VS.85).aspx\n * @return {undefined}\n */\nCSSStyleDeclaration.prototype.setAttribute = function(name, value, opt_flags) {};\n\n/**\n * @param {string} name\n * @param {string} expr\n * @param {string=} opt_language\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531196(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.setExpression =\n function(name, expr, opt_language) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\n */\nfunction CSSValue() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssText\n */\nCSSValue.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssValueType\n */\nCSSValue.prototype.cssValueType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_INHERIT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_PRIMITIVE_VALUE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_VALUE_LIST;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_CUSTOM;\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nfunction CSSPrimitiveValue() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.prototype.primitiveType;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_UNKNOWN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_NUMBER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PERCENTAGE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EMS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EXS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PX;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_CM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MM;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IN;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PC;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DEG;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_GRAD;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MS;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_S;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_HZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_KHZ;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DIMENSION;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_STRING;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_URI;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IDENT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_ATTR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_COUNTER;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RECT;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RGBCOLOR;\n\n/**\n * @return {Counter}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getCounterValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getCounterValue = function() {};\n\n/**\n * @param {number} unitType\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getFloatValue = function(unitType) {};\n\n/**\n * @return {RGBColor}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRGBColorValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRGBColorValue = function() {};\n\n/**\n * @return {Rect}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRectValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRectValue = function() {};\n\n/**\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getStringValue = function() {};\n\n/**\n * @param {number} unitType\n * @param {number} floatValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setFloatValue = function(unitType, floatValue) {};\n\n/**\n * @param {number} stringType\n * @param {string} stringValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n * {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setStringValue = function(stringType, stringValue) {};\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList\n */\nfunction CSSValueList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-length\n */\nCSSValueList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-item\n */\nCSSValueList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor\n */\nfunction RGBColor() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-red\n */\nRGBColor.prototype.red;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-green\n */\nRGBColor.prototype.green;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-blue\n */\nRGBColor.prototype.blue;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect\n */\nfunction Rect() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-top\n */\nRect.prototype.top;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-right\n */\nRect.prototype.right;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-bottom\n */\nRect.prototype.bottom;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-left\n */\nRect.prototype.left;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter\n */\nfunction Counter() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-identifier\n */\nCounter.prototype.identifier;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-listStyle\n */\nCounter.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-separator\n */\nCounter.prototype.separator;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ViewCSS\n */\nfunction ViewCSS() {}\n\n/**\n * @param {Element} elt\n * @param {?string=} opt_pseudoElt This argument is required according to the\n * CSS2 specification, but optional in all major browsers. See the note at\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window.getComputedStyle\n * @return {?CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSview-getComputedStyle\n * @see https://bugzilla.m0z111a.qjz9zk/show_bug.cgi?id=548397\n */\nViewCSS.prototype.getComputedStyle = function(elt, opt_pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS\n */\nfunction DocumentCSS() {}\n\n/**\n * @param {Element} elt\n * @param {string} pseudoElt\n * @return {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS-getOverrideStyle\n */\nDocumentCSS.prototype.getOverrideStyle = function(elt, pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS\n */\nfunction DOMImplementationCSS() {}\n\n/**\n * @param {string} title\n * @param {string} media\n * @return {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS-createCSSStyleSheet\n * @throws DOMException {@see DomException.SYNTAX_ERR}\n */\nDOMImplementationCSS.prototype.createCSSStyleSheet = function(title, media) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nfunction ElementCSSInlineStyle() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle-style\n */\nElementCSSInlineStyle.prototype.style;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties\n */\nfunction CSSProperties() {}\n\n// CSS 2 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-azimuth\n */\nCSSProperties.prototype.azimuth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-background\n */\nCSSProperties.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundAttachment\n */\nCSSProperties.prototype.backgroundAttachment;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundColor\n */\nCSSProperties.prototype.backgroundColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundImage\n */\nCSSProperties.prototype.backgroundImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundPosition\n */\nCSSProperties.prototype.backgroundPosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundRepeat\n */\nCSSProperties.prototype.backgroundRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-background-size\n */\nCSSProperties.prototype.backgroundSize;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-border\n */\nCSSProperties.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderCollapse\n */\nCSSProperties.prototype.borderCollapse;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderColor\n */\nCSSProperties.prototype.borderColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderSpacing\n */\nCSSProperties.prototype.borderSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-borderStyle\n */\nCSSProperties.prototype.borderStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTop\n */\nCSSProperties.prototype.borderTop;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRight\n */\nCSSProperties.prototype.borderRight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottom\n */\nCSSProperties.prototype.borderBottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeft\n */\nCSSProperties.prototype.borderLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopColor\n */\nCSSProperties.prototype.borderTopColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightColor\n */\nCSSProperties.prototype.borderRightColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomColor\n */\nCSSProperties.prototype.borderBottomColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftColor\n */\nCSSProperties.prototype.borderLeftColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopStyle\n */\nCSSProperties.prototype.borderTopStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightStyle\n */\nCSSProperties.prototype.borderRightStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomStyle\n */\nCSSProperties.prototype.borderBottomStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftStyle\n */\nCSSProperties.prototype.borderLeftStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopWidth\n */\nCSSProperties.prototype.borderTopWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightWidth\n */\nCSSProperties.prototype.borderRightWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomWidth\n */\nCSSProperties.prototype.borderBottomWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftWidth\n */\nCSSProperties.prototype.borderLeftWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderWidth\n */\nCSSProperties.prototype.borderWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomRightRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopRightRadius;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-source\n */\nCSSProperties.prototype.borderImageSource;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-slice\n */\nCSSProperties.prototype.borderImageSlice;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-width\n */\nCSSProperties.prototype.borderImageWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-outset\n */\nCSSProperties.prototype.borderImageOutset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-repeat\n */\nCSSProperties.prototype.borderImageRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image\n */\nCSSProperties.prototype.borderImage;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-bottom\n */\nCSSProperties.prototype.bottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-captionSide\n */\nCSSProperties.prototype.captionSide;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clear\n */\nCSSProperties.prototype.clear;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clip\n */\nCSSProperties.prototype.clip;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-color\n */\nCSSProperties.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-content\n */\nCSSProperties.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterIncrement\n */\nCSSProperties.prototype.counterIncrement;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterReset\n */\nCSSProperties.prototype.counterReset;\n\n/**\n * This is not an official part of the W3C spec. In practice, this is a settable\n * property that works cross-browser. It is used in goog.dom.setProperties() and\n * needs to be extern'd so the --disambiguate_properties JS compiler pass works.\n * @type {string}\n */\nCSSProperties.prototype.cssText;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cue\n */\nCSSProperties.prototype.cue;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueAfter\n */\nCSSProperties.prototype.cueAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueBefore\n */\nCSSProperties.prototype.cueBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cursor\n */\nCSSProperties.prototype.cursor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-direction\n */\nCSSProperties.prototype.direction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-display\n */\nCSSProperties.prototype.display;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-elevation\n */\nCSSProperties.prototype.elevation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-emptyCells\n */\nCSSProperties.prototype.emptyCells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cssFloat\n */\nCSSProperties.prototype.cssFloat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-font\n */\nCSSProperties.prototype.font;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontFamily\n */\nCSSProperties.prototype.fontFamily;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSize\n */\nCSSProperties.prototype.fontSize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSizeAdjust\n */\nCSSProperties.prototype.fontSizeAdjust;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStretch\n */\nCSSProperties.prototype.fontStretch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStyle\n */\nCSSProperties.prototype.fontStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontVariant\n */\nCSSProperties.prototype.fontVariant;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontWeight\n */\nCSSProperties.prototype.fontWeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-height\n */\nCSSProperties.prototype.height;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-left\n */\nCSSProperties.prototype.left;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-letterSpacing\n */\nCSSProperties.prototype.letterSpacing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-lineHeight\n */\nCSSProperties.prototype.lineHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyle\n */\nCSSProperties.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleImage\n */\nCSSProperties.prototype.listStyleImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStylePosition\n */\nCSSProperties.prototype.listStylePosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleType\n */\nCSSProperties.prototype.listStyleType;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-margin\n */\nCSSProperties.prototype.margin;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginTop\n */\nCSSProperties.prototype.marginTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginRight\n */\nCSSProperties.prototype.marginRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginBottom\n */\nCSSProperties.prototype.marginBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginLeft\n */\nCSSProperties.prototype.marginLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-markerOffset\n */\nCSSProperties.prototype.markerOffset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marks\n */\nCSSProperties.prototype.marks;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxHeight\n */\nCSSProperties.prototype.maxHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxWidth\n */\nCSSProperties.prototype.maxWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minHeight\n */\nCSSProperties.prototype.minHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minWidth\n */\nCSSProperties.prototype.minWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-orphans\n */\nCSSProperties.prototype.orphans;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outline\n */\nCSSProperties.prototype.outline;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineColor\n */\nCSSProperties.prototype.outlineColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineStyle\n */\nCSSProperties.prototype.outlineStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineWidth\n */\nCSSProperties.prototype.outlineWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-overflow\n */\nCSSProperties.prototype.overflow;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-padding\n */\nCSSProperties.prototype.padding;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingTop\n */\nCSSProperties.prototype.paddingTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingRight\n */\nCSSProperties.prototype.paddingRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingBottom\n */\nCSSProperties.prototype.paddingBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingLeft\n */\nCSSProperties.prototype.paddingLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-page\n */\nCSSProperties.prototype.page;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakAfter\n */\nCSSProperties.prototype.pageBreakAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakBefore\n */\nCSSProperties.prototype.pageBreakBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakInside\n */\nCSSProperties.prototype.pageBreakInside;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pause\n */\nCSSProperties.prototype.pause;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseAfter\n */\nCSSProperties.prototype.pauseAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseBefore\n */\nCSSProperties.prototype.pauseBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitch\n */\nCSSProperties.prototype.pitch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitchRange\n */\nCSSProperties.prototype.pitchRange;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-playDuring\n */\nCSSProperties.prototype.playDuring;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-position\n */\nCSSProperties.prototype.position;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-quotes\n */\nCSSProperties.prototype.quotes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#resize\n */\nCSSProperties.prototype.resize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-richness\n */\nCSSProperties.prototype.richness;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-right\n */\nCSSProperties.prototype.right;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-size\n */\nCSSProperties.prototype.size;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speak\n */\nCSSProperties.prototype.speak;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakHeader\n */\nCSSProperties.prototype.speakHeader;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakNumeral\n */\nCSSProperties.prototype.speakNumeral;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakPunctuation\n */\nCSSProperties.prototype.speakPunctuation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speechRate\n */\nCSSProperties.prototype.speechRate;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-stress\n */\nCSSProperties.prototype.stress;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-tableLayout\n */\nCSSProperties.prototype.tableLayout;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textAlign\n */\nCSSProperties.prototype.textAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textDecoration\n */\nCSSProperties.prototype.textDecoration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textIndent\n */\nCSSProperties.prototype.textIndent;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textShadow\n */\nCSSProperties.prototype.textShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textTransform\n */\nCSSProperties.prototype.textTransform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-top\n */\nCSSProperties.prototype.top;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-unicodeBidi\n */\nCSSProperties.prototype.unicodeBidi;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-verticalAlign\n */\nCSSProperties.prototype.verticalAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-visibility\n */\nCSSProperties.prototype.visibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-voiceFamily\n */\nCSSProperties.prototype.voiceFamily;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-volume\n */\nCSSProperties.prototype.volume;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-whiteSpace\n */\nCSSProperties.prototype.whiteSpace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-widows\n */\nCSSProperties.prototype.widows;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-width\n */\nCSSProperties.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordSpacing\n */\nCSSProperties.prototype.wordSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordWrap\n */\nCSSProperties.prototype.wordWrap;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-zIndex\n */\nCSSProperties.prototype.zIndex;\n\n// CSS 3 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#box-shadow\n */\nCSSProperties.prototype.boxShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#box-sizing\n */\nCSSProperties.prototype.boxSizing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-color/#transparency\n */\nCSSProperties.prototype.opacity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#text-overflow\n */\nCSSProperties.prototype.textOverflow;\n\n// CSS 3 animations\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation\n */\nCSSProperties.prototype.animation;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-delay\n */\nCSSProperties.prototype.animationDelay;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-direction\n */\nCSSProperties.prototype.animationDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-duration\n */\nCSSProperties.prototype.animationDuration;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-fill-mode\n */\nCSSProperties.prototype.animationFillMode;\n\n/**\n * @type {string|number}\n * @see https://www.w3.org/TR/css-animations-1/#animation-iteration-count\n */\nCSSProperties.prototype.animationIterationCount;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-name\n */\nCSSProperties.prototype.animationName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-play-state\n */\nCSSProperties.prototype.animationPlayState;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-animations-1/#animation-timing-function\n */\nCSSProperties.prototype.animationTimingFunction;\n\n// CSS 3 transforms\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#backface-visibility-property\n */\nCSSProperties.prototype.backfaceVisibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective\n */\nCSSProperties.prototype.perspective;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective-origin\n */\nCSSProperties.prototype.perspectiveOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#effects\n */\nCSSProperties.prototype.transform;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-origin\n */\nCSSProperties.prototype.transformOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-style\n */\nCSSProperties.prototype.transformStyle;\n\n// CSS 3 transitions\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition\n */\nCSSProperties.prototype.transition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-delay\n */\nCSSProperties.prototype.transitionDelay;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-duration\n */\nCSSProperties.prototype.transitionDuration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-property-property\n */\nCSSProperties.prototype.transitionProperty;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-timing-function\n */\nCSSProperties.prototype.transitionTimingFunction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/SVG11/interact.html#PointerEventsProperty\n */\nCSSProperties.prototype.pointerEvents;\n\n\n// CSS Flexbox 1\n\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-content-property\n */\nCSSProperties.prototype.alignContent;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignItems;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignSelf;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-property\n */\nCSSProperties.prototype.flex;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-basis-property\n */\nCSSProperties.prototype.flexBasis;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-direction-property\n */\nCSSProperties.prototype.flexDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-flow-property\n */\nCSSProperties.prototype.flexFlow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-grow-property\n */\nCSSProperties.prototype.flexGrow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-shrink-property\n */\nCSSProperties.prototype.flexShrink;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-wrap-property\n */\nCSSProperties.prototype.flexWrap;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#justify-content-property\n */\nCSSProperties.prototype.justifyContent;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#order-property\n */\nCSSProperties.prototype.order;\n\n// Externs for CSS Will Change Module Level 1\n// http://www.w3.org/TR/css-will-change/\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css-will-change-1/#will-change\n */\nCSSProperties.prototype.willChange;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-ui-4/#propdef-user-select\n */\nCSSProperties.prototype.userSelect;\n\n// CSS 3 Images\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#the-object-fit\n */\nCSSProperties.prototype.objectFit;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css3-images/#object-position\n */\nCSSProperties.prototype.objectPosition;\n\n// CSS Masking\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-masking-1/\n */\nCSSProperties.prototype.clipPath;\n\n// CSS Containment\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-contain-1/\n */\nCSSProperties.prototype.contain;\n\n/**\n * TODO(dbeam): Put this in separate file named w3c_cssom.js.\n * Externs for the CSSOM View Module.\n * @see http://www.w3.org/TR/cssom-view/\n */\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface\n\n/**\n * @param {string} media_query_list\n * @return {!MediaQueryList}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-matchmedia\n */\nWindow.prototype.matchMedia = function(media_query_list) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerwidth\n */\nWindow.prototype.innerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerheight\n */\nWindow.prototype.innerHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollx\n */\nWindow.prototype.scrollX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pagexoffset\n */\nWindow.prototype.pageXOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrolly\n */\nWindow.prototype.scrollY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pageyoffset\n */\nWindow.prototype.pageYOffset;\n\n/**\n * @typedef {{\n * left: (number|undefined),\n * top: (number|undefined),\n * behavior: (string|undefined)\n * }}\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrolltooptions\n */\nvar ScrollToOptions;\n\n/**\n * @record\n * @see https://www.w3.org/TR/cssom-view/#dictdef-scrollintoviewoptions\n */\nfunction ScrollIntoViewOptions () {}\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.behavior;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.block;\n\n/** @type {string|undefined} */\nScrollIntoViewOptions.prototype.inline;\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scroll\n * @return {undefined}\n */\nWindow.prototype.scroll = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollto\n * @return {undefined}\n */\nWindow.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollby\n * @return {undefined}\n */\nWindow.prototype.scrollBy = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screenx\n */\nWindow.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screeny\n */\nWindow.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerwidth\n */\nWindow.prototype.outerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerheight\n */\nWindow.prototype.outerHeight;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-devicepixelratio\n */\nWindow.prototype.devicePixelRatio;\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveto\n */\nWindow.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-moveby\n */\nWindow.prototype.moveBy = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeto\n */\nWindow.prototype.resizeTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @see https://www.w3.org/TR/cssom-view/#dom-window-resizeby\n */\nWindow.prototype.resizeBy = function(x, y) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylist\n */\nfunction MediaQueryList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-media\n */\nMediaQueryList.prototype.media;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-matches\n */\nMediaQueryList.prototype.matches;\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-addlistener\n * @return {undefined}\n */\nMediaQueryList.prototype.addListener = function(listener) {};\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-removelistener\n * @return {undefined}\n */\nMediaQueryList.prototype.removeListener = function(listener) {};\n\n/** @override Not available in some browsers; use addListener instead. */\nMediaQueryList.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override Not available in old browsers; use removeListener instead. */\nMediaQueryList.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaQueryList.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @typedef {(function(!MediaQueryList) : void)}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylistlistener\n */\nvar MediaQueryListListener;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#screen\n */\nfunction Screen() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availwidth\n */\nScreen.prototype.availWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availheight\n */\nScreen.prototype.availHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-width\n */\nScreen.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-height\n */\nScreen.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-colordepth\n */\nScreen.prototype.colorDepth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-pixeldepth\n */\nScreen.prototype.pixelDepth;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-document-interface\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint\n */\nDocument.prototype.elementFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementsfrompoint\n */\nDocument.prototype.elementsFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {CaretPosition}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-caretpositionfrompoint\n */\nDocument.prototype.caretPositionFromPoint = function(x, y) {};\n\n/**\n * @type {Element}\n * @see http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement\n */\nDocument.prototype.scrollingElement;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#caretposition\n */\nfunction CaretPosition() {}\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offsetnode\n */\nCaretPosition.prototype.offsetNode;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offset\n */\nCaretPosition.prototype.offset;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-element-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getclientrects\n */\nElement.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect\n */\nElement.prototype.getBoundingClientRect = function() {};\n\n/**\n * @param {(boolean|ScrollIntoViewOptions)=} top\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview\n * @return {undefined}\n */\nElement.prototype.scrollIntoView = function(top) {};\n\n/**\n * @param {number|!ScrollToOptions} scrollToOptionsOrX\n * @param {number=} opt_y\n * @see https://www.w3.org/TR/cssom-view/#extension-to-the-element-interface\n * @return {undefined}\n */\nElement.prototype.scrollTo = function(scrollToOptionsOrX, opt_y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrolltop\n */\nElement.prototype.scrollTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollleft\n */\nElement.prototype.scrollLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollwidth\n */\nElement.prototype.scrollWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollheight\n */\nElement.prototype.scrollHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clienttop\n */\nElement.prototype.clientTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientleft\n */\nElement.prototype.clientLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientwidth\n */\nElement.prototype.clientWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientheight\n */\nElement.prototype.clientHeight;\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetparent\n */\nHTMLElement.prototype.offsetParent;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop\n */\nHTMLElement.prototype.offsetTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetleft\n */\nHTMLElement.prototype.offsetLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetwidth\n */\nHTMLElement.prototype.offsetWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetheight\n */\nHTMLElement.prototype.offsetHeight;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-range-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getclientrects\n */\nRange.prototype.getClientRects = function() {};\n\n/**\n * @return {!DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getboundingclientrect\n */\nRange.prototype.getBoundingClientRect = function() {};\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-mouseevent-interface\n\n// MouseEvent: screen{X,Y} and client{X,Y} are in DOM Level 2/3 Event as well,\n// so it seems like a specification issue. I've emailed www-style@w3.org in\n// hopes of resolving the conflict, but in the mean time they can live here\n// (http://lists.w3.org/Archives/Public/www-style/2012May/0039.html).\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screenx\n */\n//MouseEvent.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screeny\n */\n//MouseEvent.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagex\n */\nMouseEvent.prototype.pageX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagey\n */\nMouseEvent.prototype.pageY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clientx\n */\n//MouseEvent.prototype.clientX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clienty\n */\n//MouseEvent.prototype.clientY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-x\n */\nMouseEvent.prototype.x;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-y\n */\nMouseEvent.prototype.y;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsetx\n */\nMouseEvent.prototype.offsetX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsety\n */\nMouseEvent.prototype.offsetY;\n\n\n// http://www.w3.org/TR/cssom-view/#rectangles\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#the-clientrectlist-interface\n * @implements {IArrayLike}\n */\nfunction ClientRectList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-length\n */\nClientRectList.prototype.length;\n\n/**\n * @param {number} index\n * @return {?DOMRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-item\n */\nClientRectList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * http://www.w3.org/TR/css3-conditional/#CSS-interface\n */\nfunction CSSInterface() {}\n\n/**\n * @param {string} ident\n * @return {string}\n * @see http://www.w3.org/TR/cssom/#the-css.escape()-method\n * @throws DOMException {@see DOMException.INVALID_CHARACTER_ERR}\n */\nCSSInterface.prototype.escape = function(ident) {};\n\n/**\n * @param {string} property\n * @param {string=} opt_value\n * @return {boolean}\n */\nCSSInterface.prototype.supports = function(property, opt_value) {};\n\n/**\n * TODO(nicksantos): This suppress tag probably isn't needed, and\n * should be removed.\n * @suppress {duplicate}\n * @type {CSSInterface}\n */\nvar CSS;\n\n/** @type {CSSInterface} */\nWindow.prototype.CSS;\n\n// http://dev.w3.org/csswg/css-font-loading/\n\n/**\n * Set of possible string values: 'error', 'loaded', 'loading', 'unloaded'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfaceloadstatus\n */\nvar FontFaceLoadStatus;\n\n/**\n * @typedef {{\n * style: (string|undefined),\n * weight: (string|undefined),\n * stretch: (string|undefined),\n * unicodeRange: (string|undefined),\n * variant: (string|undefined),\n * featureSettings: (string|undefined)\n * }}\n * @see http://dev.w3.org/csswg/css-font-loading/#dictdef-fontfacedescriptors\n */\nvar FontFaceDescriptors;\n\n/**\n * @constructor\n * @param {string} fontFamily\n * @param {(string|ArrayBuffer|ArrayBufferView)} source\n * @param {!FontFaceDescriptors=} opt_descriptors\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-constructor\n */\nfunction FontFace(fontFamily, source, opt_descriptors) {}\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-family\n */\nFontFace.prototype.family;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-style\n */\nFontFace.prototype.style;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-weight\n */\nFontFace.prototype.weight;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-stretch\n */\nFontFace.prototype.stretch;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-unicoderange\n */\nFontFace.prototype.unicodeRange;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-variant\n */\nFontFace.prototype.variant;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-featuresettings\n */\nFontFace.prototype.featureSettings;\n\n/**\n * @type {FontFaceLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-status\n */\nFontFace.prototype.status;\n\n/**\n * @return {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-load\n */\nFontFace.prototype.load = function() {};\n\n/**\n * Set of possible string values: 'loaded', 'loading'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfacesetloadstatus\n */\nvar FontFaceSetLoadStatus;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-interface\n */\nfunction FontFaceSet() {}\n\n// Event handlers\n// http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-events\n\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloading;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingdone;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingerror;\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-add\n * @return {undefined}\n */\nFontFaceSet.prototype.add = function(value) {};\n\n/**\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-clear\n * @return {undefined}\n */\nFontFaceSet.prototype.clear = function() {};\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-delete\n * @return {undefined}\n */\nFontFaceSet.prototype.delete = function(value) {};\n\n/**\n * @param {!FontFace} font\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-has\n */\nFontFaceSet.prototype.has = function(font) {};\n\n/**\n * @param {function(!FontFace, number, !FontFaceSet)} callback\n * @param {?Object=} selfObj\n * see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-foreach\n * @return {undefined}\n */\nFontFaceSet.prototype.forEach = function(callback, selfObj) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {!Promise>}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-load\n */\nFontFaceSet.prototype.load = function(font, opt_text) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-check\n */\nFontFaceSet.prototype.check = function(font, opt_text) {};\n\n/**\n * @type {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-ready\n */\nFontFaceSet.prototype.ready;\n\n/**\n * @type {FontFaceSetLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-status\n */\nFontFaceSet.prototype.status;\n\n/**\n * @constructor\n * @param {string} type\n * @param {{\n * animationName: (string|undefined),\n * elapsedTime: (number|undefined),\n * pseudoElement: (string|undefined)\n * }=} opt_animationEventInitDict\n * @extends {Event}\n * @see https://drafts.csswg.org/css-animations/#interface-animationevent\n */\nfunction AnimationEvent(type, opt_animationEventInitDict) {};\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-animationname\n */\nAnimationEvent.prototype.animationName;\n\n/**\n * @type {number}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-elapsedtime\n */\nAnimationEvent.prototype.elapsedTime;\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-animationevent-pseudoelement\n */\nAnimationEvent.prototype.pseudoElement;\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframerule\n */\nfunction CSSKeyframeRule() {}\n\n/**\n * @type {string}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-keytext\n */\nCSSKeyframeRule.prototype.keyText;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframerule-style\n */\nCSSKeyframeRule.prototype.style;\n\n\n/**\n * @record\n * @see http://dev.w3.org/csswg/css-animations/#csskeyframesrule\n */\nfunction CSSKeyframesRule() {}\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-name\n * @type {string}\n */\nCSSKeyframesRule.prototype.name;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-cssrules\n * @type {!CSSRuleList}\n */\nCSSKeyframesRule.prototype.cssRules;\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-findrule\n * @param {string} key The key text for the rule to find.\n * @return {?CSSKeyframeRule}\n */\nCSSKeyframesRule.prototype.findRule = function(key) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-appendrule\n * @param {string} rule The text for the rule to append.\n */\nCSSKeyframesRule.prototype.appendRule = function(rule) {};\n\n/**\n * @see https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule\n * @param {string} key The key text for the rule to delete.\n */\nCSSKeyframesRule.prototype.deleteRule = function(key) {};\n", ++"externs/gecko_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Gecko\'s custom CSS properties. Copied from:\n * http://mxr.m0z111a.qjz9zk/mozilla2.0/source/dom/interfaces/css/nsIDOMCSS2Properties.idl\n *\n * @externs\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n */\n\n\n/** @type {string} */ CSSProperties.prototype.MozAppearance;\n/** @type {string} */ CSSProperties.prototype.MozBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundInlinePolicy;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.MozBinding;\n/** @type {string} */ CSSProperties.prototype.MozBorderBottomColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderEnd;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderImage;\n/** @type {string} */ CSSProperties.prototype.MozBorderLeftColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadius;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRightColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderStart;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderTopColors;\n/** @type {string} */ CSSProperties.prototype.MozBoxAlign;\n/** @type {string} */ CSSProperties.prototype.MozBoxDirection;\n/** @type {string} */ CSSProperties.prototype.MozBoxFlex;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrient;\n/** @type {string} */ CSSProperties.prototype.MozBoxPack;\n/** @type {string} */ CSSProperties.prototype.MozBoxSizing;\n/** @type {string} */ CSSProperties.prototype.MozBoxShadow;\n/** @type {string} */ CSSProperties.prototype.MozColumnCount;\n/** @type {string} */ CSSProperties.prototype.MozColumnGap;\n/** @type {string} */ CSSProperties.prototype.MozColumnRule;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.MozColumnWidth;\n/** @type {string} */ CSSProperties.prototype.MozFloatEdge;\n/** @type {string} */ CSSProperties.prototype.MozFontFeatureSettings;\n/** @type {string} */ CSSProperties.prototype.MozFontLanguageOverride;\n/** @type {string} */ CSSProperties.prototype.MozForceBrokenImageIcon;\n/** @type {string} */ CSSProperties.prototype.MozImageRegion;\n/** @type {string} */ CSSProperties.prototype.MozMarginEnd;\n/** @type {string} */ CSSProperties.prototype.MozMarginStart;\n/** @type {number|string} */ CSSProperties.prototype.MozOpacity;\n/** @type {string} */ CSSProperties.prototype.MozOutline;\n/** @type {string} */ CSSProperties.prototype.MozOutlineColor;\n/** @type {string} */ CSSProperties.prototype.MozOutlineOffset;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadius;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineStyle;\n/** @type {string} */ CSSProperties.prototype.MozOutlineWidth;\n/** @type {string} */ CSSProperties.prototype.MozPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.MozPaddingStart;\n/** @type {string} */ CSSProperties.prototype.MozPerspective;\n/** @type {string} */ CSSProperties.prototype.MozStackSizing;\n/** @type {string} */ CSSProperties.prototype.MozTabSize;\n/** @type {string} */ CSSProperties.prototype.MozTransform;\n/** @type {string} */ CSSProperties.prototype.MozTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.MozTransition;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.MozTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.MozTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.MozUserFocus;\n/** @type {string} */ CSSProperties.prototype.MozUserInput;\n/** @type {string} */ CSSProperties.prototype.MozUserModify;\n/** @type {string} */ CSSProperties.prototype.MozUserSelect;\n/** @type {string} */ CSSProperties.prototype.MozWindowShadow;\n\n\n// These are non-standard Gecko CSSOM properties on Window.prototype.screen.\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.availTop\n */\nScreen.prototype.availTop;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.availLeft\n */\nScreen.prototype.availLeft;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.left\n */\nScreen.prototype.left;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen.top\n */\nScreen.prototype.top;\n', ++"externs/ie_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s custom CSS properties, as defined here:\n * http://msdn.m1cr050ft.qjz9zk/en-us/library/aa768661(VS.85).aspx\n *\n * This page is also useful for the IDL definitions:\n * http://source.winehq.org/source/include/mshtml.idl\n *\n * @externs\n * @author nicksantos@9oo91e.qjz9zk\n */\n\n/** @type {Element} */\nStyleSheet.prototype.owningElement;\n\n/** @type {boolean} */\nStyleSheet.prototype.readOnly;\n\n/** @type {StyleSheetList} */\nStyleSheet.prototype.imports;\n\n/** @type {string} */\nStyleSheet.prototype.id;\n\n/**\n * @param {string} bstrURL\n * @param {number} lIndex\n * @return {number}\n */\nStyleSheet.prototype.addImport;\n\n/**\n * @param {string} bstrSelector\n * @param {string} bstrStyle\n * @param {number=} opt_iIndex\n * @return {number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358796%28v=vs.85%29.aspx\n */\nStyleSheet.prototype.addRule;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeImport;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeRule;\n\n/** @type {string} */\nStyleSheet.prototype.cssText;\n\n/** @type {CSSRuleList} */\nStyleSheet.prototype.rules;\n\n// StyleSheet methods\n\n/**\n * @param {string} propName\n * @return {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358797(VS.85).aspx\n */\nStyleSheet.prototype.getExpression;\n\n/**\n * @param {string} name\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms531196(VS.85).aspx\n */\nStyleSheet.prototype.setExpression;\n\n/**\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/aa358798(VS.85).aspx\n */\nStyleSheet.prototype.removeExpression;\n\n// IE-only CSS style names.\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionX;\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionY;\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/ms531081(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with caller.\n */\nCSSProperties.prototype.behavior;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms533883.aspx\n */\nCSSProperties.prototype.imeMode;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms534176(VS.85).aspx\n */\nCSSProperties.prototype.msInterpolationMode;\n\n/** @type {string} */ CSSProperties.prototype.overflowX;\n\n/** @type {string} */ CSSProperties.prototype.overflowY;\n\n/** @type {number} */ CSSProperties.prototype.pixelWidth;\n\n/** @type {number} */ CSSProperties.prototype.pixelHeight;\n\n/** @type {number} */ CSSProperties.prototype.pixelLeft;\n\n/** @type {number} */ CSSProperties.prototype.pixelTop;\n\n/** @type {string} */ CSSProperties.prototype.styleFloat;\n\n/**\n * @type {string|number}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535169(VS.85).aspx\n */\nCSSProperties.prototype.zoom;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ms535153(VS.85).aspx\n */\nCSSProperties.prototype.writingMode;\n\n/**\n * IE-specific extensions.\n * @see http://blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx\n */\n\n/** @type {string} */\nCSSProperties.prototype.MsAccelerator;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionX;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionY;\n\n/** @type {string} */\nCSSProperties.prototype.MsBehavior;\n\n/** @type {string} */\nCSSProperties.prototype.MsBlockProgression;\n\n/** @type {string} */\nCSSProperties.prototype.MsFilter;\n\n/** @type {string} */\nCSSProperties.prototype.MsImeMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGrid;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridChar;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridLine;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridType;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsInterpolationMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowX;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowY;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbar3dlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarArrowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarBaseColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarDarkshadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarFaceColor;\n\nCSSProperties.prototype.MsScrollbarHighlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarShadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarTrackColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAlignLast;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAutospace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextJustify;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextKashidaSpace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextOverflow;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextUnderlinePosition;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordWrap;\n\n/** @type {string} */\nCSSProperties.prototype.MsWritingMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsZoom;\n\n/** @type {string} */\nCSSProperties.prototype.MsUserSelect;\n\n// See: http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/Hh702466.aspx\n\n/** @type {string} */\nCSSProperties.prototype.msContentZooming;\n\n/** @type {string} */\nCSSProperties.prototype.msTouchAction;\n\n/** @type {string} */\nCSSProperties.prototype.msTransform;\n\n/** @type {string} */\nCSSProperties.prototype.msTransition;\n', ++"externs/webkit_css.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebKit\'s custom CSS properties. Copied from:\n * {@link\n * http://trac.webkit.org/browser/trunk/Source/WebCore/css/CSSPropertyNames.in}\n *\n * If you make changes to this file, notice that every property appears\n * twice: once as an uppercase name and once as a lowercase name.\n * WebKit allows both. The uppercase version is preferred.\n *\n * @externs\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n * @author mastepien@9oo91e.qjz9zk (Marek Stepien)\n */\n\n/** @type {string} */ CSSProperties.prototype.WebkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimation;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitAppearance;\n/** @type {string} */ CSSProperties.prototype.WebkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.WebkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.WebkitBinding;\n/** @type {string} */ CSSProperties.prototype.WebkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.WebkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitFilter;\n/** @type {string} */ CSSProperties.prototype.WebkitFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRow;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRows;\n/** @type {string} */ CSSProperties.prototype.WebkitHighlight;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphens;\n/** @type {string} */ CSSProperties.prototype.WebkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.WebkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.WebkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.WebkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.WebkitLocale;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarquee;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitMask;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.WebkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.WebkitOrder;\n/** @type {string} */ CSSProperties.prototype.WebkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspective;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.WebkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.WebkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.WebkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.WebkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitTransform;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTransition;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.WebkitUserModify;\n/** @type {string} */ CSSProperties.prototype.WebkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.WebkitWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.WebkitWritingMode;\n\n// WebKit also adds bindings for the lowercase versions of these properties.\n// The uppercase version is preferred.\n\n/** @type {string} */ CSSProperties.prototype.webkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.webkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.webkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.webkitAnimation;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitAppearance;\n/** @type {string} */ CSSProperties.prototype.webkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.webkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.webkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.webkitBinding;\n/** @type {string} */ CSSProperties.prototype.webkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.webkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.webkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.webkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.webkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.webkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.webkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.webkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.webkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.webkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.webkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.webkitColumns;\n/** @type {string} */ CSSProperties.prototype.webkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.webkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.webkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.webkitFilter;\n/** @type {string} */ CSSProperties.prototype.webkitFlex;\n/** @type {string} */ CSSProperties.prototype.webkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.webkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.webkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.webkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.webkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.webkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.webkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.webkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.webkitGridRow;\n/** @type {string} */ CSSProperties.prototype.webkitGridRows;\n/** @type {string} */ CSSProperties.prototype.webkitHighlight;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.webkitHyphens;\n/** @type {string} */ CSSProperties.prototype.webkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.webkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.webkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.webkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.webkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.webkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.webkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.webkitLocale;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.webkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.webkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarquee;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitMask;\n/** @type {string} */ CSSProperties.prototype.webkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.webkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.webkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.webkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.webkitOrder;\n/** @type {string} */ CSSProperties.prototype.webkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.webkitPerspective;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.webkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.webkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.webkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.webkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.webkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.webkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.webkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.webkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.webkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.webkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitTransform;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.webkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTransition;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.webkitUserModify;\n/** @type {string} */ CSSProperties.prototype.webkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.webkitWrap;\n/** @type {string} */ CSSProperties.prototype.webkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.webkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.webkitWritingMode;\n\n/**\n * @constructor\n * @param {number} x\n * @param {number} y\n */\nfunction WebKitPoint(x, y) {}\n\n/** @type {number} */\nWebKitPoint.prototype.x;\n\n/** @type {number} */\nWebKitPoint.prototype.y;\n', ++"externs/google_legacy.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the type level google namespace.\n * @externs\n * @author nicksantos@9oo91e.qjz9zk (Nick Santos)\n */\n\n/**\n * Suppresses the compiler warning when multiple externs files declare the\n * google namespace.\n * @suppress {duplicate,strictMissingProperties}\n * NOTE: This definition should be marked \\@const, and when it is we can remove\n * the "strictMissingProperties" suppression.\n */\n// TODO(nicksantos): Consolidate to one google namespace declaration.\nvar google = {};\n', ++"externs/deprecated.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins that are not part of any specifications\n * but are still needed in some project\'s build.\n * @externs\n */\nvar opera = {};\n\nopera.postError;\n\n/** @nosideeffects */\nopera.version = function() {};\n\n/** @constructor */\nfunction XSLTProcessor() {}\n\n/**\n * @constructor\n * @extends {HTMLOptionElement}\n * @param {*=} opt_text\n * @param {*=} opt_value\n * @param {*=} opt_defaultSelected\n * @param {*=} opt_selected\n */\nfunction Option(opt_text, opt_value, opt_defaultSelected, opt_selected) {}\n\n\n// The "methods" object is a place to hang arbitrary external\n// properties. It is a throwback to pre-typed days, and should\n// not be used for any new definitions; it exists only to bridge\n// the gap between the old way and the new way.\nvar methods = {};\n\n/**\n * FF 1.5+ only\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @template T,S\n * @deprecated\n */\nArray.every = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @template T,S\n * @deprecated\n */\nArray.filter = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @template T,S\n * @return {undefined}\n * @deprecated\n */\nArray.forEach = function(arr, callback, opt_context) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.indexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @deprecated\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.lastIndexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @deprecated\n * @template T,S,R\n */\nArray.map = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @deprecated\n * @template T,S\n */\nArray.some = function(arr, callback, opt_context) {};\n', ++"externs/es6_proxy.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 Proxy objects.\n * @see https://tc39.github.io/ecma262/#sec-proxy-objects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n * @externs\n */\n\n\n/**\n * @record\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler\n */\nfunction ProxyHandler() {}\n\n/**\n * @type {(function(TARGET):?Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getprototypeof\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getPrototypeOf\n */\nProxyHandler.prototype.getPrototypeOf /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, ?Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/setPrototypeOf\n */\nProxyHandler.prototype.setPrototypeOf /* = function(target, proto) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-isextensible\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/isExtensible\n */\nProxyHandler.prototype.isExtensible /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-preventextensions\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/preventExtensions\n */\nProxyHandler.prototype.preventExtensions /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):(!ObjectPropertyDescriptor|undefined))|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getOwnPropertyDescriptor\n */\nProxyHandler.prototype.getOwnPropertyDescriptor /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !ObjectPropertyDescriptor):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-defineownproperty-p-desc\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/defineProperty\n */\nProxyHandler.prototype.defineProperty /* = function(target, prop, desc) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/has\n */\nProxyHandler.prototype.has /* = function(target, prop) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), !Object):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/get\n */\nProxyHandler.prototype.get /* = function(target, prop, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol), *, !Object):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set\n */\nProxyHandler.prototype.set /* = function(target, prop, value, receiver) {} */;\n\n/**\n * @type {(function(TARGET, (string|symbol)):boolean)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-delete-p\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty\n */\nProxyHandler.prototype.deleteProperty /* = function (target, prop) {} */;\n\n/**\n * @type {(function(TARGET):!Array<(string|symbol)>)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/ownKeys\n */\nProxyHandler.prototype.ownKeys /* = function(target) {} */;\n\n/**\n * @type {(function(TARGET, *, !Array):*)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/apply\n */\nProxyHandler.prototype.apply /* = function(target, thisArg, argList) {} */;\n\n/**\n * @type {(function(TARGET, !Array, function(new: ?, ...?)):!Object)|undefined}\n * @see https://tc39.github.io/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-construct-argumentslist-newtarget\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/construct\n */\nProxyHandler.prototype.construct /* = function(target, argList, newTarget) {} */;\n\n\n/**\n * @constructor\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy-constructor\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#Syntax\n */\nfunction Proxy(target, handler) {}\n\n/**\n * @param {TARGET} target\n * @param {!ProxyHandler} handler\n * @return {{proxy: !Proxy, revoke: function():void}}\n * @template TARGET\n * @see https://tc39.github.io/ecma262/#sec-proxy.revocable\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable\n */\nProxy.revocable = function(target, handler) {};\n', ++"externs/fido.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions from the FIDO Specifications\n * @see https://fidoalliance.org/download/\n *\n * @externs\n * @author arnarbi@9ma1l.qjz9zk (Arnar Birgisson)\n */\n\n/**\n * U2F JavaScript API namespace\n * @see https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-javascript-api-v1.2-ps-20170411.html\n * @const\n */\nvar u2f = {};\n\n/**\n * Data object for a single sign request.\n * @typedef {string}\n */\nu2f.Transport;\n\n/**\n * Data object for a registered key.\n * @typedef {{\n * version: string,\n * keyHandle: string,\n * transports: (!Array|undefined),\n * appId: ?string\n * }}\n */\nu2f.RegisteredKey;\n\n/**\n * An error object for responses\n * @typedef {{\n * errorCode: number,\n * errorMessage: ?string\n * }}\n */\nu2f.Error;\n\n/**\n * Data object for a sign response.\n * @typedef {{\n * keyHandle: string,\n * signatureData: string,\n * clientData: string\n * }}\n */\nu2f.SignResponse;\n\n/**\n * @typedef {{\n * version: string,\n * challenge: string\n * }}\n */\nu2f.RegisterRequest\n\n/**\n * @param {string} appId\n * @param {string} challenge\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.sign = function(\n appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {};\n\n/**\n * @param {string} appId\n * @param {!Array} registerRequests\n * @param {!Array} registeredKeys\n * @param {function((!u2f.Error|!u2f.SignResponse))} callback\n * @param {number=} opt_timeoutSeconds\n */\nu2f.register = function(\n appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {};\n', + "externs/w3c_fileapi.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for objects in the File API, File Writer API, and\n * File System API. Details of the API are at:\n * http://www.w3.org/TR/FileAPI/\n *\n * @externs\n */\n\n/** @record */\nfunction BlobPropertyBag() {};\n\n/** @type {(string|undefined)} */\nBlobPropertyBag.prototype.type;\n\n/**\n * @see http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob\n * @param {Array=} opt_blobParts\n * @param {BlobPropertyBag=} opt_options\n * @constructor\n * @nosideeffects\n */\nfunction Blob(opt_blobParts, opt_options) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-size\n * @type {number}\n */\nBlob.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-type\n * @type {string}\n */\nBlob.prototype.type;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-slice\n * @param {number=} start\n * @param {number=} length\n * @param {string=} opt_contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.slice = function(start, length, opt_contentType) {};\n\n\n/**\n * @record\n * @extends {BlobPropertyBag}\n **/\nfunction FilePropertyBag() {};\n\n/** @type {(number|undefined)} */\nFilePropertyBag.prototype.lastModified;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-file\n * @param {!Array=} contents\n * @param {string=} name\n * @param {FilePropertyBag=} properties\n * @constructor\n * @extends {Blob}\n */\nfunction File(contents, name, properties) {}\n\n/**\n * Chrome uses this instead of name.\n * @deprecated Use name instead.\n * @type {string}\n */\nFile.prototype.fileName;\n\n/**\n * Chrome uses this instead of size.\n * @deprecated Use size instead.\n * @type {string}\n */\nFile.prototype.fileSize;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-name\n * @type {string}\n */\nFile.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-lastModifiedDate\n * @type {Date}\n */\nFile.prototype.lastModifiedDate;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-lastModified\n * @type {number}\n */\nFile.prototype.lastModified;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-filereader\n * @constructor\n * @implements {EventTarget}\n */\nfunction FileReader() {}\n\n/** @override */\nFileReader.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nFileReader.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nFileReader.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBuffer\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsArrayBuffer = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringAsync\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsBinaryString = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsText\n * @param {!Blob} blob\n * @param {string=} encoding\n * @return {undefined}\n */\nFileReader.prototype.readAsText = function(blob, encoding) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURL\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsDataURL = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-abort\n * @return {undefined}\n */\nFileReader.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-empty\n * @const {number}\n */\nFileReader.prototype.EMPTY;\n\n/** @const {number} */\nFileReader.EMPTY;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-loading\n * @const {number}\n */\nFileReader.prototype.LOADING;\n\n/** @const {number} */\nFileReader.LOADING;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-done\n * @const {number}\n */\nFileReader.prototype.DONE;\n\n/** @const {number} */\nFileReader.DONE;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readystate\n * @type {number}\n */\nFileReader.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-result\n * @type {string|Blob|ArrayBuffer}\n */\nFileReader.prototype.result;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-error\n * @type {DOMError}\n */\nFileReader.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onloadstart\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onloadstart;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onload\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onload;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onloadend\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onloadend;\n\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileReaderSyncSync\n * @constructor\n */\nfunction FileReaderSync() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBufferSync\n * @param {!Blob} blob\n * @return {!ArrayBuffer}\n */\nFileReaderSync.prototype.readAsArrayBuffer = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringSync\n * @param {!Blob} blob\n * @return {string}\n */\nFileReaderSync.prototype.readAsBinaryString = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsTextSync\n * @param {!Blob} blob\n * @param {string=} encoding\n * @return {string}\n */\nFileReaderSync.prototype.readAsText = function(blob, encoding) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURLSync\n * @param {!Blob} blob\n * @return {string}\n */\nFileReaderSync.prototype.readAsDataURL = function(blob) {};\n', +-"externs/nonstandard_fileapi.js":"/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for file api implemented in\n * various browsers but not part of https://www.w3.org/TR/FileAPI.\n * @externs\n */\n\n/**\n * This replaces Blob.slice in Chrome since WebKit revision 84005.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.webkitSlice = function(start, end, contentType) {};\n\n/**\n * This replaces Blob.slice in Firefox.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.mozSlice = function(start, end, contentType) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface\n * @constructor\n */\nfunction BlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * This has replaced BlobBuilder in Chrome since WebKit revision 84008.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @constructor\n */\nfunction WebKitBlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nWebKitBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nWebKitBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * @record\n * @see https://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-dictionary\n */\nfunction FileSystemFlags() {};\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.create;\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.exclusive;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction DirectoryEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-createReader\n * @return {!DirectoryReader}\n */\nDirectoryEntry.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getFile\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!FileEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getFile = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getDirectory\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!DirectoryEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getDirectory = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-removeRecursively\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.removeRecursively = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreader-interface\n * @constructor\n */\nfunction DirectoryReader() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReader-readEntries\n * @param {function(!Array)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryReader.prototype.readEntries = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entry-interface\n * @constructor\n */\nfunction Entry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isFile\n * @type {boolean}\n */\nEntry.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isDirectory\n * @type {boolean}\n */\nEntry.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-name\n * @type {string}\n */\nEntry.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-fullPath\n * @type {string}\n */\nEntry.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-filesystem\n * @type {!FileSystem}\n */\nEntry.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-moveTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.moveTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-copyTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.copyTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntry.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-remove\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.remove = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getMetadata\n * @param {function(!Metadata)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getMetadata = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getParent\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getParent = function(successCallback, errorCallback) {};\n\n/**\n * @return {?Entry} The Entry corresponding to this item, or null. Note that\n * despite its name,this method only works in Chrome, and will eventually\n * be renamed to {@code getAsEntry}.\n * @nosideeffects\n */\nDataTransferItem.prototype.webkitGetAsEntry = function() {};\n\n/**\n * @see https://wicg.github.io/entries-api/#dom-file-webkitrelativepath\n * @type {string}\n */\nFile.prototype.webkitRelativePath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction FileEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-createWriter\n * @param {function(!FileWriter)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.createWriter = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-file\n * @param {function(!File)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.file = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileErrorInterface\n * @constructor\n * @extends {DOMError}\n */\nfunction FileError() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @const {number}\n */\nFileError.prototype.NOT_FOUND_ERR;\n\n/** @const {number} */\nFileError.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @const {number}\n */\nFileError.prototype.SECURITY_ERR;\n\n/** @const {number} */\nFileError.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ABORT_ERR\n * @const {number}\n */\nFileError.prototype.ABORT_ERR;\n\n/** @const {number} */\nFileError.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_READABLE_ERR\n * @const {number}\n */\nFileError.prototype.NOT_READABLE_ERR;\n\n/** @const {number} */\nFileError.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ENCODING_ERR\n * @const {number}\n */\nFileError.prototype.ENCODING_ERR;\n\n/** @const {number} */\nFileError.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileError-NO_MODIFICATION_ALLOWED_ERR\n * @const {number}\n */\nFileError.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @const {number} */\nFileError.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_STATE_ERR;\n\n/** @const {number} */\nFileError.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @const {number}\n */\nFileError.prototype.SYNTAX_ERR;\n\n/** @const {number} */\nFileError.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-INVALID_MODIFICATION_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_MODIFICATION_ERR;\n\n/** @const {number} */\nFileError.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-QUOTA_EXCEEDED_ERR\n * @const {number}\n */\nFileError.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @const {number} */\nFileError.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @const {number}\n */\nFileError.prototype.TYPE_MISMATCH_ERR;\n\n/** @const {number} */\nFileError.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @const {number}\n */\nFileError.prototype.PATH_EXISTS_ERR;\n\n/** @const {number} */\nFileError.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n * @deprecated Use the 'name' or 'message' attributes of DOMError rather than\n * 'code'\n */\nFileError.prototype.code;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileSaver\n * @constructor\n */\nfunction FileSaver() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-abort\n * @return {undefined}\n */\nFileSaver.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-INIT\n * @const {number}\n */\nFileSaver.prototype.INIT;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-WRITING\n * @const {number}\n */\nFileSaver.prototype.WRITING;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-DONE\n * @const {number}\n */\nFileSaver.prototype.DONE;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-readyState\n * @type {number}\n */\nFileSaver.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-error\n * @type {FileError}\n */\nFileSaver.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwritestart\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwritestart;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwrite\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwrite;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwriteend\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwriteend;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-filesystem-interface\n * @constructor\n */\nfunction FileSystem() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-name\n * @type {string}\n */\nFileSystem.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-root\n * @type {!DirectoryEntry}\n */\nFileSystem.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriter\n * @constructor\n * @extends {FileSaver}\n */\nfunction FileWriter() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-position\n * @type {number}\n */\nFileWriter.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-length\n * @type {number}\n */\nFileWriter.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriter.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriter.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriter.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystem interface, implemented by Window and WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem\n * @constructor\n */\nfunction LocalFileSystem() {}\n\n/**\n * Metadata interface.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-Metadata\n * @constructor\n */\nfunction Metadata() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-modificationTime\n * @type {!Date}\n */\nMetadata.prototype.modificationTime;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-size\n * @type {number}\n */\nMetadata.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-TEMPORARY\n * @const {number}\n */\nWindow.prototype.TEMPORARY;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-PERSISTENT\n * @const {number}\n */\nWindow.prototype.PERSISTENT;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction requestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.requestFileSystem = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction resolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.resolveLocalFileSystemURI =\n function(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitRequestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitRequestFileSystem = function(type, size, successCallback,\n errorCallback) {};\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitResolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitResolveLocalFileSystemURI = function(\n uri, successCallback, errorCallback) {}\n\n// WindowBlobURIMethods interface, implemented by Window and WorkerGlobalScope.\n// There are three APIs for this: the old specced API, the new specced API, and\n// the webkit-prefixed API.\n// @see http://www.w3.org/TR/FileAPI/#creating-revoking\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nfunction createObjectURL(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nWindow.prototype.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nfunction revokeObjectURL(url) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nWindow.prototype.revokeObjectURL = function(url) {};\n\n/**\n * This has been replaced by URL in Chrome since WebKit revision 75739.\n * @constructor\n * @param {string} urlString\n * @param {string=} base\n */\nfunction webkitURL(urlString, base) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nwebkitURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nwebkitURL.revokeObjectURL = function(url) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @constructor\n */\nfunction StorageInfo() {}\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @const {number}\n * */\nStorageInfo.prototype.TEMPORARY;\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @const {number}\n */\nStorageInfo.prototype.PERSISTENT;\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage#requestQuota\n * @param {number} type\n * @param {number} size\n * @param {function(number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.requestQuota = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage#queryUsageAndQuota\n * @param {number} type\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.queryUsageAndQuota = function(\n type, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @type {!StorageInfo}\n */\nWindow.prototype.webkitStorageInfo;\n\n/**\n * @see https://dvcs.w3.org/hg/quota/raw-file/tip/Overview.html#storagequota-interface.\n * @constructor\n */\nfunction StorageQuota() {}\n\n/**\n * @param {number} size\n * @param {function(number)=} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.requestQuota = function(\n size, successCallback, errorCallback) {};\n\n/**\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.queryUsageAndQuota = function(\n successCallback, errorCallback) {};\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.chrome.com/apps/offline_storage\n */\nNavigator.prototype.webkitPersistentStorage;\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.chrome.com/apps/offline_storage\n */\nNavigator.prototype.webkitTemporaryStorage;\n\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriterSync\n * @constructor\n */\nfunction FileWriterSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-position\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-length\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriterSync.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriterSync.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriterSync.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystemSync interface, implemented by WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystemSync\n * @constructor\n */\nfunction LocalFileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/\n * #the-synchronous-filesystem-interface\n * @constructor\n */\nfunction FileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-name\n * @type {string}\n * @const\n */\nFileSystemSync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-root\n * @type {!DirectoryEntrySync}\n * @const\n */\nFileSystemSync.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction requestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction webkitRequestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entrysync-interface\n * @constructor\n */\nfunction EntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isFile\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isDirectory\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-name\n * @type {string}\n * @const\n */\nEntrySync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-fullPath\n * @type {string}\n * @const\n */\nEntrySync.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-filesystem\n * @type {!FileSystemSync}\n * @const\n */\nEntrySync.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-moveTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.moveTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-copyTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.copyTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntrySync.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-remove\n * @return {undefined}\n */\nEntrySync.prototype.remove = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getMetadata\n * @return {!Metadata}\n */\nEntrySync.prototype.getMetadata = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getParent\n * @return {!DirectoryEntrySync}\n */\nEntrySync.prototype.getParent = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction DirectoryEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-createReader\n * @return {!DirectoryReaderSync}\n */\nDirectoryEntrySync.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getFile\n * @param {string} path\n * @param {Object=} options\n * @return {!FileEntrySync}\n */\nDirectoryEntrySync.prototype.getFile = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getDirectory\n * @param {string} path\n * @param {Object=} options\n * @return {!DirectoryEntrySync}\n */\nDirectoryEntrySync.prototype.getDirectory = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-removeRecursively\n * @return {undefined}\n */\nDirectoryEntrySync.prototype.removeRecursively = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreadersync-interface\n * @constructor\n */\nfunction DirectoryReaderSync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReaderSync-readEntries\n * @return {!Array}\n */\nDirectoryReaderSync.prototype.readEntries = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction FileEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-createWriter\n * @return {!FileWriterSync}\n */\nFileEntrySync.prototype.createWriter = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-file\n * @return {!File}\n */\nFileEntrySync.prototype.file = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileexception-exception\n * @constructor\n */\nfunction FileException() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @type {number}\n */\nFileException.prototype.NOT_FOUND_ERR;\n\n/** @type {number} */\nFileException.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @type {number}\n */\nFileException.prototype.SECURITY_ERR;\n\n/** @type {number} */\nFileException.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ABORT_ERR\n * @type {number}\n */\nFileException.prototype.ABORT_ERR;\n\n/** @type {number} */\nFileException.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-NOT_READABLE_ERR\n * @type {number}\n */\nFileException.prototype.NOT_READABLE_ERR;\n\n/** @type {number} */\nFileException.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ENCODING_ERR\n * @type {number}\n */\nFileException.prototype.ENCODING_ERR;\n\n/** @type {number} */\nFileException.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-NO_MODIFICATION_ALLOWED_ERR\n * @type {number}\n */\nFileException.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @type {number} */\nFileException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_STATE_ERR;\n\n/** @type {number} */\nFileException.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @type {number}\n */\nFileException.prototype.SYNTAX_ERR;\n\n/** @type {number} */\nFileException.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-INVALID_MODIFICATION_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_MODIFICATION_ERR;\n\n/** @type {number} */\nFileException.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-QUOTA_EXCEEDED_ERR\n * @type {number}\n */\nFileException.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @type {number} */\nFileException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @type {number}\n */\nFileException.prototype.TYPE_MISMATCH_ERR;\n\n/** @type {number} */\nFileException.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @type {number}\n */\nFileException.prototype.PATH_EXISTS_ERR;\n\n/** @type {number} */\nFileException.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n */\nFileException.prototype.code;\n", +-"externs/flash.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the Flash Object JavaScript methods. This\n * file depends on w3c_dom2.js.\n * Created from\n * http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html\n *\n * @externs\n * @author ajp@google.com (Andy Perelson)\n */\n\n\n// Standard Methods.\n\n/**\n * Call a Flash function exported by ExternalInterface.\n * @param {string} xmlString The XML string passed to Flash. The outer element\n * should be {@code }. A sample invocation string:\n * {@code \n * test}\n * @return {string} The serialized return value from Flash that you can eval.\n */\nHTMLObjectElement.prototype.CallFunction = function(xmlString) {};\n\n/**\n * Returns the value of the Flash variable specified by varName or null if the\n * variable does not exist.\n * @param {string} varName The variable name.\n * @return {?string} The variable value.\n */\nHTMLObjectElement.prototype.GetVariable = function(varName) {};\n\n/**\n * Activates the frame number specified by `frameNumber` in the current\n * movie.\n * @param {number} frameNumber A non-negative integer frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.GotoFrame = function(frameNumber) {};\n\n/**\n * @return {boolean} Whether the movie is currently playing.\n */\nHTMLObjectElement.prototype.IsPlaying = function() {};\n\n/**\n * Loads the movie identified by `url` to the layer specified by\n * `layerNumber`.\n * @param {number} layerNumber The layer number.\n * @param {string} url The movie URL.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.LoadMovie = function(layerNumber, url) {};\n\n/**\n * Pans a zoomed-in movie to the coordinates specified by x and y. Use mode to\n * specify whether the values for x and y are pixels or a percent of the window.\n * When mode is 0, the coordinates are pixels; when mode is 1, the coordinates\n * are percent of the window.\n * @param {number} x The x-coordinate.\n * @param {number} y The y-coordinate.\n * @param {number} mode The mode.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Pan = function(x, y, mode) {};\n\n/**\n * @return {number} The percent of the Flash Player movie that has streamed\n * into the browser so far; Possible values are from 0 to 100.\n */\nHTMLObjectElement.prototype.PercentLoaded = function() {};\n\n/**\n * Starts playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Play = function() {};\n\n/**\n * Goes to the first frame.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Rewind = function() {};\n\n/**\n * Sets the value of the flash variable.\n * @param {string} variableName The variable name.\n * @param {string} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetVariable = function(variableName, value) {};\n\n/**\n * Zooms in on a rectangular area of the movie. The units of the coordinates\n * are in twips (1440 units per inch).\n * @param {number} left The left coordinate.\n * @param {number} top The top coordinate.\n * @param {number} right The right coordinate.\n * @param {number} bottom The bottom coordinate.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetZoomRect = function(left, top, right, bottom) {};\n\n/**\n * Stops playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.StopPlay = function() {};\n\n/**\n * @return {number} The total number of frames in the movie.\n */\nHTMLObjectElement.prototype.TotalFrames = function() {};\n\n/**\n * Zooms the view by a relative scale factor.\n * @param {number} percent The percentage scale factor, should be an integer.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Zoom = function(percent) {};\n\n\n// TellTarget Methods.\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallFrame = function(target, frameNumber) {};\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {string} label The frame label.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallLabel = function(target, label) {};\n\n/**\n * Returns the number of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {number} The number of the current frame.\n */\nHTMLObjectElement.prototype.TCurentFrame = function(target) {};\n\n/**\n * Returns the label of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {string} The label of the current frame, empty string if no\n * current frame.\n */\nHTMLObjectElement.prototype.TCurrentLabel = function(target) {};\n\n/**\n * Returns a string indicating the value of the property in the\n * specified timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {string} The value of the property.\n */\nHTMLObjectElement.prototype.TGetProperty = function(target, property) {};\n\n/**\n * Returns a number indicating the value of the property in the specified\n * timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {number} A number indicating the value of the property.\n */\nHTMLObjectElement.prototype.TGetPropertyAsNumber = function(target, property) {};\n\n/**\n * Goes to the specified frame number in the specified timeline.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoFrame = function(target, frameNumber) {};\n\n/**\n * Goes to the specified frame label in the specified timeline.\n * @param {string} target The timeline.\n * @param {string} label The framelabel.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoLabel = function(target, label) {};\n\n/**\n * Plays the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TPlay = function(target) {};\n\n/**\n * Sets the value of the property in the specified timeline.\n * @param {number} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @param {string|number} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TSetProperty = function(target, property, value) {};\n\n/**\n * Stops the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TStopPlay = function(target) {};\n', +-"externs/gecko_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over some of the\n * W3C\'s XML specifications by Gecko. This file depends on\n * w3c_xml.js. The whole file has been fully type annotated.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/**\n * XMLSerializer can be used to convert DOM subtree or DOM document into text.\n * XMLSerializer is available to unprivileged scripts.\n *\n * XMLSerializer is mainly useful for applications and extensions based on\n * Mozilla platform. While it\'s available to web pages, it\'s not part of any\n * standard and level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction XMLSerializer() {}\n\n/**\n * Returns the serialized subtree in the form of a string\n * @param {Node} subtree\n * @return {string}\n */\nXMLSerializer.prototype.serializeToString = function(subtree) {};\n\n/**\n * The subtree rooted by the specified element is serialized to a byte stream\n * using the character set specified.\n *\n * @param {Node} subtree\n * @return {Object}\n */\nXMLSerializer.prototype.serializeToStream = function(subtree) {};\n\n/**\n * DOMParser is mainly useful for applications and extensions based on Mozilla\n * platform. While it\'s available to web pages, it\'s not part of any standard and\n * level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction DOMParser() {}\n\n/**\n * The string passed in is parsed into a DOM document.\n *\n * Example:\n * var parser = new DOMParser();\n * var doc = parser.parseFromString(aStr, "text/xml");\n *\n * @param {!TrustedHTML|string} src The UTF16 string to be parsed.\n * @param {string} type The content type of the string.\n * @return {Document}\n */\nDOMParser.prototype.parseFromString = function(src, type) {};\n', +-"externs/html5.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM3 specification in HTML5. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated.\n *\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/index.html\n * @see http://dev.w3.org/html5/spec/Overview.html\n *\n * This also includes Typed Array definitions from\n * http://www.khronos.org/registry/typedarray/specs/latest/\n *\n * This relies on w3c_event.js being included first.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n */\n\n/** @type {?HTMLSlotElement} */\nNode.prototype.assignedSlot;\n\n/**\n * @type {string}\n * @see https://dom.spec.whatwg.org/#dom-element-slot\n */\nElement.prototype.slot;\n\n/**\n * Note: In IE, the contains() method only exists on Elements, not Nodes.\n * Therefore, it is recommended that you use the Conformance framework to\n * prevent calling this on Nodes which are not Elements.\n * @see https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n *\n * @param {Node} n The node to check\n * @return {boolean} If 'n' is this Node, or is contained within this Node.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Node.contains\n * @nosideeffects\n */\nNode.prototype.contains = function(n) {};\n\n/** @type {boolean} */\nNode.prototype.isConnected;\n\n/**\n * Inserts the given HTML Element into the node at the location.\n * @param {string} where Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!Element} element DOM Element to insert.\n * @return {?Element} The element that was inserted, or null, if the\n * insertion failed.\n * @see https://dom.spec.whatwg.org/#dom-element-insertadjacentelement\n */\nNode.prototype.insertAdjacentElement = function(where, element) {};\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element\n */\nHTMLScriptElement.prototype.async;\n\n/**\n * @constructor\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element\n * @extends {HTMLElement}\n */\nfunction HTMLCanvasElement() {}\n\n/** @type {number} */\nHTMLCanvasElement.prototype.width;\n\n/** @type {number} */\nHTMLCanvasElement.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html5/scripting-1.html#dom-canvas-toblob\n * @param {function(!Blob)} callback\n * @param {string=} opt_type\n * @param {...*} var_args\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toBlob = function(callback, opt_type, var_args) {};\n\n/**\n * @param {string=} opt_type\n * @param {...*} var_args\n * @return {string}\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toDataURL = function(opt_type, var_args) {};\n\n/**\n * @modifies {this}\n * @param {string} contextId\n * @param {Object=} opt_args\n * @return {Object}\n */\nHTMLCanvasElement.prototype.getContext = function(contextId, opt_args) {};\n\n/**\n * @see https://www.w3.org/TR/mediacapture-fromelement/\n * @param {number=} opt_framerate\n * @return {!MediaStream}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.captureStream = function(opt_framerate) {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-transfercontroltooffscreen\n * @return {!OffscreenCanvas}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.transferControlToOffscreen = function() {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface\n * @implements {EventTarget}\n * @implements {Transferable}\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @constructor\n */\nfunction OffscreenCanvas(width, height) {}\n\n/** @override */\nOffscreenCanvas.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.dispatchEvent = function(evt) {};\n\n/** @type {number} */\nOffscreenCanvas.prototype.width;\n\n/** @type {number} */\nOffscreenCanvas.prototype.height;\n\n/**\n * @param {string} contextId\n * @param {!Object=} opt_options\n * @modifies {this}\n * @return {!Object}\n */\nOffscreenCanvas.prototype.getContext = function(contextId, opt_options) {};\n\n/**\n * @return {!ImageBitmap}\n */\nOffscreenCanvas.prototype.transferToImageBitmap = function() {};\n\n/**\n * @param {{type: (string|undefined), quality: (number|undefined)}=} opt_options\n * @return {!Promise}\n */\nOffscreenCanvas.prototype.convertToBlob = function(opt_options) {};\n\n// TODO(tjgq): Find a way to add SVGImageElement to this typedef without making\n// svg.js part of core.\n/**\n * @typedef {HTMLImageElement|HTMLVideoElement|HTMLCanvasElement|ImageBitmap|\n * OffscreenCanvas}\n */\nvar CanvasImageSource;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvaspathmethods\n */\nfunction CanvasPathMethods() {}\n\n/**\n * @return {undefined}\n */\nCanvasPathMethods.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasPathMethods.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @constructor\n * @implements {CanvasPathMethods}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#path2d-objects\n */\nfunction Path2D() {}\n\n/**\n * @return {undefined}\n * @override\n */\nPath2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nPath2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} optAnticlockwise\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, optAnticlockwise) {};\n\n/**\n * @param {Path2D} path\n * @return {undefined}\n */\nPath2D.prototype.addPath = function(path) {};\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvasdrawingstyles\n */\nfunction CanvasDrawingStyles() {}\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.lineWidth;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineCap;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineJoin;\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.miterLimit;\n\n/**\n * @param {Array} segments\n * @return {undefined}\n */\nCanvasDrawingStyles.prototype.setLineDash = function(segments) {};\n\n/**\n * @return {!Array}\n */\nCanvasDrawingStyles.prototype.getLineDash = function() {};\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.font;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textAlign;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textBaseline;\n\n// TODO(dramaix): replace this with @record.\n/**\n * @constructor\n * @abstract\n * @implements {CanvasDrawingStyles}\n * @implements {CanvasPathMethods}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction BaseRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement|!OffscreenCanvas} */\nBaseRenderingContext2D.prototype.canvas;\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.save = function() {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.restore = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.scale = function(x, y) {};\n\n/**\n * @param {number} angle\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.rotate = function(angle) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.translate = function(x, y) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.transform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.setTransform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createLinearGradient = function(\n x0, y0, x1, y1) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} r0\n * @param {number} x1\n * @param {number} y1\n * @param {number} r1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createRadialGradient = function(\n x0, y0, r0, x1, y1, r1) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {string} repetition\n * @return {?CanvasPattern}\n * @throws {Error}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-createpattern\n */\nBaseRenderingContext2D.prototype.createPattern = function(\n image, repetition) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clearRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeRect = function(x, y, w, h) {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.beginPath = function() {};\n\n/**\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.quadraticCurveTo = function(\n cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} rotation\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @see http://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/ellipse\n */\nBaseRenderingContext2D.prototype.ellipse = function(\n x, y, radiusX, radiusY, rotation, startAngle, endAngle, opt_anticlockwise) {\n};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fill = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {Path2D=} optStroke\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.stroke = function(optStroke) {};\n\n/**\n * @param {Element} element\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawFocusIfNeeded = function(element) {};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clip = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInStroke\n */\nBaseRenderingContext2D.prototype.isPointInStroke = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {string=} opt_fillRule\n * @return {boolean}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.isPointInPath = function(\n x, y, opt_fillRule) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @return {!TextMetrics}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.measureText = function(text) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {number} dx Destination x coordinate.\n * @param {number} dy Destination y coordinate.\n * @param {number=} opt_dw Destination box width. Defaults to the image width.\n * @param {number=} opt_dh Destination box height.\n * Defaults to the image height.\n * @param {number=} opt_sx Source box x coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sy Source box y coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sw Source box width. Used to select a portion of\n * the source image to draw. Defaults to the full image width.\n * @param {number=} opt_sh Source box height. Used to select a portion of\n * the source image to draw. Defaults to the full image height.\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawImage = function(\n image, dx, dy, opt_dw, opt_dh, opt_sx, opt_sy, opt_sw, opt_sh) {};\n\n/**\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.createImageData = function(sw, sh) {};\n\n/**\n * @param {number} sx\n * @param {number} sy\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {};\n\n/**\n * @param {ImageData} imagedata\n * @param {number} dx\n * @param {number} dy\n * @param {number=} opt_dirtyX\n * @param {number=} opt_dirtyY\n * @param {number=} opt_dirtyWidth\n * @param {number=} opt_dirtyHeight\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy,\n opt_dirtyX, opt_dirtyY, opt_dirtyWidth, opt_dirtyHeight) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setFillColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setStrokeColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * @return {!Array}\n * @override\n */\nBaseRenderingContext2D.prototype.getLineDash = function() {};\n\n/**\n * @param {Array} segments\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.setLineDash = function(segments) {};\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.fillColor;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-fillstyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.fillStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.font;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.globalAlpha;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.globalCompositeOperation;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineWidth;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineCap;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineJoin;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.miterLimit;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowBlur;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.shadowColor;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetX;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetY;\n\n/** @type {boolean} */\nBaseRenderingContext2D.prototype.imageSmoothingEnabled;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-strokestyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.strokeStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.strokeColor;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textAlign;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textBaseline;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineDashOffset;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction CanvasRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement} */\nCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction OffscreenCanvasRenderingContext2D() {}\n\n/** @const {!OffscreenCanvas} */\nOffscreenCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n */\nfunction CanvasGradient() {}\n\n/**\n * @param {number} offset\n * @param {string} color\n * @return {undefined}\n */\nCanvasGradient.prototype.addColorStop = function(offset, color) {};\n\n/**\n * @constructor\n */\nfunction CanvasPattern() {}\n\n/**\n * @constructor\n */\nfunction TextMetrics() {}\n\n/** @const {number} */\nTextMetrics.prototype.width;\n\n/**\n * @param {!Uint8ClampedArray|number} dataOrWidth In the first form, this is the\n * array of pixel data. In the second form, this is the image width.\n * @param {number} widthOrHeight In the first form, this is the image width. In\n * the second form, this is the image height.\n * @param {number=} opt_height In the first form, this is the optional image\n * height. The second form omits this argument.\n * @see https://html.spec.whatwg.org/multipage/scripting.html#imagedata\n * @constructor\n */\nfunction ImageData(dataOrWidth, widthOrHeight, opt_height) {}\n\n/** @const {!Uint8ClampedArray} */\nImageData.prototype.data;\n\n/** @const {number} */\nImageData.prototype.width;\n\n/** @const {number} */\nImageData.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html51/webappapis.html#webappapis-images\n * @interface\n */\nfunction ImageBitmap() {}\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.width;\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.height;\n\n/**\n * @typedef {{\n * imageOrientation: (string|undefined),\n * premultiplyAlpha: (string|undefined),\n * colorSpaceConversion: (string|undefined),\n * resizeWidth: (number|undefined),\n * resizeHeight: (number|undefined),\n * resizeQuality: (string|undefined)\n * }}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#images-2\n */\nvar ImageBitmapOptions;\n\n/**\n * @param {(!HTMLCanvasElement|!Blob|!HTMLVideoElement|!HTMLImageElement|!ImageBitmap|!CanvasRenderingContext2D|!ImageData)}\n * image\n * @param {(number|!ImageBitmapOptions)=} sxOrOptions\n * @param {number=} sy\n * @param {number=} sw\n * @param {number=} sh\n * @param {!ImageBitmapOptions=} options\n * @return {!Promise}\n * @see * https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#dom-createimagebitmap\n */\nfunction createImageBitmap(image, sxOrOptions, sy, sw, sh, options) {}\n\n\n/**\n * @constructor\n */\nfunction ClientInformation() {}\n\n/** @type {boolean} */\nClientInformation.prototype.onLine;\n\n/**\n * @param {string} protocol\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerProtocolHandler = function(\n protocol, uri, title) {};\n\n/**\n * @param {string} mimeType\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerContentHandler = function(\n mimeType, uri, title) {};\n\n// HTML5 Database objects\n/**\n * @constructor\n */\nfunction Database() {}\n\n/**\n * @type {string}\n */\nDatabase.prototype.version;\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.transaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.readTransaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {string} oldVersion\n * @param {string} newVersion\n * @param {function(!SQLTransaction) : void} callback\n * @param {function(!SQLError) : void} errorCallback\n * @param {Function} successCallback\n * @return {undefined}\n */\nDatabase.prototype.changeVersion = function(\n oldVersion, newVersion, callback, errorCallback, successCallback) {};\n\n/**\n * @interface\n */\nfunction DatabaseCallback() {}\n\n/**\n * @param {!Database} db\n * @return {undefined}\n */\nDatabaseCallback.prototype.handleEvent = function(db) {};\n\n/**\n * @constructor\n */\nfunction SQLError() {}\n\n/**\n * @type {number}\n */\nSQLError.prototype.code;\n\n/**\n * @type {string}\n */\nSQLError.prototype.message;\n\n/**\n * @constructor\n */\nfunction SQLTransaction() {}\n\n/**\n * @param {string} sqlStatement\n * @param {Array<*>=} opt_queryArgs\n * @param {SQLStatementCallback=} opt_callback\n * @param {(function(!SQLTransaction, !SQLError) : (boolean|void))=}\n * opt_errorCallback\n * @return {undefined}\n */\nSQLTransaction.prototype.executeSql = function(\n sqlStatement, opt_queryArgs, opt_callback, opt_errorCallback) {};\n\n/**\n * @typedef {(function(!SQLTransaction, !SQLResultSet) : void)}\n */\nvar SQLStatementCallback;\n\n/**\n * @constructor\n */\nfunction SQLResultSet() {}\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.insertId;\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.rowsAffected;\n\n/**\n * @type {!SQLResultSetRowList}\n */\nSQLResultSet.prototype.rows;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/webdatabase/#sqlresultsetrowlist\n */\nfunction SQLResultSetRowList() {}\n\n/**\n * @type {number}\n */\nSQLResultSetRowList.prototype.length;\n\n/**\n * @param {number} index\n * @return {Object}\n * @nosideeffects\n */\nSQLResultSetRowList.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nfunction openDatabase(name, version, description, size, opt_callback) {}\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nWindow.prototype.openDatabase =\n function(name, version, description, size, opt_callback) {};\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-complete\n */\nHTMLImageElement.prototype.complete;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalwidth\n */\nHTMLImageElement.prototype.naturalWidth;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalheight\n */\nHTMLImageElement.prototype.naturalHeight;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-crossorigin\n */\nHTMLImageElement.prototype.crossOrigin;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-currentsrc\n */\nHTMLImageElement.prototype.currentSrc;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/images.html#image-decoding-hint\n */\nHTMLImageElement.prototype.decoding;\n\n/**\n * @return {!Promise}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode\n */\nHTMLImageElement.prototype.decode;\n\n\n/**\n * This is a superposition of the Window and Worker postMessage methods.\n * @param {*} message\n * @param {(string|!Array)=} opt_targetOriginOrTransfer\n * @param {(string|!Array|!Array)=}\n * opt_targetOriginOrPortsOrTransfer\n * @return {void}\n */\nfunction postMessage(message, opt_targetOriginOrTransfer,\n opt_targetOriginOrPortsOrTransfer) {}\n\n/**\n * @param {*} message\n * @param {string=} targetOrigin\n * @param {(!Array)=} transfer\n * @return {void}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage\n */\nWindow.prototype.postMessage = function(message, targetOrigin, transfer) {};\n\n/**\n * The postMessage method (as implemented in Opera).\n * @param {string} message\n */\nDocument.prototype.postMessage = function(message) {};\n\n/**\n * Document head accessor.\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#the-head-element-0\n * @type {HTMLHeadElement}\n */\nDocument.prototype.head;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/dom.html#current-document-readiness\n */\nDocument.prototype.readyState;\n\n/**\n * @see https://html.spec.whatwg.org/#application-cache-api\n * @constructor\n * @implements {EventTarget}\n */\nfunction ApplicationCache() {}\n\n/** @override */\nApplicationCache.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.dispatchEvent = function(evt) {};\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.prototype.UNCACHED;\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.UNCACHED;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.prototype.IDLE;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.IDLE;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.prototype.CHECKING;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.CHECKING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.prototype.DOWNLOADING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.DOWNLOADING;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.prototype.UPDATEREADY;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.UPDATEREADY;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.prototype.OBSOLETE;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.OBSOLETE;\n\n/**\n * The current status of the application cache.\n * @type {number}\n */\nApplicationCache.prototype.status;\n\n/**\n * Sent when the update process finishes for the first time; that is, the first\n * time an application cache is saved.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.oncached;\n\n/**\n * Sent when the cache update process begins.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onchecking;\n\n/**\n * Sent when the update process begins downloading resources in the manifest\n * file.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.ondownloading;\n\n/**\n * Sent when an error occurs.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onerror;\n\n/**\n * Sent when the update process finishes but the manifest file does not change.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onnoupdate;\n\n/**\n * Sent when each resource in the manifest file begins to download.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onprogress;\n\n/**\n * Sent when there is an existing application cache, the update process\n * finishes, and there is a new application cache ready for use.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onupdateready;\n\n/**\n * Replaces the active cache with the latest version.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.swapCache = function() {};\n\n/**\n * Manually triggers the update process.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.update = function() {};\n\n/** @type {?ApplicationCache} */\nvar applicationCache;\n\n/** @type {ApplicationCache} */\nWindow.prototype.applicationCache;\n\n/**\n * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nWindow.prototype.importScripts = function(var_args) {};\n\n/**\n * Decodes a string of data which has been encoded using base-64 encoding.\n *\n * @param {string} encodedData\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-atob\n */\nfunction atob(encodedData) {}\n\n/**\n * @param {string} stringToEncode\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-btoa\n */\nfunction btoa(stringToEncode) {}\n\n/**\n * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nfunction importScripts(var_args) {}\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @constructor\n * @implements {EventTarget}\n */\nfunction WebWorker() {}\n\n/** @override */\nWebWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWebWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {string} message\n * @return {undefined}\n */\nWebWorker.prototype.postMessage = function(message) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWebWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWebWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL\n * @param {!WorkerOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n */\nfunction Worker(scriptURL, opt_options) {}\n\n/** @override */\nWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.postMessage = function(message, opt_transfer) {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.webkitPostMessage = function(message, opt_transfer) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @record\n */\nfunction WorkerOptions() {}\n\n/**\n * Defines a name for the new global environment of the worker, primarily for\n * debugging purposes.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.name;\n\n/**\n * 'classic' or 'module'. Default: 'classic'.\n * Specifying 'module' ensures the worker environment supports JavaScript\n * modules.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.type;\n\n// WorkerOptions.prototype.credentials is defined in fetchapi.js.\n// if type = 'module', it specifies how scriptURL is fetched.\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL The URL of the script to run in the SharedWorker.\n * @param {string=} opt_name A name that can later be used to obtain a\n * reference to the same SharedWorker.\n * @constructor\n * @implements {EventTarget}\n */\nfunction SharedWorker(scriptURL, opt_name) {}\n\n/** @override */\nSharedWorker.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MessagePort}\n */\nSharedWorker.prototype.port;\n\n/**\n * Called on network errors for loading the initial script.\n * @type {?function(!ErrorEvent): void}\n */\nSharedWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @see http://www.w3.org/TR/url-1/#dom-urlutilsreadonly\n * @interface\n */\nfunction WorkerLocation() {}\n\n/** @type {string} */\nWorkerLocation.prototype.href;\n\n/** @type {string} */\nWorkerLocation.prototype.origin;\n\n/** @type {string} */\nWorkerLocation.prototype.protocol;\n\n/** @type {string} */\nWorkerLocation.prototype.host;\n\n/** @type {string} */\nWorkerLocation.prototype.hostname;\n\n/** @type {string} */\nWorkerLocation.prototype.port;\n\n/** @type {string} */\nWorkerLocation.prototype.pathname;\n\n/** @type {string} */\nWorkerLocation.prototype.search;\n\n/** @type {string} */\nWorkerLocation.prototype.hash;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {EventTarget}\n */\nfunction WorkerGlobalScope() {}\n\n/** @type {!WorkerGlobalScope} */\nWorkerGlobalScope.prototype.self;\n\n/** @type {!WorkerLocation} */\nWorkerGlobalScope.prototype.location;\n\n/**\n * Closes the worker represented by this WorkerGlobalScope.\n * @return {undefined}\n */\nWorkerGlobalScope.prototype.close = function() {};\n\n/**\n * Sent when the worker encounters an error.\n * @type {?function(string, string, number, number, !Error): void}\n */\nWorkerGlobalScope.prototype.onerror;\n\n/**\n * Sent when the worker goes offline.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.onoffline;\n\n/**\n * Sent when the worker goes online.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.ononline;\n\n/** @type {!WorkerPerformance} */\nWorkerGlobalScope.prototype.performance;\n\n/** @type {!WorkerNavigator} */\nWorkerGlobalScope.prototype.navigator;\n\n/**\n * Worker postMessage method.\n * @param {*} message\n * @param {(!Array)=} transfer\n * @return {void}\n */\nWorkerGlobalScope.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction DedicatedWorkerGlobalScope() {}\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.postMessage =\n function(message, opt_transfer) {};\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.webkitPostMessage =\n function(message, opt_transfer) {};\n\n/**\n * Sent when the creator posts a message to this worker.\n * @type {?function(!MessageEvent<*>): void}\n */\nDedicatedWorkerGlobalScope.prototype.onmessage;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction SharedWorkerGlobalScope() {}\n\n/** @type {string} */\nSharedWorkerGlobalScope.prototype.name;\n\n/**\n * Sent when a connection to this worker is opened.\n * @type {?function(!Event)}\n */\nSharedWorkerGlobalScope.prototype.onconnect;\n\n/** @type {!Array|undefined} */\nHTMLElement.observedAttributes;\n\n/**\n * @param {!Document} oldDocument\n * @param {!Document} newDocument\n */\nHTMLElement.prototype.adoptedCallback = function(oldDocument, newDocument) {};\n\n/**\n * @param {!{mode: string}} options\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.attachShadow = function(options) {};\n\n/**\n * @param {string} attributeName\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\nHTMLElement.prototype.attributeChangedCallback = function(attributeName, oldValue, newValue, namespace) {};\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.connectedCallback;\n\n/** @type {Element} */\nHTMLElement.prototype.contextMenu;\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.disconnectedCallback;\n\n/** @type {boolean} */\nHTMLElement.prototype.draggable;\n\n/**\n * This is actually a DOMSettableTokenList property. However since that\n * interface isn't currently defined and no known browsers implement this\n * feature, just define the property for now.\n *\n * @const {Object}\n */\nHTMLElement.prototype.dropzone;\n\n/** @type {boolean} */\nHTMLElement.prototype.hidden;\n\n/** @type {boolean} */\nHTMLElement.prototype.spellcheck;\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions\n * @typedef {{\n * composed: boolean\n * }}\n */\nvar GetRootNodeOptions;\n\n/**\n * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n * @param {GetRootNodeOptions=} opt_options\n * @return {!Node}\n */\nNode.prototype.getRootNode = function(opt_options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.createShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.webkitCreateShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @type {ShadowRoot}\n */\nHTMLElement.prototype.shadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nHTMLElement.prototype.getDestinationInsertionPoints = function() {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @type {function()}\n */\nHTMLElement.prototype.createdCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.attachedCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.detachedCallback;\n\n/**\n * Cryptographic nonce used by Content Security Policy.\n * @see https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom:noncedelement\n * @type {?string}\n */\nHTMLElement.prototype.nonce;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.download;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hash;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.host;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hostname;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.pathname;\n\n/**\n * The 'ping' attribute is known to be supported in recent versions (as of\n * mid-2014) of Chrome, Safari, and Firefox, and is not supported in any\n * current version of Internet Explorer.\n *\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAnchorElement.prototype.ping;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.port;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.protocol;\n\n/** @type {!DOMTokenList} */\nHTMLAnchorElement.prototype.relList;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.search;\n\n/** @type {string} */\nHTMLAreaElement.prototype.download;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAreaElement.prototype.ping;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html-markup/iframe.html#iframe.attrs.srcdoc\n */\nHTMLIFrameElement.prototype.srcdoc;\n\n/**\n * @type {?DOMTokenList}\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-iframe-element.html#attr-iframe-sandbox\n */\nHTMLIFrameElement.prototype.sandbox;\n\n/**\n * @type {Window}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/contentWindow\n */\nHTMLIFrameElement.prototype.contentWindow;\n\n/** @type {string} */\nHTMLInputElement.prototype.autocomplete;\n\n/** @type {string} */\nHTMLInputElement.prototype.dirname;\n\n/** @type {FileList} */\nHTMLInputElement.prototype.files;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-input-indeterminate\n */\nHTMLInputElement.prototype.indeterminate;\n\n/** @type {string} */\nHTMLInputElement.prototype.list;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.max;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.min;\n\n/** @type {string} */\nHTMLInputElement.prototype.pattern;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.multiple;\n\n/** @type {string} */\nHTMLInputElement.prototype.placeholder;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.required;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.step;\n\n/** @type {Date} */\nHTMLInputElement.prototype.valueAsDate;\n\n/** @type {number} */\nHTMLInputElement.prototype.valueAsNumber;\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepDown = function(opt_n) {};\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepUp = function(opt_n) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement\n */\nfunction HTMLMediaElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_ENOUGH_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_ENOUGH_DATA;\n\n/** @type {MediaError} */\nHTMLMediaElement.prototype.error;\n\n/** @type {string} @implicitCast */\nHTMLMediaElement.prototype.src;\n\n/** @type {string} */\nHTMLMediaElement.prototype.currentSrc;\n\n/** @type {number} */\nHTMLMediaElement.prototype.networkState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autobuffer;\n\n/** @type {!TimeRanges} */\nHTMLMediaElement.prototype.buffered;\n\n/** @type {?MediaStream} */\nHTMLMediaElement.prototype.srcObject;\n\n/**\n * Loads the media element.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.load = function() {};\n\n/**\n * @param {string} type Type of the element in question in question.\n * @return {string} Whether it can play the type.\n * @nosideeffects\n */\nHTMLMediaElement.prototype.canPlayType = function(type) {};\n\n/** Event handlers */\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onabort;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplaythrough;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ondurationchange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onemptied;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onended;\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onerror;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadeddata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadedmetadata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadstart;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onpause;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplaying;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onprogress;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onratechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeked;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeking;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onstalled;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onsuspend;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ontimeupdate;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onvolumechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onwaiting;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onload;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onerror;\n\n/** @type {string} */\nHTMLMediaElement.prototype.preload;\n\n/** @type {number} */\nHTMLMediaElement.prototype.readyState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.seeking;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-crossorigin\n */\nHTMLMediaElement.prototype.crossOrigin;\n\n/**\n * The current time, in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.currentTime;\n\n/**\n * The absolute timeline offset.\n * @return {!Date}\n */\nHTMLMediaElement.prototype.getStartDate = function() {};\n\n/**\n * The length of the media in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.duration;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.paused;\n\n/** @type {number} */\nHTMLMediaElement.prototype.defaultPlaybackRate;\n\n/** @type {number} */\nHTMLMediaElement.prototype.playbackRate;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.played;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.seekable;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.ended;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autoplay;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.loop;\n\n/**\n * Starts playing the media.\n * @return {?Promise} This is a *nullable* Promise on purpose unlike\n * the HTML5 spec because supported older browsers (incl. Smart TVs) don't\n * return a Promise.\n */\nHTMLMediaElement.prototype.play = function() {};\n\n/**\n * Pauses the media.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.pause = function() {};\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.controls;\n\n/**\n * The audio volume, from 0.0 (silent) to 1.0 (loudest).\n * @type {number}\n */\nHTMLMediaElement.prototype.volume;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.muted;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-addtexttrack\n * @param {string} kind Kind of the text track.\n * @param {string=} opt_label Label of the text track.\n * @param {string=} opt_language Language of the text track.\n * @return {!TextTrack} TextTrack object added to the media element.\n */\nHTMLMediaElement.prototype.addTextTrack =\n function(kind, opt_label, opt_language) {};\n\n/** @type {!TextTrackList} */\nHTMLMediaElement.prototype.textTracks;\n\n/**\n * The ID of the audio device through which output is being delivered, or an\n * empty string if using the default device.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @type {string}\n */\nHTMLMediaElement.prototype.sinkId;\n\n/**\n * Sets the audio device through which output should be delivered.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @param {string} sinkId The ID of the audio output device, or empty string\n * for default device.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @return {!Promise}\n */\nHTMLMediaElement.prototype.setSinkId = function(sinkId) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://html.spec.whatwg.org/multipage/dom.html#htmlunknownelement\n * @see https://html.spec.whatwg.org/multipage/scripting.html#customized-built-in-element-restrictions\n * @see https://w3c.github.io/webcomponents/spec/custom/#custom-elements-api\n */\nfunction HTMLUnknownElement() {}\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nText.prototype.getDestinationInsertionPoints = function() {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackList() {}\n\n/** @type {number} */\nTextTrackList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrack}\n */\nTextTrackList.prototype.getTrackById = function(id) {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack\n * @constructor\n * @implements {EventTarget}\n */\nfunction TextTrack() {}\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.addCue = function(cue) {};\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.removeCue = function(cue) {};\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.activeCues;\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.cues;\n\n/**\n * @type {string}\n */\nTextTrack.prototype.mode;\n\n/** @override */\nTextTrack.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/** @override */\nTextTrack.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nTextTrack.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcuelist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackCueList() {}\n\n/** @const {number} */\nTextTrackCueList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrackCue}\n */\nTextTrackCueList.prototype.getCueById = function(id) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcue\n * @constructor\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction TextTrackCue(startTime, endTime, text) {}\n\n/** @type {string} */\nTextTrackCue.prototype.id;\n\n/** @type {number} */\nTextTrackCue.prototype.startTime;\n\n/** @type {number} */\nTextTrackCue.prototype.endTime;\n\n/** @type {string} */\nTextTrackCue.prototype.text;\n\n\n\n/**\n * @see https://w3c.github.io/webvtt/#vttregion\n * @constructor\n */\nfunction VTTRegion() {}\n\n/** @type {string} */\nVTTRegion.prototype.id;\n\n/** @type {number} */\nVTTRegion.prototype.width;\n\n/** @type {number} */\nVTTRegion.prototype.lines;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorY;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorY;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-scrollsetting\n * @type {string}\n */\nVTTRegion.prototype.scroll;\n\n\n\n/**\n * @see http://dev.w3.org/html5/webvtt/#the-vttcue-interface\n * @constructor\n * @extends {TextTrackCue}\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction VTTCue(startTime, endTime, text) {}\n\n/** @type {?VTTRegion} */\nVTTCue.prototype.region;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-directionsetting\n * @type {string}\n */\nVTTCue.prototype.vertical;\n\n/** @type {boolean} */\nVTTCue.prototype.snapToLines;\n\n/** @type {(number|string)} */\nVTTCue.prototype.line;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-linealignsetting\n * @type {string}\n */\nVTTCue.prototype.lineAlign;\n\n/** @type {(number|string)} */\nVTTCue.prototype.position;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-positionalignsetting\n * @type {string}\n */\nVTTCue.prototype.positionAlign;\n\n/** @type {number} */\nVTTCue.prototype.size;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-alignsetting\n * @type {string}\n */\nVTTCue.prototype.align;\n\n/** @type {string} */\nVTTCue.prototype.text;\n\n/** @return {!DocumentFragment} */\nVTTCue.prototype.getCueAsHTML = function() {};\n\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n */\nfunction HTMLAudioElement() {}\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n * The webkit-prefixed attributes are defined in\n * https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/html/media/HTMLMediaElement.idl\n */\nfunction HTMLVideoElement() {}\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullscreen = function() {};\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullScreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullscreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullScreen = function() {};\n\n/** @type {number} */\nHTMLVideoElement.prototype.width;\n\n/** @type {number} */\nHTMLVideoElement.prototype.height;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoWidth;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoHeight;\n\n/** @type {string} */\nHTMLVideoElement.prototype.poster;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitSupportsFullscreen;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitDisplayingFullscreen;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDecodedFrameCount;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDroppedFrameCount;\n\n/**\n * @typedef {{\n * creationTime: number,\n * totalVideoFrames: number,\n * droppedVideoFrames: number,\n * corruptedVideoFrames: number,\n * totalFrameDelay: number\n * }}\n */\nvar VideoPlaybackQuality;\n\n/**\n * @see https://w3c.github.io/media-source/#htmlvideoelement-extensions\n * @return {!VideoPlaybackQuality} Stats about the current playback.\n */\nHTMLVideoElement.prototype.getVideoPlaybackQuality = function() {};\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/media.html#error-codes\n */\nfunction MediaError() {}\n\n/** @type {number} */\nMediaError.prototype.code;\n\n/** @type {string} */\nMediaError.prototype.message;\n\n/**\n * The fetching process for the media resource was aborted by the user agent at\n * the user's request.\n * @const {number}\n */\nMediaError.MEDIA_ERR_ABORTED;\n\n/**\n * A network error of some description caused the user agent to stop fetching\n * the media resource, after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_NETWORK;\n\n/**\n * An error of some description occurred while decoding the media resource,\n * after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_DECODE;\n\n/**\n * The media resource indicated by the src attribute was not suitable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;\n\n// HTML5 MessageChannel\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messagechannel\n * @constructor\n */\nfunction MessageChannel() {}\n\n/**\n * Returns the first port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port1;\n\n/**\n * Returns the second port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port2;\n\n// HTML5 MessagePort\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messageport\n * @constructor\n * @implements {EventTarget}\n * @implements {Transferable}\n */\nfunction MessagePort() {}\n\n/** @override */\nMessagePort.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMessagePort.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMessagePort.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Posts a message through the channel, optionally with the given\n * Array of Transferables.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nMessagePort.prototype.postMessage = function(message, opt_transfer) {\n};\n\n/**\n * Begins dispatching messages received on the port.\n * @return {undefined}\n */\nMessagePort.prototype.start = function() {};\n\n/**\n * Disconnects the port, so that it is no longer active.\n * @return {undefined}\n */\nMessagePort.prototype.close = function() {};\n\n/**\n * TODO(blickly): Change this to MessageEvent<*> and add casts as needed\n * @type {?function(!MessageEvent): void}\n */\nMessagePort.prototype.onmessage;\n\n// HTML5 MessageEvent class\n/**\n * @typedef {Window|MessagePort|ServiceWorker}\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventsource\n */\nvar MessageEventSource;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventinit\n */\nfunction MessageEventInit() {}\n\n/** @type {T|undefined} */\nMessageEventInit.prototype.data;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.origin;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.lastEventId;\n\n/** @type {(?MessageEventSource|undefined)} */\nMessageEventInit.prototype.source;\n\n/** @type {(!Array|undefined)} */\nMessageEventInit.prototype.ports;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {MessageEventInit=} opt_eventInitDict\n * @template T\n */\nfunction MessageEvent(type, opt_eventInitDict) {}\n\n/**\n * The data payload of the message.\n * @type {T}\n */\nMessageEvent.prototype.data;\n\n/**\n * The origin of the message, for server-sent events and cross-document\n * messaging.\n * @type {string}\n */\nMessageEvent.prototype.origin;\n\n/**\n * The last event ID, for server-sent events.\n * @type {string}\n */\nMessageEvent.prototype.lastEventId;\n\n/**\n * The window that dispatched the event.\n * @type {Window}\n */\nMessageEvent.prototype.source;\n\n/**\n * The Array of MessagePorts sent with the message, for cross-document\n * messaging and channel messaging.\n * @type {!Array}\n */\nMessageEvent.prototype.ports;\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEvent = function(typeArg, canBubbleArg,\n cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {};\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} namespaceURI\n * @param {string=} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEventNS = function(namespaceURI, typeArg,\n canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg,\n portsArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html#the-closeevent-interface\n */\nfunction CloseEventInit() {}\n\n/**\n * @type {undefined|boolean}\n */\nCloseEventInit.prototype.wasClean;\n\n/**\n * @type {undefined|number}\n */\nCloseEventInit.prototype.code;\n\n/**\n * @type {undefined|string}\n */\nCloseEventInit.prototype.reason;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!CloseEventInit=} opt_init\n */\nvar CloseEvent = function(type, opt_init) {};\n\n/**\n * @type {boolean}\n */\nCloseEvent.prototype.wasClean;\n\n/**\n * @type {number}\n */\nCloseEvent.prototype.code;\n\n/**\n * @type {string}\n */\nCloseEvent.prototype.reason;\n\n/**\n * HTML5 BroadcastChannel class.\n * @param {string} channelName\n * @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n * @see https://html.spec.whatwg.org/multipage/comms.html#dom-broadcastchannel\n * @implements {EventTarget}\n * @constructor\n */\nfunction BroadcastChannel(channelName) {}\n\n/**\n * Sends the message, of any type of object, to each BroadcastChannel object\n * listening to the same channel.\n * @param {*} message\n */\nBroadcastChannel.prototype.postMessage = function(message) {};\n\n/**\n * Closes the channel object, indicating it won't get any new messages, and\n * allowing it to be, eventually, garbage collected.\n * @return {void}\n */\nBroadcastChannel.prototype.close = function() {};\n\n/** @override */\nBroadcastChannel.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nBroadcastChannel.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nBroadcastChannel.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * An EventHandler property that specifies the function to execute when a\n * message event is fired on this object.\n * @type {?function(!MessageEvent<*>)}\n */\nBroadcastChannel.prototype.onmessage;\n\n/**\n * The name of the channel.\n * @type {string}\n */\nBroadcastChannel.prototype.name;\n\n/**\n * HTML5 DataTransfer class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransfer() {}\n\n/** @type {string} */\nDataTransfer.prototype.dropEffect;\n\n/** @type {string} */\nDataTransfer.prototype.effectAllowed;\n\n/** @type {!Array} */\nDataTransfer.prototype.types;\n\n/** @type {!FileList} */\nDataTransfer.prototype.files;\n\n/**\n * @param {string=} opt_format Format for which to remove data.\n * @return {undefined}\n */\nDataTransfer.prototype.clearData = function(opt_format) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @param {string} data Data to add.\n * @return {boolean}\n */\nDataTransfer.prototype.setData = function(format, data) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @return {string} Data for the given format.\n */\nDataTransfer.prototype.getData = function(format) { return ''; };\n\n/**\n * @param {HTMLElement} img The image to use when dragging.\n * @param {number} x Horizontal position of the cursor.\n * @param {number} y Vertical position of the cursor.\n * @return {undefined}\n */\nDataTransfer.prototype.setDragImage = function(img, x, y) {};\n\n/**\n * @param {HTMLElement} elem Element to receive drag result events.\n * @return {undefined}\n */\nDataTransfer.prototype.addElement = function(elem) {};\n\n/**\n * Addition for accessing clipboard file data that are part of the proposed\n * HTML5 spec.\n * @type {DataTransfer}\n */\nMouseEvent.prototype.dataTransfer;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see https://w3c.github.io/uievents/#idl-wheeleventinit\n */\nfunction WheelEventInit() {}\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaX;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaY;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaZ;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaMode;\n\n/**\n * @param {string} type\n * @param {WheelEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-WheelEvent\n * @constructor\n * @extends {MouseEvent}\n */\nfunction WheelEvent(type, opt_eventInitDict) {}\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PIXEL;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_LINE;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PAGE;\n\n/** @const {number} */\nWheelEvent.prototype.deltaX;\n\n/** @const {number} */\nWheelEvent.prototype.deltaY;\n\n/** @const {number} */\nWheelEvent.prototype.deltaZ;\n\n/** @const {number} */\nWheelEvent.prototype.deltaMode;\n\n/**\n * HTML5 DataTransferItem class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransferItem() {}\n\n/** @type {string} */\nDataTransferItem.prototype.kind;\n\n/** @type {string} */\nDataTransferItem.prototype.type;\n\n/**\n * @param {function(string)} callback\n * @return {undefined}\n */\nDataTransferItem.prototype.getAsString = function(callback) {};\n\n/**\n * @return {?File} The file corresponding to this item, or null.\n * @nosideeffects\n */\nDataTransferItem.prototype.getAsFile = function() { return null; };\n\n/**\n * HTML5 DataTransferItemList class. There are some discrepancies in the docs\n * on the whatwg.org site. When in doubt, these prototypes match what is\n * implemented as of Chrome 30.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n * @implements {IArrayLike}\n */\nfunction DataTransferItemList() {}\n\n/** @type {number} */\nDataTransferItemList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {DataTransferItem} The ith DataTransferItem in the list, or null.\n * @nosideeffects\n */\nDataTransferItemList.prototype.item = function(i) { return null; };\n\n/**\n * Adds an item to the list.\n * @param {string|!File} data Data for the item being added.\n * @param {string=} opt_type Mime type of the item being added. MUST be present\n * if the {@code data} parameter is a string.\n * @return {DataTransferItem}\n */\nDataTransferItemList.prototype.add = function(data, opt_type) {};\n\n/**\n * Removes an item from the list.\n * @param {number} i File to remove from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.remove = function(i) {};\n\n/**\n * Removes all items from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.clear = function() {};\n\n/** @type {!DataTransferItemList} */\nDataTransfer.prototype.items;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see http://w3c.github.io/html/editing.html#dictdef-drageventinit\n */\nfunction DragEventInit() {}\n\n/** @type {undefined|?DataTransfer} */\nDragEventInit.prototype.dataTransfer;\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dragevent-interface\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {DragEventInit=} opt_eventInitDict\n */\nfunction DragEvent(type, opt_eventInitDict) {}\n\n/** @type {DataTransfer} */\nDragEvent.prototype.dataTransfer;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/progress-events/#progresseventinit\n */\nfunction ProgressEventInit() {}\n\n/** @type {undefined|boolean} */\nProgressEventInit.prototype.lengthComputable;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.loaded;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.total;\n\n/**\n * @constructor\n * @template TARGET\n * @param {string} type\n * @param {ProgressEventInit=} opt_progressEventInitDict\n * @extends {Event}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent\n */\nfunction ProgressEvent(type, opt_progressEventInitDict) {}\n\n/**\n * @override\n * @type {TARGET}\n */\nProgressEvent.prototype.target;\n\n/** @type {number} */\nProgressEvent.prototype.total;\n\n/** @type {number} */\nProgressEvent.prototype.loaded;\n\n/** @type {boolean} */\nProgressEvent.prototype.lengthComputable;\n\n\n/**\n * @constructor\n */\nfunction TimeRanges() {}\n\n/** @type {number} */\nTimeRanges.prototype.length;\n\n/**\n * @param {number} index The index.\n * @return {number} The start time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.start = function(index) { return 0; };\n\n/**\n * @param {number} index The index.\n * @return {number} The end time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.end = function(index) { return 0; };\n\n\n// HTML5 Web Socket class\n/**\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html\n * @constructor\n * @param {string} url\n * @param {(string|!Array)=} opt_protocol\n * @implements {EventTarget}\n */\nfunction WebSocket(url, opt_protocol) {}\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.CONNECTING;\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.prototype.CONNECTING;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.OPEN;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.prototype.OPEN;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.CLOSING;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.prototype.CLOSING;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.CLOSED;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.prototype.CLOSED;\n\n/** @override */\nWebSocket.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Returns the URL value that was passed to the constructor.\n * @type {string}\n */\nWebSocket.prototype.url;\n\n/**\n * Represents the state of the connection.\n * @type {number}\n */\nWebSocket.prototype.readyState;\n\n/**\n * Returns the number of bytes that have been queued but not yet sent.\n * @type {number}\n */\nWebSocket.prototype.bufferedAmount;\n\n/**\n * An event handler called on error event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onerror;\n\n/**\n * An event handler called on open event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onopen;\n\n/**\n * An event handler called on message event.\n * @type {?function(!MessageEvent): void}\n */\nWebSocket.prototype.onmessage;\n\n/**\n * An event handler called on close event.\n * @type {?function(!CloseEvent): void}\n */\nWebSocket.prototype.onclose;\n\n/**\n * Transmits data using the connection.\n * @param {string|!ArrayBuffer|!ArrayBufferView|!Blob} data\n * @return {void}\n */\nWebSocket.prototype.send = function(data) {};\n\n/**\n * Closes the Web Socket connection or connection attempt, if any.\n * @param {number=} opt_code\n * @param {string=} opt_reason\n * @return {undefined}\n */\nWebSocket.prototype.close = function(opt_code, opt_reason) {};\n\n/**\n * @type {string} Sets the type of data (blob or arraybuffer) for binary data.\n */\nWebSocket.prototype.binaryType;\n\n// HTML5 History\n/**\n * @constructor\n * @see http://w3c.github.io/html/browsers.html#the-history-interface\n */\nfunction History() {}\n\n/**\n * Goes back one step in the joint session history.\n * If there is no previous page, does nothing.\n *\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-history-back\n * @param {number=} opt_distance the number of entries to go back\n * (Mozilla doesn't support distance -- use #go instead)\n *\n * @return {undefined}\n */\nHistory.prototype.back = function(opt_distance) {};\n\n/**\n * Goes forward one step in the joint session history.\n * If there is no next page, does nothing.\n *\n * @return {undefined}\n */\nHistory.prototype.forward = function() {};\n\n/**\n * The number of entries in the joint session history.\n *\n * @type {number}\n */\nHistory.prototype.length;\n\n/**\n * Goes back or forward the specified number of steps in the joint session\n * history. A zero delta will reload the current page. If the delta is out of\n * range, does nothing.\n *\n * @param {number} delta The number of entries to go back.\n * @return {undefined}\n */\nHistory.prototype.go = function(delta) {};\n\n/**\n * Pushes a new state into the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a new session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.pushState = function(data, title, opt_url) {};\n\n/**\n * Replaces the current state in the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.replaceState = function(data, title, opt_url) {};\n\n/**\n * Pending state object.\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#Reading_the_current_state\n * @type {*}\n */\nHistory.prototype.state;\n\n/**\n * Allows web applications to explicitly set default scroll restoration behavior\n * on history navigation. This property can be either auto or manual.\n *\n * Non-standard. Only supported in Chrome 46+.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/History\n * @see https://majido.github.io/scroll-restoration-proposal/history-based-api.html\n * @type {string}\n */\nHistory.prototype.scrollRestoration;\n\n/**\n * Add history property to Window.\n *\n * @type {!History}\n */\nWindow.prototype.history;\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface\n */\nfunction Location() {}\n\n/**\n * Returns the Location object's URL. Can be set, to navigate to the given URL.\n * @implicitCast\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-href\n */\nLocation.prototype.href;\n\n/**\n * Returns the Location object's URL's origin.\n * @const {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-origin\n */\nLocation.prototype.origin;\n\n/**\n * Returns the Location object's URL's scheme. Can be set, to navigate to the\n * same URL with a changed scheme.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-protocol\n */\nLocation.prototype.protocol;\n\n/**\n * Returns the Location object's URL's host and port (if different from the\n * default port for the scheme). Can be set, to navigate to the same URL with\n * a changed host and port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-host\n */\nLocation.prototype.host;\n\n/**\n * Returns the Location object's URL's host. Can be set, to navigate to the\n * same URL with a changed host.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hostname\n */\nLocation.prototype.hostname;\n\n/**\n * Returns the Location object's URL's port. Can be set, to navigate to the\n * same URL with a changed port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface:dom-location-port\n */\nLocation.prototype.port;\n\n/**\n * Returns the Location object's URL's path. Can be set, to navigate to the\n * same URL with a changed path.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-pathname\n */\nLocation.prototype.pathname;\n\n/**\n * Returns the Location object's URL's query (includes leading \"?\" if\n * non-empty). Can be set, to navigate to the same URL with a changed query\n * (ignores leading \"?\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-search\n */\nLocation.prototype.search;\n\n/**\n * Returns the Location object's URL's fragment (includes leading \"#\" if\n * non-empty). Can be set, to navigate to the same URL with a changed fragment\n * (ignores leading \"#\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hash\n */\nLocation.prototype.hash;\n\n/**\n * Navigates to the given page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-assign\n */\nLocation.prototype.assign = function(url) {};\n\n/**\n * Removes the current page from the session history and navigates to the given\n * page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-replace\n */\nLocation.prototype.replace = function(url) {};\n\n/**\n * Reloads the current page.\n * @param {boolean=} forceReload If true, reloads the page from\n * the server. Defaults to false.\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-reload\n */\nLocation.prototype.reload = function(forceReload) {};\n\n/**\n * Returns a DOMStringList object listing the origins of the ancestor browsing\n * contexts, from the parent browsing context to the top-level browsing\n * context.\n * @type {DOMStringList}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-ancestororigins\n */\nLocation.prototype.ancestorOrigins;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#popstateevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{state: *}=} opt_eventInitDict\n */\nfunction PopStateEvent(type, opt_eventInitDict) {}\n\n/**\n * @type {*}\n */\nPopStateEvent.prototype.state;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} stateArg\n * @return {undefined}\n */\nPopStateEvent.prototype.initPopStateEvent = function(typeArg, canBubbleArg,\n cancelableArg, stateArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#hashchangeevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{oldURL: string, newURL: string}=} opt_eventInitDict\n */\nfunction HashChangeEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nHashChangeEvent.prototype.oldURL;\n\n/** @type {string} */\nHashChangeEvent.prototype.newURL;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} oldURLArg\n * @param {string} newURLArg\n * @return {undefined}\n */\nHashChangeEvent.prototype.initHashChangeEvent = function(typeArg, canBubbleArg,\n cancelableArg, oldURLArg, newURLArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#pagetransitionevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{persisted: boolean}=} opt_eventInitDict\n */\nfunction PageTransitionEvent(type, opt_eventInitDict) {}\n\n/** @type {boolean} */\nPageTransitionEvent.prototype.persisted;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} persistedArg\n * @return {undefined}\n */\nPageTransitionEvent.prototype.initPageTransitionEvent = function(typeArg,\n canBubbleArg, cancelableArg, persistedArg) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n */\nfunction FileList() {}\n\n/** @type {number} */\nFileList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {File} The ith file in the list.\n * @nosideeffects\n */\nFileList.prototype.item = function(i) { return null; };\n\n/**\n * @type {boolean}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#withcredentials\n */\nXMLHttpRequest.prototype.withCredentials;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadstart\n */\nXMLHttpRequest.prototype.onloadstart;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequest.prototype.onprogress;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onabort\n */\nXMLHttpRequest.prototype.onabort;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onload\n */\nXMLHttpRequest.prototype.onload;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-ontimeout\n */\nXMLHttpRequest.prototype.ontimeout;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadend\n */\nXMLHttpRequest.prototype.onloadend;\n\n/**\n * @type {XMLHttpRequestUpload}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-upload-attribute\n */\nXMLHttpRequest.prototype.upload;\n\n/**\n * @param {string} mimeType The mime type to override with.\n * @return {undefined}\n */\nXMLHttpRequest.prototype.overrideMimeType = function(mimeType) {};\n\n/**\n * @type {string}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-responsetype-attribute\n */\nXMLHttpRequest.prototype.responseType;\n\n/**\n * @type {?(ArrayBuffer|Blob|Document|Object|string)}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-response-attribute\n */\nXMLHttpRequest.prototype.response;\n\n\n/**\n * @type {ArrayBuffer}\n * Implemented as a draft spec in Firefox 4 as the way to get a requested array\n * buffer from an XMLHttpRequest.\n * @see https://developer.mozilla.org/En/Using_XMLHttpRequest#Receiving_binary_data_using_JavaScript_typed_arrays\n *\n * This property is not used anymore and should be removed.\n * @see https://github.com/google/closure-compiler/pull/1389\n */\nXMLHttpRequest.prototype.mozResponseArrayBuffer;\n\n/**\n * XMLHttpRequestEventTarget defines events for checking the status of a data\n * transfer between a client and a server. This should be a common base class\n * for XMLHttpRequest and XMLHttpRequestUpload.\n *\n * @constructor\n * @implements {EventTarget}\n */\nfunction XMLHttpRequestEventTarget() {}\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * An event target to track the status of an upload.\n *\n * @constructor\n * @extends {XMLHttpRequestEventTarget}\n */\nfunction XMLHttpRequestUpload() {}\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequestUpload.prototype.onprogress;\n\n/**\n * @param {number=} opt_width\n * @param {number=} opt_height\n * @constructor\n * @extends {HTMLImageElement}\n */\nfunction Image(opt_width, opt_height) {}\n\n\n/**\n * Dataset collection.\n * This is really a DOMStringMap but it behaves close enough to an object to\n * pass as an object.\n * @const {!Object}\n */\nHTMLElement.prototype.dataset;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see https://dom.spec.whatwg.org/#interface-domtokenlist\n */\nfunction DOMTokenList() {}\n\n/**\n * Returns the number of CSS classes applied to this Element.\n * @type {number}\n */\nDOMTokenList.prototype.length;\n\n/**\n * Returns the string value applied to this Element.\n * @type {string|undefined}\n */\nDOMTokenList.prototype.value;\n\n/**\n * @param {number} index The index of the item to return.\n * @return {string} The CSS class at the specified index.\n * @nosideeffects\n */\nDOMTokenList.prototype.item = function(index) {};\n\n/**\n * @param {string} token The CSS class to check for.\n * @return {boolean} Whether the CSS class has been applied to the Element.\n * @nosideeffects\n */\nDOMTokenList.prototype.contains = function(token) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to add to this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.add = function(var_args) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to remove from this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.remove = function(var_args) {};\n\n/**\n * Replaces token with newToken.\n * @param {string} token The CSS class to replace.\n * @param {string} newToken The new CSS class to use.\n * @return {undefined}\n */\nDOMTokenList.prototype.replace = function(token, newToken) {};\n\n/**\n * @param {string} token The token to query for.\n * @return {boolean} Whether the token was found.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/supports\n * @nosideeffects\n */\nDOMTokenList.prototype.supports = function(token) {};\n\n/**\n * @param {string} token The CSS class to toggle from this element.\n * @param {boolean=} opt_force True to add the class whether it exists\n * or not. False to remove the class whether it exists or not.\n * This argument is not supported on IE 10 and below, according to\n * the MDN page linked below.\n * @return {boolean} False if the token was removed; True otherwise.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element.classList\n */\nDOMTokenList.prototype.toggle = function(token, opt_force) {};\n\n/**\n * @return {string} A stringified representation of CSS classes.\n * @nosideeffects\n * @override\n */\nDOMTokenList.prototype.toString = function() {};\n\n/**\n * @return {!IteratorIterable} An iterator to go through all values of\n * the key/value pairs contained in this object.\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/values\n */\nDOMTokenList.prototype.values = function() {};\n\n/**\n * A better interface to CSS classes than className.\n * @const {!DOMTokenList}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/classList\n */\nElement.prototype.classList;\n\n/**\n * Constraint Validation API properties and methods\n * @see http://www.w3.org/TR/2009/WD-html5-20090423/forms.html#the-constraint-validation-api\n */\n\n/** @return {boolean} */\nHTMLFormElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLFormElement.prototype.reportValidity = function() {};\n\n/** @type {boolean} */\nHTMLFormElement.prototype.noValidate;\n\n/** @constructor */\nfunction ValidityState() {}\n\n/** @type {boolean} */\nValidityState.prototype.badInput;\n\n/** @type {boolean} */\nValidityState.prototype.customError;\n\n/** @type {boolean} */\nValidityState.prototype.patternMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.rangeOverflow;\n\n/** @type {boolean} */\nValidityState.prototype.rangeUnderflow;\n\n/** @type {boolean} */\nValidityState.prototype.stepMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.typeMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.tooLong;\n\n/** @type {boolean} */\nValidityState.prototype.tooShort;\n\n/** @type {boolean} */\nValidityState.prototype.valid;\n\n/** @type {boolean} */\nValidityState.prototype.valueMissing;\n\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLButtonElement.prototype.labels;\n\n/** @type {string} */\nHTMLButtonElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLButtonElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLButtonElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLButtonElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLButtonElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLButtonElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLButtonElement.prototype.formTarget;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.autofocus;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.formNoValidate;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLInputElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLInputElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLInputElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLInputElement.prototype.formTarget;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLInputElement.prototype.labels;\n\n/** @type {string} */\nHTMLInputElement.prototype.validationMessage;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionStart;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionEnd;\n\n/** @type {string} */\nHTMLInputElement.prototype.selectionDirection;\n\n/**\n * @param {number} start\n * @param {number} end\n * @param {string=} direction\n * @see https://html.spec.whatwg.org/#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLInputElement.prototype.setSelectionRange = function(start, end, direction) {};\n\n/**\n * @const {ValidityState}\n */\nHTMLInputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLInputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLInputElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLInputElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {Element} */\nHTMLLabelElement.prototype.control;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLSelectElement.prototype.labels;\n\n/** @type {HTMLCollection} */\nHTMLSelectElement.prototype.selectedOptions;\n\n/** @type {string} */\nHTMLSelectElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLSelectElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLSelectElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLTextAreaElement.prototype.labels;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.placeholder;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLTextAreaElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#htmlembedelement\n */\nfunction HTMLEmbedElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-width\n */\nHTMLEmbedElement.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-height\n */\nHTMLEmbedElement.prototype.height;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-src\n */\nHTMLEmbedElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-type\n */\nHTMLEmbedElement.prototype.type;\n\n// Fullscreen APIs.\n\n/**\n * @record\n * @see https://fullscreen.spec.whatwg.org/#dictdef-fullscreenoptions\n */\nfunction FullscreenOptions() {}\n\n/** @type {string} */\nFullscreenOptions.prototype.navigationUI;\n\n/**\n * @see https://fullscreen.spec.whatwg.org/#dom-element-requestfullscreen\n * @param {!FullscreenOptions=} options\n * @return {undefined}\n */\nElement.prototype.requestFullscreen = function(options) {};\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenenabled\n */\nDocument.prototype.fullscreenEnabled;\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenelement\n */\nDocument.prototype.fullscreenElement;\n\n/**\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-exitfullscreen\n * @return {undefined}\n */\nDocument.prototype.exitFullscreen = function() {};\n\n// Externs definitions of browser current implementations.\n// Firefox 10 implementation.\nElement.prototype.mozRequestFullScreen = function() {};\n\nElement.prototype.mozRequestFullScreenWithKeys = function() {};\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreen;\n\nDocument.prototype.mozCancelFullScreen = function() {};\n\n/** @type {Element} */\nDocument.prototype.mozFullScreenElement;\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreenEnabled;\n\n// Chrome 21 implementation.\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullScreen = function(opt_allowKeyboardInput) {};\n\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullscreen = function(opt_allowKeyboardInput) {};\n\n/** @type {boolean} */\nDocument.prototype.webkitIsFullScreen;\n\nDocument.prototype.webkitCancelFullScreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.webkitFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.webkitCurrentFullScreenElement;\n\n/** @type {Element} */\nDocument.prototype.webkitFullscreenElement;\n\n/** @type {boolean} */\nDocument.prototype.webkitFullScreenKeyboardInputAllowed;\n\n// IE 11 implementation.\n// http://msdn.microsoft.com/en-us/library/ie/dn265028(v=vs.85).aspx\n/** @return {void} */\nElement.prototype.msRequestFullscreen = function() {};\n\n/** @return {void} */\nDocument.prototype.msExitFullscreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.msFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.msFullscreenElement;\n\n/** @const {number} */\nElement.ALLOW_KEYBOARD_INPUT;\n\n/** @const {number} */\nElement.prototype.ALLOW_KEYBOARD_INPUT;\n\n\n/**\n * @typedef {{\n * childList: (boolean|undefined),\n * attributes: (boolean|undefined),\n * characterData: (boolean|undefined),\n * subtree: (boolean|undefined),\n * attributeOldValue: (boolean|undefined),\n * characterDataOldValue: (boolean|undefined),\n * attributeFilter: (!Array|undefined)\n * }}\n */\nvar MutationObserverInit;\n\n\n/** @constructor */\nfunction MutationRecord() {}\n\n/** @type {string} */\nMutationRecord.prototype.type;\n\n/** @type {Node} */\nMutationRecord.prototype.target;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.addedNodes;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.removedNodes;\n\n/** @type {?Node} */\nMutationRecord.prototype.previousSibling;\n\n/** @type {?Node} */\nMutationRecord.prototype.nextSibling;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeName;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeNamespace;\n\n/** @type {?string} */\nMutationRecord.prototype.oldValue;\n\n\n/**\n * @see http://www.w3.org/TR/domcore/#mutation-observers\n * @param {function(!Array, !MutationObserver)} callback\n * @constructor\n */\nfunction MutationObserver(callback) {}\n\n/**\n * @param {Node} target\n * @param {MutationObserverInit=} options\n * @return {undefined}\n */\nMutationObserver.prototype.observe = function(target, options) {};\n\nMutationObserver.prototype.disconnect = function() {};\n\n/**\n * @return {!Array}\n */\nMutationObserver.prototype.takeRecords = function() {};\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.WebKitMutationObserver;\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.MozMutationObserver;\n\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {VisibilityState}\n */\nDocument.prototype.visibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.mozVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.webkitVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.msVisibilityState;\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {boolean}\n */\nDocument.prototype.hidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.mozHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.webkitHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.msHidden;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}=}\n * options\n * @return {function(new:Element, ...*)} a constructor for the new tag.\n * @deprecated document.registerElement() is deprecated in favor of\n * customElements.define()\n */\nDocument.prototype.registerElement = function(type, options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}} options\n * @deprecated This method has been removed and will be removed soon from this file.\n */\nDocument.prototype.register = function(type, options) {};\n\n/**\n * @type {!FontFaceSet}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfacesource-fonts\n */\nDocument.prototype.fonts;\n\n\n/**\n * @type {?HTMLScriptElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript\n */\nDocument.prototype.currentScript;\n\n/**\n * Definition of ShadowRoot interface,\n * @see http://www.w3.org/TR/shadow-dom/#api-shadow-root\n * @constructor\n * @extends {DocumentFragment}\n */\nfunction ShadowRoot() {}\n\n/**\n * The host element that a ShadowRoot is attached to.\n * Note: this is not yet W3C standard but is undergoing development.\n * W3C feature tracking bug:\n * https://www.w3.org/Bugs/Public/show_bug.cgi?id=22399\n * Draft specification:\n * https://dvcs.w3.org/hg/webcomponents/raw-file/6743f1ace623/spec/shadow/index.html#shadow-root-object\n * @type {!Element}\n */\nShadowRoot.prototype.host;\n\n/**\n * @param {string} id id.\n * @return {HTMLElement}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementById = function(id) {};\n\n\n/**\n * @return {Selection}\n * @nosideeffects\n */\nShadowRoot.prototype.getSelection = function() {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {Element}\n * @nosideeffects\n */\nShadowRoot.prototype.elementFromPoint = function(x, y) {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @nosideeffects\n */\nShadowRoot.prototype.elementsFromPoint = function(x, y) {};\n\n\n/**\n * @type {?Element}\n */\nShadowRoot.prototype.activeElement;\n\n\n/**\n * @type {string}\n */\nShadowRoot.prototype.mode;\n\n\n/**\n * @type {?ShadowRoot}\n * @deprecated\n */\nShadowRoot.prototype.olderShadowRoot;\n\n\n/**\n * @type {string}\n * @implicitCast\n */\nShadowRoot.prototype.innerHTML;\n\n\n/**\n * @type {!StyleSheetList}\n */\nShadowRoot.prototype.styleSheets;\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-content-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLContentElement() {}\n\n/**\n * @type {string}\n */\nHTMLContentElement.prototype.select;\n\n/**\n * @return {!NodeList}\n */\nHTMLContentElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-shadow-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLShadowElement() {}\n\n/**\n * @return {!NodeList}\n */\nHTMLShadowElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/html5/webappapis.html#the-errorevent-interface\n *\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {ErrorEventInit=} opt_eventInitDict\n */\nfunction ErrorEvent(type, opt_eventInitDict) {}\n\n/** @const {string} */\nErrorEvent.prototype.message;\n\n/** @const {string} */\nErrorEvent.prototype.filename;\n\n/** @const {number} */\nErrorEvent.prototype.lineno;\n\n/** @const {number} */\nErrorEvent.prototype.colno;\n\n/** @const {*} */\nErrorEvent.prototype.error;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/html5/webappapis.html#erroreventinit\n */\nfunction ErrorEventInit() {}\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.message;\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.filename;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.lineno;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.colno;\n\n/** @type {*} */\nErrorEventInit.prototype.error;\n\n\n/**\n * @see http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n * @param {string=} opt_title A title to give the new HTML document\n * @return {!HTMLDocument}\n */\nDOMImplementation.prototype.createHTMLDocument = function(opt_title) {};\n\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLPictureElement() {}\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLSourceElement() {}\n\n/** @type {string} */\nHTMLSourceElement.prototype.media;\n\n/** @type {string} */\nHTMLSourceElement.prototype.sizes;\n\n/** @type {string} @implicitCast */\nHTMLSourceElement.prototype.src;\n\n/** @type {string} */\nHTMLSourceElement.prototype.srcset;\n\n/** @type {string} */\nHTMLSourceElement.prototype.type;\n\n/** @type {string} */\nHTMLImageElement.prototype.sizes;\n\n/** @type {string} */\nHTMLImageElement.prototype.srcset;\n\n\n/**\n * 4.11 Interactive elements\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html\n */\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-details-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDetailsElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-details-open\n * @type {boolean}\n */\nHTMLDetailsElement.prototype.open;\n\n\n// As of 2/20/2015, has no special web IDL interface nor global\n// constructor (i.e. HTMLSummaryElement).\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-type\n * @type {string}\n */\nHTMLMenuElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-label\n * @type {string}\n */\nHTMLMenuElement.prototype.label;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menuitem-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMenuItemElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-type\n * @type {string}\n */\nHTMLMenuItemElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-label\n * @type {string}\n */\nHTMLMenuItemElement.prototype.label;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-icon\n * @type {string}\n */\nHTMLMenuItemElement.prototype.icon;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-disabled\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.disabled;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-checked\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.checked;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-radiogroup\n * @type {string}\n */\nHTMLMenuItemElement.prototype.radiogroup;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-default\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.default;\n\n// TODO(dbeam): add HTMLMenuItemElement.prototype.command if it's implemented.\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#relatedevent\n * @param {string} type\n * @param {{relatedTarget: (EventTarget|undefined)}=} opt_eventInitDict\n * @constructor\n * @extends {Event}\n */\nfunction RelatedEvent(type, opt_eventInitDict) {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-relatedevent-relatedtarget\n * @type {EventTarget|undefined}\n */\nRelatedEvent.prototype.relatedTarget;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-dialog-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDialogElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-open\n * @type {boolean}\n */\nHTMLDialogElement.prototype.open;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-returnvalue\n * @type {string}\n */\nHTMLDialogElement.prototype.returnValue;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-show\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.show = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-showmodal\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.showModal = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-close\n * @param {string=} opt_returnValue\n * @return {undefined}\n */\nHTMLDialogElement.prototype.close = function(opt_returnValue) {};\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTemplateElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @type {!DocumentFragment}\n */\nHTMLTemplateElement.prototype.content;\n\n\n/**\n * @type {?Document}\n * @see w3c_dom2.js\n * @see http://www.w3.org/TR/html-imports/#interface-import\n */\nHTMLLinkElement.prototype.import;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/#attr-link-as\n * @see https://w3c.github.io/preload/#as-attribute\n */\nHTMLLinkElement.prototype.as;\n\n/**\n * @see https://html.spec.whatwg.org/#attr-link-crossorigin\n * @type {string}\n */\nHTMLLinkElement.prototype.crossOrigin;\n\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.checkValidity = function() {};\n\n/**\n * @type {HTMLCollection}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.elements;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.name;\n\n/**\n * @param {string} message\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n * @return {undefined}\n */\nHTMLFieldSetElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-type\n */\nHTMLFieldSetElement.prototype.type;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validationMessage;\n\n/**\n * @type {ValidityState}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.willValidate;\n\n/**\n * @constructor\n * @extends {NodeList}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nfunction RadioNodeList() {}\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nRadioNodeList.prototype.value;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDataListElement() {}\n\n\n/** @type {HTMLCollection} */\nHTMLDataListElement.prototype.options;\n\n\n/**\n * @return {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.checkValidity;\n\n/**\n * @param {string} message\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n * @return {undefined}\n */\nHTMLObjectElement.prototype.setCustomValidity;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validationMessage;\n\n/**\n * @type {!ValidityState}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.willValidate;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-output-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLOutputElement() {}\n\n/**\n * @const {!DOMTokenList}\n */\nHTMLOutputElement.prototype.htmlFor;\n\n/**\n * @type {HTMLFormElement}\n */\nHTMLOutputElement.prototype.form;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.name;\n\n/**\n * @const {string}\n */\nHTMLOutputElement.prototype.type;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.defaultValue;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.value;\n\n/**\n * @const {?NodeList}\n */\nHTMLOutputElement.prototype.labels;\n\n/** @type {string} */\nHTMLOutputElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLOutputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLOutputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.reportValidity = function() {};\n\n/** @param {string} message */\nHTMLOutputElement.prototype.setCustomValidity = function(message) {};\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-progress-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLProgressElement() {}\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.value;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.max;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.position;\n\n\n/** @type {?NodeList} */\nHTMLProgressElement.prototype.labels;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-track-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTrackElement() {}\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.kind;\n\n\n/** @type {string} @implicitCast */\nHTMLTrackElement.prototype.src;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.srclang;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.label;\n\n\n/** @type {boolean} */\nHTMLTrackElement.prototype.default;\n\n\n/** @const {number} */\nHTMLTrackElement.prototype.readyState;\n\n\n/** @const {!TextTrack} */\nHTMLTrackElement.prototype.track;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-meter-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMeterElement() {}\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.value;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.min;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.max;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.low;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.high;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.optimum;\n\n\n/** @type {?NodeList} */\nHTMLMeterElement.prototype.labels;\n\n\n/**\n * @interface\n * @see https://storage.spec.whatwg.org/#api\n */\nfunction NavigatorStorage() {};\n\n/**\n * @type {!StorageManager}\n */\nNavigatorStorage.prototype.storage;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://www.w3.org/TR/html5/webappapis.html#navigator\n */\nfunction Navigator() {}\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appcodename\n */\nNavigator.prototype.appCodeName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appname\n */\nNavigator.prototype.appName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appversion\n */\nNavigator.prototype.appVersion;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-platform\n */\nNavigator.prototype.platform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-product\n */\nNavigator.prototype.product;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-useragent\n */\nNavigator.prototype.userAgent;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-taintenabled\n */\nNavigator.prototype.taintEnabled = function() {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-language\n */\nNavigator.prototype.language;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/browsers.html#navigatoronline\n */\nNavigator.prototype.onLine;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-cookieenabled\n */\nNavigator.prototype.cookieEnabled;\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerProtocolHandler = function(scheme, url, title) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerContentHandler = function(mimeType, url, title) {}\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterProtocolHandler = function(scheme, url) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterContentHandler = function(mimeType, url) {}\n\n/**\n * @type {!MimeTypeArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-mimetypes\n */\nNavigator.prototype.mimeTypes;\n\n/**\n * @type {!PluginArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-plugins\n */\nNavigator.prototype.plugins;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-javaenabled\n * @nosideeffects\n */\nNavigator.prototype.javaEnabled = function() {};\n\n/**\n * @type {number}\n * @see https://developers.google.com/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nNavigator.prototype.deviceMemory;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nNavigator.prototype.storage;\n\n/**\n * @param {!ShareData=} data\n * @return {!Promise}\n * @see https://wicg.github.io/web-share/#share-method\n */\nNavigator.prototype.share = function(data) {};\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nNavigator.prototype.hardwareConcurrency;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://html.spec.whatwg.org/multipage/workers.html#the-workernavigator-object\n */\nfunction WorkerNavigator() {}\n\n/**\n * @type {number}\n * @see https://developers.google.com/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nWorkerNavigator.prototype.deviceMemory;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nWorkerNavigator.prototype.hardwareConcurrency;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nWorkerNavigator.prototype.storage;\n\n/**\n * @record\n * @see https://wicg.github.io/web-share/#sharedata-dictionary\n */\nfunction ShareData() {}\n\n/** @type {string|undefined} */\nShareData.prototype.title;\n\n/** @type {string|undefined} */\nShareData.prototype.text;\n\n/** @type {string|undefined} */\nShareData.prototype.url;\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!Plugin>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#pluginarray\n */\nfunction PluginArray() {}\n\n/** @type {number} */\nPluginArray.prototype.length;\n\n/**\n * @param {number} index\n * @return {Plugin}\n */\nPluginArray.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Plugin}\n */\nPluginArray.prototype.namedItem = function(name) {};\n\n/**\n * @param {boolean=} reloadDocuments\n * @return {undefined}\n */\nPluginArray.prototype.refresh = function(reloadDocuments) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!MimeType>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetypearray\n */\nfunction MimeTypeArray() {}\n\n/**\n * @param {number} index\n * @return {MimeType}\n */\nMimeTypeArray.prototype.item = function(index) {};\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/window.navigator.mimeTypes\n */\nMimeTypeArray.prototype.length;\n\n/**\n * @param {string} name\n * @return {MimeType}\n */\nMimeTypeArray.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetype\n */\nfunction MimeType() {}\n\n/** @type {string} */\nMimeType.prototype.description;\n\n/** @type {Plugin} */\nMimeType.prototype.enabledPlugin;\n\n/** @type {string} */\nMimeType.prototype.suffixes;\n\n/** @type {string} */\nMimeType.prototype.type;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-plugin\n */\nfunction Plugin() {}\n\n/** @type {string} */\nPlugin.prototype.description;\n\n/** @type {string} */\nPlugin.prototype.filename;\n\n/** @type {number} */\nPlugin.prototype.length;\n\n/** @type {string} */\nPlugin.prototype.name;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/custom-elements.html#customelementregistry\n * @constructor\n */\nfunction CustomElementRegistry() {}\n\n/**\n * @param {string} tagName\n * @param {function(new:HTMLElement)} klass\n * @param {{extends: string}=} options\n * @return {undefined}\n */\nCustomElementRegistry.prototype.define = function (tagName, klass, options) {};\n\n/**\n * @param {string} tagName\n * @return {function(new:HTMLElement)|undefined}\n */\nCustomElementRegistry.prototype.get = function(tagName) {};\n\n/**\n * @param {string} tagName\n * @return {!Promise}\n */\nCustomElementRegistry.prototype.whenDefined = function(tagName) {};\n\n/**\n * @param {!Node} root\n * @return {undefined}\n */\nCustomElementRegistry.prototype.upgrade = function(root) {};\n\n/** @type {!CustomElementRegistry} */\nvar customElements;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSlotElement() {}\n\n/** @typedef {{flatten: boolean}} */\nvar AssignedNodesOptions;\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedNodes = function(options) {};\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedElements = function(options) {};\n\n/** @type {boolean} */\nEvent.prototype.composed;\n\n/**\n * @return {!Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath\n */\nEvent.prototype.composedPath = function() {};\n\n/**\n * @constructor\n * @param {{\n * firesTouchEvents: (string|undefined),\n * pointerMovementScrolls: (string|undefined)\n * }=} opt_options\n */\nfunction InputDeviceCapabilities(opt_options){}\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.firesTouchEvents;\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.pointerMovementScrolls;\n\n/** @type {?InputDeviceCapabilities} */\nMouseEvent.prototype.sourceCapabilities;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport\n * @constructor\n * @implements {EventTarget}\n */\nfunction VisualViewport() {}\n\n/** @type {number} */\nVisualViewport.prototype.offsetLeft;\n\n/** @type {number} */\nVisualViewport.prototype.offsetTop;\n\n/** @type {number} */\nVisualViewport.prototype.pageLeft;\n\n/** @type {number} */\nVisualViewport.prototype.pageTop;\n\n/** @type {number} */\nVisualViewport.prototype.width;\n\n/** @type {number} */\nVisualViewport.prototype.height;\n\n/** @type {number} */\nVisualViewport.prototype.scale;\n\n/** @override */\nVisualViewport.prototype.addEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.removeEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onresize;\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onscroll;\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @constructor\n */\nfunction StorageManager() {}\n\n/** @return {!Promise} */\nStorageManager.prototype.persisted = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.persist = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.estimate = function() {};\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @typedef {{\n * usage: number,\n * quota: number\n * }}\n */\nvar StorageEstimate;\n\n/*\n * Focus Management APIs\n *\n * See https://html.spec.whatwg.org/multipage/interaction.html#focus-management-apis\n */\n\n\n/**\n * @type {?Element}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n */\nDocument.prototype.activeElement;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-hasfocus\n * @return {boolean}\n */\nDocument.prototype.hasFocus = function() {};\n\n/**\n * @param {{preventScroll: boolean}=} options\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-focus\n */\nElement.prototype.focus = function(options) {};\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-blur\n */\nElement.prototype.blur = function() {};\n", +-"externs/ie_vml.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s vector markup language, or VML.\n *\n * @externs\n * @author robbyw@google.com (Robby Walker)\n */\n\n\n/**\n * @type {Object|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263836(VS.85).aspx\n */\nElement.prototype.coordorigin;\n\n/**\n * @type {Object|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263837(VS.85).aspx\n */\nElement.prototype.coordsize;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263839(VS.85).aspx\n */\nElement.prototype.fillcolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/bb263840(VS.85).aspx\n */\nElement.prototype.filled;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263871(VS.85).aspx\n */\nElement.prototype.path;\n\n/**\n * @type {number|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263877(VS.85).aspx\n */\nElement.prototype.rotation;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263881(VS.85).aspx\n */\nElement.prototype.strokecolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/bb263882(VS.85).aspx\n */\nElement.prototype.stroked;\n\n/**\n * @type {number|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263883(VS.85).aspx\n */\nElement.prototype.strokeweight;\n', +-"externs/intersection_observer.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Externs for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/\n * @externs\n * @author robadurbin@google.com (Rob Durbin)\n */\n\n// TODO(robadurbin): Once the Intersection Observer spec is adopted by W3C, add\n// a w3c_ prefix to this file\'s name.\n\n\n/**\n * These contain the information provided from a change event.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @record\n */\nfunction IntersectionObserverEntry() {}\n\n/**\n * The time the change was observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-time\n * @const {number}\n */\nIntersectionObserverEntry.prototype.time;\n\n/**\n * The root intersection rectangle, if target belongs to the same unit of\n * related similar-origin browsing contexts as the intersection root, null\n * otherwise.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-rootbounds\n * @const {{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.rootBounds;\n\n/**\n * The rectangle describing the element being observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-boundingclientrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.boundingClientRect;\n\n/**\n * The rectangle describing the intersection between the observed element and\n * the viewport.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.intersectionRect;\n\n/**\n * Ratio of intersectionRect area to boundingClientRect area.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionratio\n * @const {number}\n */\nIntersectionObserverEntry.prototype.intersectionRatio;\n\n/**\n * The Element whose intersection with the intersection root changed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-target\n * @const {!Element}\n */\nIntersectionObserverEntry.prototype.target;\n\n/**\n * Whether or not the target is intersecting with the root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-isintersecting\n * @const {boolean}\n */\nIntersectionObserverEntry.prototype.isIntersecting;\n\n/**\n * Whether or not the target is visible with the root.\n * @see https://w3c.github.io/IntersectionObserver/v2/#dom-intersectionobserverentry-isvisible\n * @const {boolean|undefined}\n */\nIntersectionObserverEntry.prototype.isVisible;\n\n/**\n * Callback for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-callback\n * @typedef {function(!Array,!IntersectionObserver)}\n */\nvar IntersectionObserverCallback;\n\n/**\n * Options for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/v2/#intersection-observer-init\n * @typedef {{\n * threshold: (!Array|number|undefined),\n * delay: (number|undefined),\n * trackVisibility: (boolean|undefined),\n * root: (?Element|undefined),\n * rootMargin: (string|undefined)\n * }}\n */\nvar IntersectionObserverInit;\n\n/**\n * This is the constructor for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {!IntersectionObserverCallback} handler The callback for the observer.\n * @param {!IntersectionObserverInit=} opt_options The object defining the\n * thresholds, etc.\n * @constructor\n */\nfunction IntersectionObserver(handler, opt_options) {};\n\n/**\n * The root Element to use for intersection, or null if the observer uses the\n * implicit root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-root\n * @const {?Element}\n */\nIntersectionObserver.prototype.root;\n\n/**\n * Offsets applied to the intersection root\u2019s bounding box, effectively growing\n * or shrinking the box that is used to calculate intersections.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-rootmargin\n * @const {string}\n */\nIntersectionObserver.prototype.rootMargin;\n\n/**\n * A list of thresholds, sorted in increasing numeric order, where each\n * threshold is a ratio of intersection area to bounding box area of an observed\n * target.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-thresholds\n * @const {!Array}\n */\nIntersectionObserver.prototype.thresholds;\n\n/**\n * This is used to set which element to observe.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-observe\n * @param {!Element} element The element to observe.\n * @return {undefined}\n */\nIntersectionObserver.prototype.observe = function(element) {};\n\n/**\n * This is used to stop observing a given element.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-unobserve\n * @param {!Element} element The elmenent to stop observing.\n * @return {undefined}\n */\nIntersectionObserver.prototype.unobserve = function(element) {};\n\n/**\n * Disconnect.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-disconnect\n */\nIntersectionObserver.prototype.disconnect = function() {};\n\n/**\n * Take records.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-takerecords\n * @return {!Array.}\n */\nIntersectionObserver.prototype.takeRecords = function() {};\n', +-"externs/iphone.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all iPhone extensions. Created from:\n * http://developer.apple.com/library/safari/navigation/\n *\n * @externs\n * @author agrieve@google.com (Andrew Grieve)\n */\n\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitForce;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusX;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusY;\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nTouchEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nTouchEvent.prototype.rotation;\n\n/**\n * Initializes a newly created TouchEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {TouchList} touches\n * @param {TouchList} targetTouches\n * @param {TouchList} changedTouches\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nTouchEvent.prototype.initTouchEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, touches, targetTouches, changedTouches, scale, rotation) {};\n\n/**\n * The GestureEvent class encapsulates information about a multi-touch gesture.\n *\n * GestureEvent objects are high-level events that encapsulate the low-level\n * TouchEvent objects. Both GestureEvent and TouchEvent events are sent during\n * a multi-touch sequence. Gesture events contain scaling and rotation\n * information allowing gestures to be combined, if supported by the platform.\n * If not supported, one gesture ends before another starts. Listen for\n * GestureEvent events if you want to respond to gestures only, not process\n * the low-level TouchEvent objects.\n *\n * @see http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/GestureEventClassReference/GestureEvent/GestureEvent.html\n * @extends {UIEvent}\n * @constructor\n */\nfunction GestureEvent() {}\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nGestureEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nGestureEvent.prototype.rotation;\n\n/**\n * The target of this gesture.\n * @type {EventTarget}\n */\nGestureEvent.prototype.target;\n\n/**\n * Initializes a newly created GestureEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {EventTarget} target\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nGestureEvent.prototype.initGestureEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, target, scale, rotation) {};\n\n\n/**\n * Specifies the JavaScript method to invoke when a gesture is started by\n * two or more fingers touching the surface.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturestart;\n\n/**\n * Specifies the JavaScript method to invoke when fingers are moved during a\n * gesture.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturechange;\n\n/**\n * Specifies the JavaScript method to invoke when a gesture ends (when there are\n * 0 or 1 fingers touching the surface).\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongestureend;\n\n/**\n * Specifies the JavaScript method to invoke when the browser device\'s\n * orientation changes, i.e.the device is rotated.\n * @type {?function(!Event)}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.onorientationchange;\n\n/**\n * Returns the orientation of the browser\'s device, one of [-90, 0, 90, 180].\n * @type {number}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.orientation;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocapitalize;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocapitalize;\n', +-"externs/mediakeys.js":'/*\n * Copyright 2015 The Closure Compiler authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview MediaKey externs.\n * Based on {@link http://goo.gl/blgtZZ EME draft 12 March 2015}.\n * @externs\n */\n\n\n/**\n * @typedef {{contentType: string, robustness: string}}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemmediacapability-dictionary\n */\nvar MediaKeySystemMediaCapability;\n\n\n/** @typedef {{\n * label: (string|undefined),\n * initDataTypes: (!Array|undefined),\n * audioCapabilities: (!Array|undefined),\n * videoCapabilities: (!Array|undefined),\n * distinctiveIdentifier: (string|undefined),\n * persistentState: (string|undefined),\n * sessionTypes: (!Array|undefined)\n * }}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionary\n */\nvar MediaKeySystemConfiguration;\n\n\n/**\n * @param {string} keySystem\n * @param {!Array} supportedConfigurations\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#navigator-extension-requestmediakeysystemaccess\n */\nNavigator.prototype.requestMediaKeySystemAccess =\n function(keySystem, supportedConfigurations) {};\n\n\n/** @const {MediaKeys} */\nHTMLMediaElement.prototype.mediaKeys;\n\n\n/**\n * @param {MediaKeys} mediaKeys\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#widl-HTMLMediaElement-setMediaKeys-Promise-void--MediaKeys-mediaKeys\n */\nHTMLMediaElement.prototype.setMediaKeys = function(mediaKeys) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemaccess-interface\n */\nfunction MediaKeySystemAccess() {}\n\n\n/** @return {!Promise} */\nMediaKeySystemAccess.prototype.createMediaKeys = function() {};\n\n\n/** @return {!MediaKeySystemConfiguration} */\nMediaKeySystemAccess.prototype.getConfiguration = function() {};\n\n\n/** @const {string} */\nMediaKeySystemAccess.prototype.keySystem;\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeys-interface\n */\nfunction MediaKeys() {}\n\n\n/**\n * @param {string=} opt_sessionType defaults to "temporary"\n * @return {!MediaKeySession}\n * @throws {TypeError} if opt_sessionType is invalid.\n */\nMediaKeys.prototype.createSession = function(opt_sessionType) {};\n\n\n/**\n * @param {!BufferSource} serverCertificate\n * @return {!Promise}\n */\nMediaKeys.prototype.setServerCertificate = function(serverCertificate) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeystatusmap-interface\n */\nfunction MediaKeyStatusMap() {}\n\n\n/** @const {number} */\nMediaKeyStatusMap.prototype.size;\n\n\n/**\n * Array entry 0 is the key, 1 is the value.\n * @return {!Iterator>}\n */\nMediaKeyStatusMap.prototype.entries = function() {};\n\n\n/**\n * The function is called with each value.\n * @param {function(string, !BufferSource)} callback A callback function to run for\n * each media key. The first parameter is the key status; the second\n * parameter is the key ID.\n * @return {undefined}\n */\nMediaKeyStatusMap.prototype.forEach = function(callback) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {string|undefined}\n */\nMediaKeyStatusMap.prototype.get = function(keyId) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {boolean}\n */\nMediaKeyStatusMap.prototype.has = function(keyId) {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.keys = function() {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.values = function() {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/encrypted-media/#mediakeysession-interface\n */\nfunction MediaKeySession() {}\n\n\n/** @const {string} */\nMediaKeySession.prototype.sessionId;\n\n\n/** @const {number} */\nMediaKeySession.prototype.expiration;\n\n\n/** @const {!Promise} */\nMediaKeySession.prototype.closed;\n\n\n/** @const {!MediaKeyStatusMap} */\nMediaKeySession.prototype.keyStatuses;\n\n\n/**\n * @param {string} initDataType\n * @param {!BufferSource} initData\n * @return {!Promise}\n */\nMediaKeySession.prototype.generateRequest = function(initDataType, initData) {};\n\n\n/**\n * @param {string} sessionId\n * @return {!Promise}}\n */\nMediaKeySession.prototype.load = function(sessionId) {};\n\n\n/**\n * @param {!BufferSource} response\n * @return {!Promise}\n */\nMediaKeySession.prototype.update = function(response) {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.close = function() {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.remove = function() {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n * @return {boolean}\n */\nMediaKeySession.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaKeyMessageEventInit() {};\n\n/** @type {string} */\nMediaKeyMessageEventInit.prototype.messageType;\n\n/** @type {!ArrayBuffer} */\nMediaKeyMessageEventInit.prototype.message;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaKeyMessageEventInit} eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediakeymessageevent\n */\nfunction MediaKeyMessageEvent(type, eventInitDict) {}\n\n\n/** @const {string} */\nMediaKeyMessageEvent.prototype.messageType;\n\n\n/** @const {!ArrayBuffer} */\nMediaKeyMessageEvent.prototype.message;\n\n\n/** @const {!MediaKeySession} */\nMediaKeyMessageEvent.prototype.target;\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaEncryptedEventInit() {};\n\n/** @type {(string | undefined)} */\nMediaEncryptedEventInit.prototype.initDataType;\n\n/** @type {(ArrayBuffer | undefined)} */\nMediaEncryptedEventInit.prototype.initData;\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaEncryptedEventInit=} opt_eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediaencryptedevent\n */\nfunction MediaEncryptedEvent(type, opt_eventInitDict) {}\n\n\n/** @const {string} */\nMediaEncryptedEvent.prototype.initDataType;\n\n\n/** @const {ArrayBuffer} */\nMediaEncryptedEvent.prototype.initData;\n\n\n/** @const {!HTMLMediaElement} */\nMediaEncryptedEvent.prototype.target;\n\n', +-"externs/mediasource.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for the Media Source Extensions. Note that the\n * properties available here are the union of several versions of the spec.\n * @see http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html\n *\n * @externs\n * @author mattward@google.com (Matt Ward)\n */\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction MediaSource() {}\n\n/** @override */\nMediaSource.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMediaSource.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaSource.prototype.dispatchEvent = function(evt) {};\n\n/** @type {Array} */\nMediaSource.prototype.sourceBuffers;\n\n/** @type {Array} */\nMediaSource.prototype.activeSourceBuffers;\n\n/** @type {number} */\nMediaSource.prototype.duration;\n\n/**\n * @param {string} type\n * @return {SourceBuffer}\n */\nMediaSource.prototype.addSourceBuffer = function(type) {};\n\n/**\n * @param {SourceBuffer} sourceBuffer\n * @return {undefined}\n */\nMediaSource.prototype.removeSourceBuffer = function(sourceBuffer) {};\n\n/**\n * Updates the live seekable range.\n * @param {number} start\n * @param {number} end\n */\nMediaSource.prototype.setLiveSeekableRange = function(start, end) {};\n\n/**\n * Clears the live seekable range.\n * @return {void}\n */\nMediaSource.prototype.clearLiveSeekableRange = function() {};\n\n/** @type {string} */\nMediaSource.prototype.readyState;\n\n/**\n * @param {string=} opt_error\n * @return {undefined}\n */\nMediaSource.prototype.endOfStream = function(opt_error) {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaSource.isTypeSupported = function(type) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SourceBuffer() {}\n\n/** @override */\nSourceBuffer.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.dispatchEvent = function(evt) {};\n\n/** @type {string} */\nSourceBuffer.prototype.appendMode;\n\n/** @type {boolean} */\nSourceBuffer.prototype.updating;\n\n/** @type {TimeRanges} */\nSourceBuffer.prototype.buffered;\n\n/** @type {number} */\nSourceBuffer.prototype.timestampOffset;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowStart;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowEnd;\n\n/**\n * @param {Uint8Array} data\n * @return {undefined}\n */\nSourceBuffer.prototype.append = function(data) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView} data\n * @return {undefined}\n */\nSourceBuffer.prototype.appendBuffer = function(data) {};\n\n/**\n * Abort the current segment append sequence.\n * @return {undefined}\n */\nSourceBuffer.prototype.abort = function() {};\n\n/**\n * @param {number} start\n * @param {number} end\n * @return {undefined}\n */\nSourceBuffer.prototype.remove = function(start, end) {};\n\n/**\n * @param {string} type\n * @return {undefined}\n */\nSourceBuffer.prototype.changeType = function(type) {};\n', ++"externs/nonstandard_fileapi.js":"/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for file api implemented in\n * various browsers but not part of https://www.w3.org/TR/FileAPI.\n * @externs\n */\n\n/**\n * This replaces Blob.slice in Chrome since WebKit revision 84005.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.webkitSlice = function(start, end, contentType) {};\n\n/**\n * This replaces Blob.slice in Firefox.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number=} start\n * @param {number=} end\n * @param {string=} contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.mozSlice = function(start, end, contentType) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface\n * @constructor\n */\nfunction BlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * This has replaced BlobBuilder in Chrome since WebKit revision 84008.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @constructor\n */\nfunction WebKitBlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nWebKitBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nWebKitBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * @record\n * @see https://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-dictionary\n */\nfunction FileSystemFlags() {};\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.create;\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.exclusive;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction DirectoryEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-createReader\n * @return {!DirectoryReader}\n */\nDirectoryEntry.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getFile\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!FileEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getFile = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getDirectory\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!DirectoryEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getDirectory = function(\n path, options, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-removeRecursively\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.removeRecursively = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreader-interface\n * @constructor\n */\nfunction DirectoryReader() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReader-readEntries\n * @param {function(!Array)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryReader.prototype.readEntries = function(\n successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entry-interface\n * @constructor\n */\nfunction Entry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isFile\n * @type {boolean}\n */\nEntry.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isDirectory\n * @type {boolean}\n */\nEntry.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-name\n * @type {string}\n */\nEntry.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-fullPath\n * @type {string}\n */\nEntry.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-filesystem\n * @type {!FileSystem}\n */\nEntry.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-moveTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.moveTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-copyTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.copyTo = function(\n parent, newName, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntry.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-remove\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.remove = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getMetadata\n * @param {function(!Metadata)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getMetadata = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getParent\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getParent = function(successCallback, errorCallback) {};\n\n/**\n * @return {?Entry} The Entry corresponding to this item, or null. Note that\n * despite its name,this method only works in Chrome, and will eventually\n * be renamed to {@code getAsEntry}.\n * @nosideeffects\n */\nDataTransferItem.prototype.webkitGetAsEntry = function() {};\n\n/**\n * @see https://wicg.github.io/entries-api/#dom-file-webkitrelativepath\n * @type {string}\n */\nFile.prototype.webkitRelativePath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction FileEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-createWriter\n * @param {function(!FileWriter)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.createWriter = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-file\n * @param {function(!File)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.file = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileErrorInterface\n * @constructor\n * @extends {DOMError}\n */\nfunction FileError() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @const {number}\n */\nFileError.prototype.NOT_FOUND_ERR;\n\n/** @const {number} */\nFileError.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @const {number}\n */\nFileError.prototype.SECURITY_ERR;\n\n/** @const {number} */\nFileError.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ABORT_ERR\n * @const {number}\n */\nFileError.prototype.ABORT_ERR;\n\n/** @const {number} */\nFileError.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_READABLE_ERR\n * @const {number}\n */\nFileError.prototype.NOT_READABLE_ERR;\n\n/** @const {number} */\nFileError.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ENCODING_ERR\n * @const {number}\n */\nFileError.prototype.ENCODING_ERR;\n\n/** @const {number} */\nFileError.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileError-NO_MODIFICATION_ALLOWED_ERR\n * @const {number}\n */\nFileError.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @const {number} */\nFileError.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_STATE_ERR;\n\n/** @const {number} */\nFileError.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @const {number}\n */\nFileError.prototype.SYNTAX_ERR;\n\n/** @const {number} */\nFileError.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-INVALID_MODIFICATION_ERR\n * @const {number}\n */\nFileError.prototype.INVALID_MODIFICATION_ERR;\n\n/** @const {number} */\nFileError.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-QUOTA_EXCEEDED_ERR\n * @const {number}\n */\nFileError.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @const {number} */\nFileError.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @const {number}\n */\nFileError.prototype.TYPE_MISMATCH_ERR;\n\n/** @const {number} */\nFileError.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @const {number}\n */\nFileError.prototype.PATH_EXISTS_ERR;\n\n/** @const {number} */\nFileError.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n * @deprecated Use the 'name' or 'message' attributes of DOMError rather than\n * 'code'\n */\nFileError.prototype.code;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileSaver\n * @constructor\n */\nfunction FileSaver() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-abort\n * @return {undefined}\n */\nFileSaver.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-INIT\n * @const {number}\n */\nFileSaver.prototype.INIT;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-WRITING\n * @const {number}\n */\nFileSaver.prototype.WRITING;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-DONE\n * @const {number}\n */\nFileSaver.prototype.DONE;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-readyState\n * @type {number}\n */\nFileSaver.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-error\n * @type {FileError}\n */\nFileSaver.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwritestart\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwritestart;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwrite\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwrite;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwriteend\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwriteend;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-filesystem-interface\n * @constructor\n */\nfunction FileSystem() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-name\n * @type {string}\n */\nFileSystem.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-root\n * @type {!DirectoryEntry}\n */\nFileSystem.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriter\n * @constructor\n * @extends {FileSaver}\n */\nfunction FileWriter() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-position\n * @type {number}\n */\nFileWriter.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-length\n * @type {number}\n */\nFileWriter.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriter.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriter.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriter.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystem interface, implemented by Window and WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem\n * @constructor\n */\nfunction LocalFileSystem() {}\n\n/**\n * Metadata interface.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-Metadata\n * @constructor\n */\nfunction Metadata() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-modificationTime\n * @type {!Date}\n */\nMetadata.prototype.modificationTime;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-size\n * @type {number}\n */\nMetadata.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-TEMPORARY\n * @const {number}\n */\nWindow.prototype.TEMPORARY;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-PERSISTENT\n * @const {number}\n */\nWindow.prototype.PERSISTENT;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction requestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.requestFileSystem = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction resolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.resolveLocalFileSystemURI =\n function(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitRequestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitRequestFileSystem = function(type, size, successCallback,\n errorCallback) {};\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitResolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitResolveLocalFileSystemURI = function(\n uri, successCallback, errorCallback) {}\n\n// WindowBlobURIMethods interface, implemented by Window and WorkerGlobalScope.\n// There are three APIs for this: the old specced API, the new specced API, and\n// the webkit-prefixed API.\n// @see http://www.w3.org/TR/FileAPI/#creating-revoking\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nfunction createObjectURL(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nWindow.prototype.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nfunction revokeObjectURL(url) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nWindow.prototype.revokeObjectURL = function(url) {};\n\n/**\n * This has been replaced by URL in Chrome since WebKit revision 75739.\n * @constructor\n * @param {string} urlString\n * @param {string=} base\n */\nfunction webkitURL(urlString, base) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nwebkitURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nwebkitURL.revokeObjectURL = function(url) {};\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @constructor\n */\nfunction StorageInfo() {}\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @const {number}\n * */\nStorageInfo.prototype.TEMPORARY;\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @const {number}\n */\nStorageInfo.prototype.PERSISTENT;\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage#requestQuota\n * @param {number} type\n * @param {number} size\n * @param {function(number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.requestQuota = function(\n type, size, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage#queryUsageAndQuota\n * @param {number} type\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.queryUsageAndQuota = function(\n type, successCallback, errorCallback) {};\n\n/**\n * @see https://developers.9oo91e.qjz9zk/chrome/whitepapers/storage\n * @type {!StorageInfo}\n */\nWindow.prototype.webkitStorageInfo;\n\n/**\n * @see https://dvcs.w3.org/hg/quota/raw-file/tip/Overview.html#storagequota-interface.\n * @constructor\n */\nfunction StorageQuota() {}\n\n/**\n * @param {number} size\n * @param {function(number)=} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.requestQuota = function(\n size, successCallback, errorCallback) {};\n\n/**\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.queryUsageAndQuota = function(\n successCallback, errorCallback) {};\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.ch40me.qjz9zk/apps/offline_storage\n */\nNavigator.prototype.webkitPersistentStorage;\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.ch40me.qjz9zk/apps/offline_storage\n */\nNavigator.prototype.webkitTemporaryStorage;\n\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriterSync\n * @constructor\n */\nfunction FileWriterSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-position\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-length\n * @type {number}\n * @const\n */\nFileWriterSync.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriterSync.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriterSync.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriterSync-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriterSync.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystemSync interface, implemented by WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystemSync\n * @constructor\n */\nfunction LocalFileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/\n * #the-synchronous-filesystem-interface\n * @constructor\n */\nfunction FileSystemSync() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-name\n * @type {string}\n * @const\n */\nFileSystemSync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystemSync-root\n * @type {!DirectoryEntrySync}\n * @const\n */\nFileSystemSync.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction requestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystemSync-requestFileSystemSync-FileSystemSync-unsigned-short-type-unsigned-long-long-size\n * @param {number} type\n * @param {number} size\n * @return {!FileSystemSync}\n */\nfunction webkitRequestFileSystemSync(type, size) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entrysync-interface\n * @constructor\n */\nfunction EntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isFile\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-isDirectory\n * @type {boolean}\n * @const\n */\nEntrySync.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-name\n * @type {string}\n * @const\n */\nEntrySync.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-fullPath\n * @type {string}\n * @const\n */\nEntrySync.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-filesystem\n * @type {!FileSystemSync}\n * @const\n */\nEntrySync.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-moveTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.moveTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-copyTo\n * @param {!DirectoryEntrySync} parent\n * @param {string=} newName\n * @return {!EntrySync}\n */\nEntrySync.prototype.copyTo = function(parent, newName) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntrySync.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-remove\n * @return {undefined}\n */\nEntrySync.prototype.remove = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getMetadata\n * @return {!Metadata}\n */\nEntrySync.prototype.getMetadata = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-EntrySync-getParent\n * @return {!DirectoryEntrySync}\n */\nEntrySync.prototype.getParent = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction DirectoryEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-createReader\n * @return {!DirectoryReaderSync}\n */\nDirectoryEntrySync.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getFile\n * @param {string} path\n * @param {Object=} options\n * @return {!FileEntrySync}\n */\nDirectoryEntrySync.prototype.getFile = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-getDirectory\n * @param {string} path\n * @param {Object=} options\n * @return {!DirectoryEntrySync}\n */\nDirectoryEntrySync.prototype.getDirectory = function(path, options) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntrySync-removeRecursively\n * @return {undefined}\n */\nDirectoryEntrySync.prototype.removeRecursively = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreadersync-interface\n * @constructor\n */\nfunction DirectoryReaderSync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReaderSync-readEntries\n * @return {!Array}\n */\nDirectoryReaderSync.prototype.readEntries = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentrysync-interface\n * @constructor\n * @extends {EntrySync}\n */\nfunction FileEntrySync() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-createWriter\n * @return {!FileWriterSync}\n */\nFileEntrySync.prototype.createWriter = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntrySync-file\n * @return {!File}\n */\nFileEntrySync.prototype.file = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileexception-exception\n * @constructor\n */\nfunction FileException() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @type {number}\n */\nFileException.prototype.NOT_FOUND_ERR;\n\n/** @type {number} */\nFileException.NOT_FOUND_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @type {number}\n */\nFileException.prototype.SECURITY_ERR;\n\n/** @type {number} */\nFileException.SECURITY_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ABORT_ERR\n * @type {number}\n */\nFileException.prototype.ABORT_ERR;\n\n/** @type {number} */\nFileException.ABORT_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-NOT_READABLE_ERR\n * @type {number}\n */\nFileException.prototype.NOT_READABLE_ERR;\n\n/** @type {number} */\nFileException.NOT_READABLE_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#widl-FileException-ENCODING_ERR\n * @type {number}\n */\nFileException.prototype.ENCODING_ERR;\n\n/** @type {number} */\nFileException.ENCODING_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-NO_MODIFICATION_ALLOWED_ERR\n * @type {number}\n */\nFileException.prototype.NO_MODIFICATION_ALLOWED_ERR;\n\n/** @type {number} */\nFileException.NO_MODIFICATION_ALLOWED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_STATE_ERR;\n\n/** @type {number} */\nFileException.INVALID_STATE_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @type {number}\n */\nFileException.prototype.SYNTAX_ERR;\n\n/** @type {number} */\nFileException.SYNTAX_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-INVALID_MODIFICATION_ERR\n * @type {number}\n */\nFileException.prototype.INVALID_MODIFICATION_ERR;\n\n/** @type {number} */\nFileException.INVALID_MODIFICATION_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-QUOTA_EXCEEDED_ERR\n * @type {number}\n */\nFileException.prototype.QUOTA_EXCEEDED_ERR;\n\n/** @type {number} */\nFileException.QUOTA_EXCEEDED_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @type {number}\n */\nFileException.prototype.TYPE_MISMATCH_ERR;\n\n/** @type {number} */\nFileException.TYPE_MISMATCH_ERR;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @type {number}\n */\nFileException.prototype.PATH_EXISTS_ERR;\n\n/** @type {number} */\nFileException.PATH_EXISTS_ERR;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n */\nFileException.prototype.code;\n", ++"externs/flash.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the Flash Object JavaScript methods. This\n * file depends on w3c_dom2.js.\n * Created from\n * http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html\n *\n * @externs\n * @author ajp@9oo91e.qjz9zk (Andy Perelson)\n */\n\n\n// Standard Methods.\n\n/**\n * Call a Flash function exported by ExternalInterface.\n * @param {string} xmlString The XML string passed to Flash. The outer element\n * should be {@code }. A sample invocation string:\n * {@code \n * test}\n * @return {string} The serialized return value from Flash that you can eval.\n */\nHTMLObjectElement.prototype.CallFunction = function(xmlString) {};\n\n/**\n * Returns the value of the Flash variable specified by varName or null if the\n * variable does not exist.\n * @param {string} varName The variable name.\n * @return {?string} The variable value.\n */\nHTMLObjectElement.prototype.GetVariable = function(varName) {};\n\n/**\n * Activates the frame number specified by `frameNumber` in the current\n * movie.\n * @param {number} frameNumber A non-negative integer frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.GotoFrame = function(frameNumber) {};\n\n/**\n * @return {boolean} Whether the movie is currently playing.\n */\nHTMLObjectElement.prototype.IsPlaying = function() {};\n\n/**\n * Loads the movie identified by `url` to the layer specified by\n * `layerNumber`.\n * @param {number} layerNumber The layer number.\n * @param {string} url The movie URL.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.LoadMovie = function(layerNumber, url) {};\n\n/**\n * Pans a zoomed-in movie to the coordinates specified by x and y. Use mode to\n * specify whether the values for x and y are pixels or a percent of the window.\n * When mode is 0, the coordinates are pixels; when mode is 1, the coordinates\n * are percent of the window.\n * @param {number} x The x-coordinate.\n * @param {number} y The y-coordinate.\n * @param {number} mode The mode.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Pan = function(x, y, mode) {};\n\n/**\n * @return {number} The percent of the Flash Player movie that has streamed\n * into the browser so far; Possible values are from 0 to 100.\n */\nHTMLObjectElement.prototype.PercentLoaded = function() {};\n\n/**\n * Starts playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Play = function() {};\n\n/**\n * Goes to the first frame.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Rewind = function() {};\n\n/**\n * Sets the value of the flash variable.\n * @param {string} variableName The variable name.\n * @param {string} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetVariable = function(variableName, value) {};\n\n/**\n * Zooms in on a rectangular area of the movie. The units of the coordinates\n * are in twips (1440 units per inch).\n * @param {number} left The left coordinate.\n * @param {number} top The top coordinate.\n * @param {number} right The right coordinate.\n * @param {number} bottom The bottom coordinate.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetZoomRect = function(left, top, right, bottom) {};\n\n/**\n * Stops playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.StopPlay = function() {};\n\n/**\n * @return {number} The total number of frames in the movie.\n */\nHTMLObjectElement.prototype.TotalFrames = function() {};\n\n/**\n * Zooms the view by a relative scale factor.\n * @param {number} percent The percentage scale factor, should be an integer.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Zoom = function(percent) {};\n\n\n// TellTarget Methods.\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallFrame = function(target, frameNumber) {};\n\n/**\n * Executes the action in the timeline specified by `target` in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {string} label The frame label.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallLabel = function(target, label) {};\n\n/**\n * Returns the number of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {number} The number of the current frame.\n */\nHTMLObjectElement.prototype.TCurentFrame = function(target) {};\n\n/**\n * Returns the label of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {string} The label of the current frame, empty string if no\n * current frame.\n */\nHTMLObjectElement.prototype.TCurrentLabel = function(target) {};\n\n/**\n * Returns a string indicating the value of the property in the\n * specified timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {string} The value of the property.\n */\nHTMLObjectElement.prototype.TGetProperty = function(target, property) {};\n\n/**\n * Returns a number indicating the value of the property in the specified\n * timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {number} A number indicating the value of the property.\n */\nHTMLObjectElement.prototype.TGetPropertyAsNumber = function(target, property) {};\n\n/**\n * Goes to the specified frame number in the specified timeline.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoFrame = function(target, frameNumber) {};\n\n/**\n * Goes to the specified frame label in the specified timeline.\n * @param {string} target The timeline.\n * @param {string} label The framelabel.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoLabel = function(target, label) {};\n\n/**\n * Plays the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TPlay = function(target) {};\n\n/**\n * Sets the value of the property in the specified timeline.\n * @param {number} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @param {string|number} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TSetProperty = function(target, property, value) {};\n\n/**\n * Stops the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TStopPlay = function(target) {};\n', ++"externs/gecko_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over some of the\n * W3C\'s XML specifications by Gecko. This file depends on\n * w3c_xml.js. The whole file has been fully type annotated.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/**\n * XMLSerializer can be used to convert DOM subtree or DOM document into text.\n * XMLSerializer is available to unprivileged scripts.\n *\n * XMLSerializer is mainly useful for applications and extensions based on\n * Mozilla platform. While it\'s available to web pages, it\'s not part of any\n * standard and level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction XMLSerializer() {}\n\n/**\n * Returns the serialized subtree in the form of a string\n * @param {Node} subtree\n * @return {string}\n */\nXMLSerializer.prototype.serializeToString = function(subtree) {};\n\n/**\n * The subtree rooted by the specified element is serialized to a byte stream\n * using the character set specified.\n *\n * @param {Node} subtree\n * @return {Object}\n */\nXMLSerializer.prototype.serializeToStream = function(subtree) {};\n\n/**\n * DOMParser is mainly useful for applications and extensions based on Mozilla\n * platform. While it\'s available to web pages, it\'s not part of any standard and\n * level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction DOMParser() {}\n\n/**\n * The string passed in is parsed into a DOM document.\n *\n * Example:\n * var parser = new DOMParser();\n * var doc = parser.parseFromString(aStr, "text/xml");\n *\n * @param {!TrustedHTML|string} src The UTF16 string to be parsed.\n * @param {string} type The content type of the string.\n * @return {Document}\n */\nDOMParser.prototype.parseFromString = function(src, type) {};\n', ++"externs/html5.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the extensions over the\n * W3C's DOM3 specification in HTML5. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated.\n *\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/index.html\n * @see http://dev.w3.org/html5/spec/Overview.html\n *\n * This also includes Typed Array definitions from\n * http://www.khronos.org/registry/typedarray/specs/latest/\n *\n * This relies on w3c_event.js being included first.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n */\n\n/** @type {?HTMLSlotElement} */\nNode.prototype.assignedSlot;\n\n/**\n * @type {string}\n * @see https://dom.spec.whatwg.org/#dom-element-slot\n */\nElement.prototype.slot;\n\n/**\n * Note: In IE, the contains() method only exists on Elements, not Nodes.\n * Therefore, it is recommended that you use the Conformance framework to\n * prevent calling this on Nodes which are not Elements.\n * @see https://connect.m1cr050ft.qjz9zk/IE/feedback/details/780874/node-contains-is-incorrect\n *\n * @param {Node} n The node to check\n * @return {boolean} If 'n' is this Node, or is contained within this Node.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Node.contains\n * @nosideeffects\n */\nNode.prototype.contains = function(n) {};\n\n/** @type {boolean} */\nNode.prototype.isConnected;\n\n/**\n * Inserts the given HTML Element into the node at the location.\n * @param {string} where Where to insert the HTML text, one of 'beforeBegin',\n * 'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {!Element} element DOM Element to insert.\n * @return {?Element} The element that was inserted, or null, if the\n * insertion failed.\n * @see https://dom.spec.whatwg.org/#dom-element-insertadjacentelement\n */\nNode.prototype.insertAdjacentElement = function(where, element) {};\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-script-element\n */\nHTMLScriptElement.prototype.async;\n\n/**\n * @constructor\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element\n * @extends {HTMLElement}\n */\nfunction HTMLCanvasElement() {}\n\n/** @type {number} */\nHTMLCanvasElement.prototype.width;\n\n/** @type {number} */\nHTMLCanvasElement.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html5/scripting-1.html#dom-canvas-toblob\n * @param {function(!Blob)} callback\n * @param {string=} opt_type\n * @param {...*} var_args\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toBlob = function(callback, opt_type, var_args) {};\n\n/**\n * @param {string=} opt_type\n * @param {...*} var_args\n * @return {string}\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toDataURL = function(opt_type, var_args) {};\n\n/**\n * @modifies {this}\n * @param {string} contextId\n * @param {Object=} opt_args\n * @return {Object}\n */\nHTMLCanvasElement.prototype.getContext = function(contextId, opt_args) {};\n\n/**\n * @see https://www.w3.org/TR/mediacapture-fromelement/\n * @param {number=} opt_framerate\n * @return {!MediaStream}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.captureStream = function(opt_framerate) {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#dom-canvas-transfercontroltooffscreen\n * @return {!OffscreenCanvas}\n * @throws {Error}\n * */\nHTMLCanvasElement.prototype.transferControlToOffscreen = function() {};\n\n/**\n * @see https://html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface\n * @implements {EventTarget}\n * @implements {Transferable}\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @constructor\n */\nfunction OffscreenCanvas(width, height) {}\n\n/** @override */\nOffscreenCanvas.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nOffscreenCanvas.prototype.dispatchEvent = function(evt) {};\n\n/** @type {number} */\nOffscreenCanvas.prototype.width;\n\n/** @type {number} */\nOffscreenCanvas.prototype.height;\n\n/**\n * @param {string} contextId\n * @param {!Object=} opt_options\n * @modifies {this}\n * @return {!Object}\n */\nOffscreenCanvas.prototype.getContext = function(contextId, opt_options) {};\n\n/**\n * @return {!ImageBitmap}\n */\nOffscreenCanvas.prototype.transferToImageBitmap = function() {};\n\n/**\n * @param {{type: (string|undefined), quality: (number|undefined)}=} opt_options\n * @return {!Promise}\n */\nOffscreenCanvas.prototype.convertToBlob = function(opt_options) {};\n\n// TODO(tjgq): Find a way to add SVGImageElement to this typedef without making\n// svg.js part of core.\n/**\n * @typedef {HTMLImageElement|HTMLVideoElement|HTMLCanvasElement|ImageBitmap|\n * OffscreenCanvas}\n */\nvar CanvasImageSource;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvaspathmethods\n */\nfunction CanvasPathMethods() {}\n\n/**\n * @return {undefined}\n */\nCanvasPathMethods.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasPathMethods.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @constructor\n * @implements {CanvasPathMethods}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#path2d-objects\n */\nfunction Path2D() {}\n\n/**\n * @return {undefined}\n * @override\n */\nPath2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nPath2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nPath2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} optAnticlockwise\n * @return {undefined}\n * @override\n */\nPath2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, optAnticlockwise) {};\n\n/**\n * @param {Path2D} path\n * @return {undefined}\n */\nPath2D.prototype.addPath = function(path) {};\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvasdrawingstyles\n */\nfunction CanvasDrawingStyles() {}\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.lineWidth;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineCap;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.lineJoin;\n\n/** @type {number} */\nCanvasDrawingStyles.prototype.miterLimit;\n\n/**\n * @param {Array} segments\n * @return {undefined}\n */\nCanvasDrawingStyles.prototype.setLineDash = function(segments) {};\n\n/**\n * @return {!Array}\n */\nCanvasDrawingStyles.prototype.getLineDash = function() {};\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.font;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textAlign;\n\n/** @type {string} */\nCanvasDrawingStyles.prototype.textBaseline;\n\n// TODO(dramaix): replace this with @record.\n/**\n * @constructor\n * @abstract\n * @implements {CanvasDrawingStyles}\n * @implements {CanvasPathMethods}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction BaseRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement|!OffscreenCanvas} */\nBaseRenderingContext2D.prototype.canvas;\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.save = function() {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.restore = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.scale = function(x, y) {};\n\n/**\n * @param {number} angle\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.rotate = function(angle) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.translate = function(x, y) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.transform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.setTransform = function(\n m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createLinearGradient = function(\n x0, y0, x1, y1) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} r0\n * @param {number} x1\n * @param {number} y1\n * @param {number} r1\n * @return {!CanvasGradient}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.createRadialGradient = function(\n x0, y0, r0, x1, y1, r1) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {string} repetition\n * @return {?CanvasPattern}\n * @throws {Error}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#dom-context-2d-createpattern\n */\nBaseRenderingContext2D.prototype.createPattern = function(\n image, repetition) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clearRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeRect = function(x, y, w, h) {};\n\n/**\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.beginPath = function() {};\n\n/**\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.quadraticCurveTo = function(\n cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.bezierCurveTo = function(\n cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.arc = function(\n x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} rotation\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @see http://developer.m0z111a.qjz9zk/en/docs/Web/API/CanvasRenderingContext2D/ellipse\n */\nBaseRenderingContext2D.prototype.ellipse = function(\n x, y, radiusX, radiusY, rotation, startAngle, endAngle, opt_anticlockwise) {\n};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fill = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {Path2D=} optStroke\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.stroke = function(optStroke) {};\n\n/**\n * @param {Element} element\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawFocusIfNeeded = function(element) {};\n\n/**\n * @param {Path2D|string=} optFillRuleOrPath\n * @param {string=} optFillRule\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.clip = function(optFillRuleOrPath, optFillRule) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInStroke\n */\nBaseRenderingContext2D.prototype.isPointInStroke = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {string=} opt_fillRule\n * @return {boolean}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.isPointInPath = function(\n x, y, opt_fillRule) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.fillText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.strokeText = function(\n text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @return {!TextMetrics}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.measureText = function(text) {};\n\n/**\n * @param {CanvasImageSource} image\n * @param {number} dx Destination x coordinate.\n * @param {number} dy Destination y coordinate.\n * @param {number=} opt_dw Destination box width. Defaults to the image width.\n * @param {number=} opt_dh Destination box height.\n * Defaults to the image height.\n * @param {number=} opt_sx Source box x coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sy Source box y coordinate. Used to select a portion of\n * the source image to draw. Defaults to 0.\n * @param {number=} opt_sw Source box width. Used to select a portion of\n * the source image to draw. Defaults to the full image width.\n * @param {number=} opt_sh Source box height. Used to select a portion of\n * the source image to draw. Defaults to the full image height.\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.drawImage = function(\n image, dx, dy, opt_dw, opt_dh, opt_sx, opt_sy, opt_sw, opt_sh) {};\n\n/**\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n * @nosideeffects\n */\nBaseRenderingContext2D.prototype.createImageData = function(sw, sh) {};\n\n/**\n * @param {number} sx\n * @param {number} sy\n * @param {number} sw\n * @param {number} sh\n * @return {!ImageData}\n * @throws {Error}\n */\nBaseRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {};\n\n/**\n * @param {ImageData} imagedata\n * @param {number} dx\n * @param {number} dy\n * @param {number=} opt_dirtyX\n * @param {number=} opt_dirtyY\n * @param {number=} opt_dirtyWidth\n * @param {number=} opt_dirtyHeight\n * @return {undefined}\n */\nBaseRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy,\n opt_dirtyX, opt_dirtyY, opt_dirtyWidth, opt_dirtyHeight) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setFillColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n * @deprecated\n */\nBaseRenderingContext2D.prototype.setStrokeColor = function(\n opt_a, opt_b, opt_c, opt_d, opt_e) {};\n\n/**\n * @return {!Array}\n * @override\n */\nBaseRenderingContext2D.prototype.getLineDash = function() {};\n\n/**\n * @param {Array} segments\n * @return {undefined}\n * @override\n */\nBaseRenderingContext2D.prototype.setLineDash = function(segments) {};\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.fillColor;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-fillstyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.fillStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.font;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.globalAlpha;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.globalCompositeOperation;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineWidth;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineCap;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.lineJoin;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.miterLimit;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowBlur;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.shadowColor;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetX;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.shadowOffsetY;\n\n/** @type {boolean} */\nBaseRenderingContext2D.prototype.imageSmoothingEnabled;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-strokestyle\n * @implicitCast\n */\nBaseRenderingContext2D.prototype.strokeStyle;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.strokeColor;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textAlign;\n\n/** @type {string} */\nBaseRenderingContext2D.prototype.textBaseline;\n\n/** @type {number} */\nBaseRenderingContext2D.prototype.lineDashOffset;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction CanvasRenderingContext2D() {}\n\n/** @const {!HTMLCanvasElement} */\nCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n * @extends {BaseRenderingContext2D}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction OffscreenCanvasRenderingContext2D() {}\n\n/** @const {!OffscreenCanvas} */\nOffscreenCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @constructor\n */\nfunction CanvasGradient() {}\n\n/**\n * @param {number} offset\n * @param {string} color\n * @return {undefined}\n */\nCanvasGradient.prototype.addColorStop = function(offset, color) {};\n\n/**\n * @constructor\n */\nfunction CanvasPattern() {}\n\n/**\n * @constructor\n */\nfunction TextMetrics() {}\n\n/** @const {number} */\nTextMetrics.prototype.width;\n\n/**\n * @param {!Uint8ClampedArray|number} dataOrWidth In the first form, this is the\n * array of pixel data. In the second form, this is the image width.\n * @param {number} widthOrHeight In the first form, this is the image width. In\n * the second form, this is the image height.\n * @param {number=} opt_height In the first form, this is the optional image\n * height. The second form omits this argument.\n * @see https://html.spec.whatwg.org/multipage/scripting.html#imagedata\n * @constructor\n */\nfunction ImageData(dataOrWidth, widthOrHeight, opt_height) {}\n\n/** @const {!Uint8ClampedArray} */\nImageData.prototype.data;\n\n/** @const {number} */\nImageData.prototype.width;\n\n/** @const {number} */\nImageData.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html51/webappapis.html#webappapis-images\n * @interface\n */\nfunction ImageBitmap() {}\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.width;\n\n/**\n * @const {number}\n */\nImageBitmap.prototype.height;\n\n/**\n * @typedef {{\n * imageOrientation: (string|undefined),\n * premultiplyAlpha: (string|undefined),\n * colorSpaceConversion: (string|undefined),\n * resizeWidth: (number|undefined),\n * resizeHeight: (number|undefined),\n * resizeQuality: (string|undefined)\n * }}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#images-2\n */\nvar ImageBitmapOptions;\n\n/**\n * @param {(!HTMLCanvasElement|!Blob|!HTMLVideoElement|!HTMLImageElement|!ImageBitmap|!CanvasRenderingContext2D|!ImageData)}\n * image\n * @param {(number|!ImageBitmapOptions)=} sxOrOptions\n * @param {number=} sy\n * @param {number=} sw\n * @param {number=} sh\n * @param {!ImageBitmapOptions=} options\n * @return {!Promise}\n * @see * https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#dom-createimagebitmap\n */\nfunction createImageBitmap(image, sxOrOptions, sy, sw, sh, options) {}\n\n\n/**\n * @constructor\n */\nfunction ClientInformation() {}\n\n/** @type {boolean} */\nClientInformation.prototype.onLine;\n\n/**\n * @param {string} protocol\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerProtocolHandler = function(\n protocol, uri, title) {};\n\n/**\n * @param {string} mimeType\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerContentHandler = function(\n mimeType, uri, title) {};\n\n// HTML5 Database objects\n/**\n * @constructor\n */\nfunction Database() {}\n\n/**\n * @type {string}\n */\nDatabase.prototype.version;\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.transaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.readTransaction = function(\n callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {string} oldVersion\n * @param {string} newVersion\n * @param {function(!SQLTransaction) : void} callback\n * @param {function(!SQLError) : void} errorCallback\n * @param {Function} successCallback\n * @return {undefined}\n */\nDatabase.prototype.changeVersion = function(\n oldVersion, newVersion, callback, errorCallback, successCallback) {};\n\n/**\n * @interface\n */\nfunction DatabaseCallback() {}\n\n/**\n * @param {!Database} db\n * @return {undefined}\n */\nDatabaseCallback.prototype.handleEvent = function(db) {};\n\n/**\n * @constructor\n */\nfunction SQLError() {}\n\n/**\n * @type {number}\n */\nSQLError.prototype.code;\n\n/**\n * @type {string}\n */\nSQLError.prototype.message;\n\n/**\n * @constructor\n */\nfunction SQLTransaction() {}\n\n/**\n * @param {string} sqlStatement\n * @param {Array<*>=} opt_queryArgs\n * @param {SQLStatementCallback=} opt_callback\n * @param {(function(!SQLTransaction, !SQLError) : (boolean|void))=}\n * opt_errorCallback\n * @return {undefined}\n */\nSQLTransaction.prototype.executeSql = function(\n sqlStatement, opt_queryArgs, opt_callback, opt_errorCallback) {};\n\n/**\n * @typedef {(function(!SQLTransaction, !SQLResultSet) : void)}\n */\nvar SQLStatementCallback;\n\n/**\n * @constructor\n */\nfunction SQLResultSet() {}\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.insertId;\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.rowsAffected;\n\n/**\n * @type {!SQLResultSetRowList}\n */\nSQLResultSet.prototype.rows;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/webdatabase/#sqlresultsetrowlist\n */\nfunction SQLResultSetRowList() {}\n\n/**\n * @type {number}\n */\nSQLResultSetRowList.prototype.length;\n\n/**\n * @param {number} index\n * @return {Object}\n * @nosideeffects\n */\nSQLResultSetRowList.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nfunction openDatabase(name, version, description, size, opt_callback) {}\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {!Database}\n */\nWindow.prototype.openDatabase =\n function(name, version, description, size, opt_callback) {};\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-complete\n */\nHTMLImageElement.prototype.complete;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalwidth\n */\nHTMLImageElement.prototype.naturalWidth;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalheight\n */\nHTMLImageElement.prototype.naturalHeight;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-crossorigin\n */\nHTMLImageElement.prototype.crossOrigin;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-currentsrc\n */\nHTMLImageElement.prototype.currentSrc;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/images.html#image-decoding-hint\n */\nHTMLImageElement.prototype.decoding;\n\n/**\n * @return {!Promise}\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode\n */\nHTMLImageElement.prototype.decode;\n\n\n/**\n * This is a superposition of the Window and Worker postMessage methods.\n * @param {*} message\n * @param {(string|!Array)=} opt_targetOriginOrTransfer\n * @param {(string|!Array|!Array)=}\n * opt_targetOriginOrPortsOrTransfer\n * @return {void}\n */\nfunction postMessage(message, opt_targetOriginOrTransfer,\n opt_targetOriginOrPortsOrTransfer) {}\n\n/**\n * @param {*} message\n * @param {string=} targetOrigin\n * @param {(!Array)=} transfer\n * @return {void}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/postMessage\n */\nWindow.prototype.postMessage = function(message, targetOrigin, transfer) {};\n\n/**\n * The postMessage method (as implemented in Opera).\n * @param {string} message\n */\nDocument.prototype.postMessage = function(message) {};\n\n/**\n * Document head accessor.\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#the-head-element-0\n * @type {HTMLHeadElement}\n */\nDocument.prototype.head;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/dom.html#current-document-readiness\n */\nDocument.prototype.readyState;\n\n/**\n * @see https://html.spec.whatwg.org/#application-cache-api\n * @constructor\n * @implements {EventTarget}\n */\nfunction ApplicationCache() {}\n\n/** @override */\nApplicationCache.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nApplicationCache.prototype.dispatchEvent = function(evt) {};\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.prototype.UNCACHED;\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @const {number}\n */\nApplicationCache.UNCACHED;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.prototype.IDLE;\n\n/**\n * The cache is idle.\n * @const {number}\n */\nApplicationCache.IDLE;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.prototype.CHECKING;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @const {number}\n */\nApplicationCache.CHECKING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.prototype.DOWNLOADING;\n\n/**\n * The resources are being downloaded into the cache.\n * @const {number}\n */\nApplicationCache.DOWNLOADING;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.prototype.UPDATEREADY;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @const {number}\n */\nApplicationCache.UPDATEREADY;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.prototype.OBSOLETE;\n\n/**\n * The cache is obsolete.\n * @const {number}\n */\nApplicationCache.OBSOLETE;\n\n/**\n * The current status of the application cache.\n * @type {number}\n */\nApplicationCache.prototype.status;\n\n/**\n * Sent when the update process finishes for the first time; that is, the first\n * time an application cache is saved.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.oncached;\n\n/**\n * Sent when the cache update process begins.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onchecking;\n\n/**\n * Sent when the update process begins downloading resources in the manifest\n * file.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.ondownloading;\n\n/**\n * Sent when an error occurs.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onerror;\n\n/**\n * Sent when the update process finishes but the manifest file does not change.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onnoupdate;\n\n/**\n * Sent when each resource in the manifest file begins to download.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onprogress;\n\n/**\n * Sent when there is an existing application cache, the update process\n * finishes, and there is a new application cache ready for use.\n * @type {?function(!Event): void}\n */\nApplicationCache.prototype.onupdateready;\n\n/**\n * Replaces the active cache with the latest version.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.swapCache = function() {};\n\n/**\n * Manually triggers the update process.\n * @throws {DOMException}\n * @return {undefined}\n */\nApplicationCache.prototype.update = function() {};\n\n/** @type {?ApplicationCache} */\nvar applicationCache;\n\n/** @type {ApplicationCache} */\nWindow.prototype.applicationCache;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nWindow.prototype.importScripts = function(var_args) {};\n\n/**\n * Decodes a string of data which has been encoded using base-64 encoding.\n *\n * @param {string} encodedData\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-atob\n */\nfunction atob(encodedData) {}\n\n/**\n * @param {string} stringToEncode\n * @return {string}\n * @nosideeffects\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#dom-btoa\n */\nfunction btoa(stringToEncode) {}\n\n/**\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Worker/Functions_available_to_workers\n * @param {...!TrustedScriptURL|string} var_args\n * @return {undefined}\n */\nfunction importScripts(var_args) {}\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @constructor\n * @implements {EventTarget}\n */\nfunction WebWorker() {}\n\n/** @override */\nWebWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWebWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {string} message\n * @return {undefined}\n */\nWebWorker.prototype.postMessage = function(message) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWebWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWebWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL\n * @param {!WorkerOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n */\nfunction Worker(scriptURL, opt_options) {}\n\n/** @override */\nWorker.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.removeEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.postMessage = function(message, opt_transfer) {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.webkitPostMessage = function(message, opt_transfer) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>): void}\n */\nWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * @type {?function(!ErrorEvent): void}\n */\nWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @record\n */\nfunction WorkerOptions() {}\n\n/**\n * Defines a name for the new global environment of the worker, primarily for\n * debugging purposes.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.name;\n\n/**\n * 'classic' or 'module'. Default: 'classic'.\n * Specifying 'module' ensures the worker environment supports JavaScript\n * modules.\n * @type {string|undefined}\n */\nWorkerOptions.prototype.type;\n\n// WorkerOptions.prototype.credentials is defined in fetchapi.js.\n// if type = 'module', it specifies how scriptURL is fetched.\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL The URL of the script to run in the SharedWorker.\n * @param {string=} opt_name A name that can later be used to obtain a\n * reference to the same SharedWorker.\n * @constructor\n * @implements {EventTarget}\n */\nfunction SharedWorker(scriptURL, opt_name) {}\n\n/** @override */\nSharedWorker.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSharedWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MessagePort}\n */\nSharedWorker.prototype.port;\n\n/**\n * Called on network errors for loading the initial script.\n * @type {?function(!ErrorEvent): void}\n */\nSharedWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @see http://www.w3.org/TR/url-1/#dom-urlutilsreadonly\n * @interface\n */\nfunction WorkerLocation() {}\n\n/** @type {string} */\nWorkerLocation.prototype.href;\n\n/** @type {string} */\nWorkerLocation.prototype.origin;\n\n/** @type {string} */\nWorkerLocation.prototype.protocol;\n\n/** @type {string} */\nWorkerLocation.prototype.host;\n\n/** @type {string} */\nWorkerLocation.prototype.hostname;\n\n/** @type {string} */\nWorkerLocation.prototype.port;\n\n/** @type {string} */\nWorkerLocation.prototype.pathname;\n\n/** @type {string} */\nWorkerLocation.prototype.search;\n\n/** @type {string} */\nWorkerLocation.prototype.hash;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {EventTarget}\n */\nfunction WorkerGlobalScope() {}\n\n/** @type {!WorkerGlobalScope} */\nWorkerGlobalScope.prototype.self;\n\n/** @type {!WorkerLocation} */\nWorkerGlobalScope.prototype.location;\n\n/**\n * Closes the worker represented by this WorkerGlobalScope.\n * @return {undefined}\n */\nWorkerGlobalScope.prototype.close = function() {};\n\n/**\n * Sent when the worker encounters an error.\n * @type {?function(string, string, number, number, !Error): void}\n */\nWorkerGlobalScope.prototype.onerror;\n\n/**\n * Sent when the worker goes offline.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.onoffline;\n\n/**\n * Sent when the worker goes online.\n * @type {?function(!Event): void}\n */\nWorkerGlobalScope.prototype.ononline;\n\n/** @type {!WorkerPerformance} */\nWorkerGlobalScope.prototype.performance;\n\n/** @type {!WorkerNavigator} */\nWorkerGlobalScope.prototype.navigator;\n\n/**\n * Worker postMessage method.\n * @param {*} message\n * @param {(!Array)=} transfer\n * @return {void}\n */\nWorkerGlobalScope.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction DedicatedWorkerGlobalScope() {}\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.postMessage =\n function(message, opt_transfer) {};\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.webkitPostMessage =\n function(message, opt_transfer) {};\n\n/**\n * Sent when the creator posts a message to this worker.\n * @type {?function(!MessageEvent<*>): void}\n */\nDedicatedWorkerGlobalScope.prototype.onmessage;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction SharedWorkerGlobalScope() {}\n\n/** @type {string} */\nSharedWorkerGlobalScope.prototype.name;\n\n/**\n * Sent when a connection to this worker is opened.\n * @type {?function(!Event)}\n */\nSharedWorkerGlobalScope.prototype.onconnect;\n\n/** @type {!Array|undefined} */\nHTMLElement.observedAttributes;\n\n/**\n * @param {!Document} oldDocument\n * @param {!Document} newDocument\n */\nHTMLElement.prototype.adoptedCallback = function(oldDocument, newDocument) {};\n\n/**\n * @param {!{mode: string}} options\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.attachShadow = function(options) {};\n\n/**\n * @param {string} attributeName\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\nHTMLElement.prototype.attributeChangedCallback = function(attributeName, oldValue, newValue, namespace) {};\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.connectedCallback;\n\n/** @type {Element} */\nHTMLElement.prototype.contextMenu;\n\n/** @type {function()|undefined} */\nHTMLElement.prototype.disconnectedCallback;\n\n/** @type {boolean} */\nHTMLElement.prototype.draggable;\n\n/**\n * This is actually a DOMSettableTokenList property. However since that\n * interface isn't currently defined and no known browsers implement this\n * feature, just define the property for now.\n *\n * @const {Object}\n */\nHTMLElement.prototype.dropzone;\n\n/** @type {boolean} */\nHTMLElement.prototype.hidden;\n\n/** @type {boolean} */\nHTMLElement.prototype.spellcheck;\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions\n * @typedef {{\n * composed: boolean\n * }}\n */\nvar GetRootNodeOptions;\n\n/**\n * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n * @param {GetRootNodeOptions=} opt_options\n * @return {!Node}\n */\nNode.prototype.getRootNode = function(opt_options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.createShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.webkitCreateShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @type {ShadowRoot}\n */\nHTMLElement.prototype.shadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nHTMLElement.prototype.getDestinationInsertionPoints = function() {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @type {function()}\n */\nHTMLElement.prototype.createdCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.attachedCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.detachedCallback;\n\n/**\n * Cryptographic nonce used by Content Security Policy.\n * @see https://html.spec.whatwg.org/multipage/dom.html#elements-in-the-dom:noncedelement\n * @type {?string}\n */\nHTMLElement.prototype.nonce;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.download;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hash;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.host;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hostname;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.pathname;\n\n/**\n * The 'ping' attribute is known to be supported in recent versions (as of\n * mid-2014) of Chrome, Safari, and Firefox, and is not supported in any\n * current version of Internet Explorer.\n *\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAnchorElement.prototype.ping;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.port;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.protocol;\n\n/** @type {!DOMTokenList} */\nHTMLAnchorElement.prototype.relList;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.search;\n\n/** @type {string} */\nHTMLAreaElement.prototype.download;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAreaElement.prototype.ping;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html-markup/iframe.html#iframe.attrs.srcdoc\n */\nHTMLIFrameElement.prototype.srcdoc;\n\n/**\n * @type {?DOMTokenList}\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-iframe-element.html#attr-iframe-sandbox\n */\nHTMLIFrameElement.prototype.sandbox;\n\n/**\n * @type {Window}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/HTMLIFrameElement/contentWindow\n */\nHTMLIFrameElement.prototype.contentWindow;\n\n/** @type {string} */\nHTMLInputElement.prototype.autocomplete;\n\n/** @type {string} */\nHTMLInputElement.prototype.dirname;\n\n/** @type {FileList} */\nHTMLInputElement.prototype.files;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-input-indeterminate\n */\nHTMLInputElement.prototype.indeterminate;\n\n/** @type {string} */\nHTMLInputElement.prototype.list;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.max;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.min;\n\n/** @type {string} */\nHTMLInputElement.prototype.pattern;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.multiple;\n\n/** @type {string} */\nHTMLInputElement.prototype.placeholder;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.required;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.step;\n\n/** @type {Date} */\nHTMLInputElement.prototype.valueAsDate;\n\n/** @type {number} */\nHTMLInputElement.prototype.valueAsNumber;\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepDown = function(opt_n) {};\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier. Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepUp = function(opt_n) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/HTMLMediaElement\n */\nfunction HTMLMediaElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_empty\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_EMPTY;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_idle\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_IDLE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_loading\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_LOADING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-network_no_source\n * @const {number}\n */\nHTMLMediaElement.prototype.NETWORK_NO_SOURCE;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_nothing\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_NOTHING;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_metadata\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_METADATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_current_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_CURRENT_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_future_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_FUTURE_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.HAVE_ENOUGH_DATA;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-have_enough_data\n * @const {number}\n */\nHTMLMediaElement.prototype.HAVE_ENOUGH_DATA;\n\n/** @type {MediaError} */\nHTMLMediaElement.prototype.error;\n\n/** @type {string} @implicitCast */\nHTMLMediaElement.prototype.src;\n\n/** @type {string} */\nHTMLMediaElement.prototype.currentSrc;\n\n/** @type {number} */\nHTMLMediaElement.prototype.networkState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autobuffer;\n\n/** @type {!TimeRanges} */\nHTMLMediaElement.prototype.buffered;\n\n/** @type {?MediaStream} */\nHTMLMediaElement.prototype.srcObject;\n\n/**\n * Loads the media element.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.load = function() {};\n\n/**\n * @param {string} type Type of the element in question in question.\n * @return {string} Whether it can play the type.\n * @nosideeffects\n */\nHTMLMediaElement.prototype.canPlayType = function(type) {};\n\n/** Event handlers */\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onabort;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplaythrough;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ondurationchange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onemptied;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onended;\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onerror;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadeddata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadedmetadata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadstart;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onpause;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplaying;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onprogress;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onratechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeked;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeking;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onstalled;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onsuspend;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ontimeupdate;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onvolumechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onwaiting;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onload;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onerror;\n\n/** @type {string} */\nHTMLMediaElement.prototype.preload;\n\n/** @type {number} */\nHTMLMediaElement.prototype.readyState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.seeking;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/media.html#dom-media-crossorigin\n */\nHTMLMediaElement.prototype.crossOrigin;\n\n/**\n * The current time, in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.currentTime;\n\n/**\n * The absolute timeline offset.\n * @return {!Date}\n */\nHTMLMediaElement.prototype.getStartDate = function() {};\n\n/**\n * The length of the media in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.duration;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.paused;\n\n/** @type {number} */\nHTMLMediaElement.prototype.defaultPlaybackRate;\n\n/** @type {number} */\nHTMLMediaElement.prototype.playbackRate;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.played;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.seekable;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.ended;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autoplay;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.loop;\n\n/**\n * Starts playing the media.\n * @return {?Promise} This is a *nullable* Promise on purpose unlike\n * the HTML5 spec because supported older browsers (incl. Smart TVs) don't\n * return a Promise.\n */\nHTMLMediaElement.prototype.play = function() {};\n\n/**\n * Pauses the media.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.pause = function() {};\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.controls;\n\n/**\n * The audio volume, from 0.0 (silent) to 1.0 (loudest).\n * @type {number}\n */\nHTMLMediaElement.prototype.volume;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.muted;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-addtexttrack\n * @param {string} kind Kind of the text track.\n * @param {string=} opt_label Label of the text track.\n * @param {string=} opt_language Language of the text track.\n * @return {!TextTrack} TextTrack object added to the media element.\n */\nHTMLMediaElement.prototype.addTextTrack =\n function(kind, opt_label, opt_language) {};\n\n/** @type {!TextTrackList} */\nHTMLMediaElement.prototype.textTracks;\n\n/**\n * The ID of the audio device through which output is being delivered, or an\n * empty string if using the default device.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @type {string}\n */\nHTMLMediaElement.prototype.sinkId;\n\n/**\n * Sets the audio device through which output should be delivered.\n *\n * Implemented as a draft spec in Chrome 49+.\n *\n * @param {string} sinkId The ID of the audio output device, or empty string\n * for default device.\n *\n * @see https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions\n * @return {!Promise}\n */\nHTMLMediaElement.prototype.setSinkId = function(sinkId) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://html.spec.whatwg.org/multipage/dom.html#htmlunknownelement\n * @see https://html.spec.whatwg.org/multipage/scripting.html#customized-built-in-element-restrictions\n * @see https://w3c.github.io/webcomponents/spec/custom/#custom-elements-api\n */\nfunction HTMLUnknownElement() {}\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nText.prototype.getDestinationInsertionPoints = function() {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackList() {}\n\n/** @type {number} */\nTextTrackList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrack}\n */\nTextTrackList.prototype.getTrackById = function(id) {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack\n * @constructor\n * @implements {EventTarget}\n */\nfunction TextTrack() {}\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.addCue = function(cue) {};\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.removeCue = function(cue) {};\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.activeCues;\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.cues;\n\n/**\n * @type {string}\n */\nTextTrack.prototype.mode;\n\n/** @override */\nTextTrack.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/** @override */\nTextTrack.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nTextTrack.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcuelist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackCueList() {}\n\n/** @const {number} */\nTextTrackCueList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrackCue}\n */\nTextTrackCueList.prototype.getCueById = function(id) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcue\n * @constructor\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction TextTrackCue(startTime, endTime, text) {}\n\n/** @type {string} */\nTextTrackCue.prototype.id;\n\n/** @type {number} */\nTextTrackCue.prototype.startTime;\n\n/** @type {number} */\nTextTrackCue.prototype.endTime;\n\n/** @type {string} */\nTextTrackCue.prototype.text;\n\n\n\n/**\n * @see https://w3c.github.io/webvtt/#vttregion\n * @constructor\n */\nfunction VTTRegion() {}\n\n/** @type {string} */\nVTTRegion.prototype.id;\n\n/** @type {number} */\nVTTRegion.prototype.width;\n\n/** @type {number} */\nVTTRegion.prototype.lines;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.regionAnchorY;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorX;\n\n/** @type {number} */\nVTTRegion.prototype.viewportAnchorY;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-scrollsetting\n * @type {string}\n */\nVTTRegion.prototype.scroll;\n\n\n\n/**\n * @see http://dev.w3.org/html5/webvtt/#the-vttcue-interface\n * @constructor\n * @extends {TextTrackCue}\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction VTTCue(startTime, endTime, text) {}\n\n/** @type {?VTTRegion} */\nVTTCue.prototype.region;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-directionsetting\n * @type {string}\n */\nVTTCue.prototype.vertical;\n\n/** @type {boolean} */\nVTTCue.prototype.snapToLines;\n\n/** @type {(number|string)} */\nVTTCue.prototype.line;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-linealignsetting\n * @type {string}\n */\nVTTCue.prototype.lineAlign;\n\n/** @type {(number|string)} */\nVTTCue.prototype.position;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-positionalignsetting\n * @type {string}\n */\nVTTCue.prototype.positionAlign;\n\n/** @type {number} */\nVTTCue.prototype.size;\n\n/**\n * @see https://w3c.github.io/webvtt/#enumdef-alignsetting\n * @type {string}\n */\nVTTCue.prototype.align;\n\n/** @type {string} */\nVTTCue.prototype.text;\n\n/** @return {!DocumentFragment} */\nVTTCue.prototype.getCueAsHTML = function() {};\n\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n */\nfunction HTMLAudioElement() {}\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n * The webkit-prefixed attributes are defined in\n * https://cs.ch40m1um.qjz9zk/chromium/src/third_party/WebKit/Source/core/html/media/HTMLMediaElement.idl\n */\nfunction HTMLVideoElement() {}\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullscreen = function() {};\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullScreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullscreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullScreen = function() {};\n\n/** @type {number} */\nHTMLVideoElement.prototype.width;\n\n/** @type {number} */\nHTMLVideoElement.prototype.height;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoWidth;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoHeight;\n\n/** @type {string} */\nHTMLVideoElement.prototype.poster;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitSupportsFullscreen;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitDisplayingFullscreen;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDecodedFrameCount;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDroppedFrameCount;\n\n/**\n * @typedef {{\n * creationTime: number,\n * totalVideoFrames: number,\n * droppedVideoFrames: number,\n * corruptedVideoFrames: number,\n * totalFrameDelay: number\n * }}\n */\nvar VideoPlaybackQuality;\n\n/**\n * @see https://w3c.github.io/media-source/#htmlvideoelement-extensions\n * @return {!VideoPlaybackQuality} Stats about the current playback.\n */\nHTMLVideoElement.prototype.getVideoPlaybackQuality = function() {};\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/media.html#error-codes\n */\nfunction MediaError() {}\n\n/** @type {number} */\nMediaError.prototype.code;\n\n/** @type {string} */\nMediaError.prototype.message;\n\n/**\n * The fetching process for the media resource was aborted by the user agent at\n * the user's request.\n * @const {number}\n */\nMediaError.MEDIA_ERR_ABORTED;\n\n/**\n * A network error of some description caused the user agent to stop fetching\n * the media resource, after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_NETWORK;\n\n/**\n * An error of some description occurred while decoding the media resource,\n * after the resource was established to be usable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_DECODE;\n\n/**\n * The media resource indicated by the src attribute was not suitable.\n * @const {number}\n */\nMediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;\n\n// HTML5 MessageChannel\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messagechannel\n * @constructor\n */\nfunction MessageChannel() {}\n\n/**\n * Returns the first port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port1;\n\n/**\n * Returns the second port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port2;\n\n// HTML5 MessagePort\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messageport\n * @constructor\n * @implements {EventTarget}\n * @implements {Transferable}\n */\nfunction MessagePort() {}\n\n/** @override */\nMessagePort.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMessagePort.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMessagePort.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Posts a message through the channel, optionally with the given\n * Array of Transferables.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nMessagePort.prototype.postMessage = function(message, opt_transfer) {\n};\n\n/**\n * Begins dispatching messages received on the port.\n * @return {undefined}\n */\nMessagePort.prototype.start = function() {};\n\n/**\n * Disconnects the port, so that it is no longer active.\n * @return {undefined}\n */\nMessagePort.prototype.close = function() {};\n\n/**\n * TODO(blickly): Change this to MessageEvent<*> and add casts as needed\n * @type {?function(!MessageEvent): void}\n */\nMessagePort.prototype.onmessage;\n\n// HTML5 MessageEvent class\n/**\n * @typedef {Window|MessagePort|ServiceWorker}\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventsource\n */\nvar MessageEventSource;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageeventinit\n */\nfunction MessageEventInit() {}\n\n/** @type {T|undefined} */\nMessageEventInit.prototype.data;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.origin;\n\n/** @type {(string|undefined)} */\nMessageEventInit.prototype.lastEventId;\n\n/** @type {(?MessageEventSource|undefined)} */\nMessageEventInit.prototype.source;\n\n/** @type {(!Array|undefined)} */\nMessageEventInit.prototype.ports;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {MessageEventInit=} opt_eventInitDict\n * @template T\n */\nfunction MessageEvent(type, opt_eventInitDict) {}\n\n/**\n * The data payload of the message.\n * @type {T}\n */\nMessageEvent.prototype.data;\n\n/**\n * The origin of the message, for server-sent events and cross-document\n * messaging.\n * @type {string}\n */\nMessageEvent.prototype.origin;\n\n/**\n * The last event ID, for server-sent events.\n * @type {string}\n */\nMessageEvent.prototype.lastEventId;\n\n/**\n * The window that dispatched the event.\n * @type {Window}\n */\nMessageEvent.prototype.source;\n\n/**\n * The Array of MessagePorts sent with the message, for cross-document\n * messaging and channel messaging.\n * @type {!Array}\n */\nMessageEvent.prototype.ports;\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEvent = function(typeArg, canBubbleArg,\n cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {};\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} namespaceURI\n * @param {string=} typeArg\n * @param {boolean=} canBubbleArg\n * @param {boolean=} cancelableArg\n * @param {T=} dataArg\n * @param {string=} originArg\n * @param {string=} lastEventIdArg\n * @param {?MessageEventSource=} sourceArg\n * @param {!Array=} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEventNS = function(namespaceURI, typeArg,\n canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg,\n portsArg) {};\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html#the-closeevent-interface\n */\nfunction CloseEventInit() {}\n\n/**\n * @type {undefined|boolean}\n */\nCloseEventInit.prototype.wasClean;\n\n/**\n * @type {undefined|number}\n */\nCloseEventInit.prototype.code;\n\n/**\n * @type {undefined|string}\n */\nCloseEventInit.prototype.reason;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!CloseEventInit=} opt_init\n */\nvar CloseEvent = function(type, opt_init) {};\n\n/**\n * @type {boolean}\n */\nCloseEvent.prototype.wasClean;\n\n/**\n * @type {number}\n */\nCloseEvent.prototype.code;\n\n/**\n * @type {string}\n */\nCloseEvent.prototype.reason;\n\n/**\n * HTML5 BroadcastChannel class.\n * @param {string} channelName\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/BroadcastChannel\n * @see https://html.spec.whatwg.org/multipage/comms.html#dom-broadcastchannel\n * @implements {EventTarget}\n * @constructor\n */\nfunction BroadcastChannel(channelName) {}\n\n/**\n * Sends the message, of any type of object, to each BroadcastChannel object\n * listening to the same channel.\n * @param {*} message\n */\nBroadcastChannel.prototype.postMessage = function(message) {};\n\n/**\n * Closes the channel object, indicating it won't get any new messages, and\n * allowing it to be, eventually, garbage collected.\n * @return {void}\n */\nBroadcastChannel.prototype.close = function() {};\n\n/** @override */\nBroadcastChannel.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nBroadcastChannel.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nBroadcastChannel.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/**\n * An EventHandler property that specifies the function to execute when a\n * message event is fired on this object.\n * @type {?function(!MessageEvent<*>)}\n */\nBroadcastChannel.prototype.onmessage;\n\n/**\n * The name of the channel.\n * @type {string}\n */\nBroadcastChannel.prototype.name;\n\n/**\n * HTML5 DataTransfer class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransfer() {}\n\n/** @type {string} */\nDataTransfer.prototype.dropEffect;\n\n/** @type {string} */\nDataTransfer.prototype.effectAllowed;\n\n/** @type {!Array} */\nDataTransfer.prototype.types;\n\n/** @type {!FileList} */\nDataTransfer.prototype.files;\n\n/**\n * @param {string=} opt_format Format for which to remove data.\n * @return {undefined}\n */\nDataTransfer.prototype.clearData = function(opt_format) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @param {string} data Data to add.\n * @return {boolean}\n */\nDataTransfer.prototype.setData = function(format, data) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @return {string} Data for the given format.\n */\nDataTransfer.prototype.getData = function(format) { return ''; };\n\n/**\n * @param {HTMLElement} img The image to use when dragging.\n * @param {number} x Horizontal position of the cursor.\n * @param {number} y Vertical position of the cursor.\n * @return {undefined}\n */\nDataTransfer.prototype.setDragImage = function(img, x, y) {};\n\n/**\n * @param {HTMLElement} elem Element to receive drag result events.\n * @return {undefined}\n */\nDataTransfer.prototype.addElement = function(elem) {};\n\n/**\n * Addition for accessing clipboard file data that are part of the proposed\n * HTML5 spec.\n * @type {DataTransfer}\n */\nMouseEvent.prototype.dataTransfer;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see https://w3c.github.io/uievents/#idl-wheeleventinit\n */\nfunction WheelEventInit() {}\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaX;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaY;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaZ;\n\n/** @type {undefined|number} */\nWheelEventInit.prototype.deltaMode;\n\n/**\n * @param {string} type\n * @param {WheelEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-WheelEvent\n * @constructor\n * @extends {MouseEvent}\n */\nfunction WheelEvent(type, opt_eventInitDict) {}\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PIXEL;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_LINE;\n\n/** @const {number} */\nWheelEvent.DOM_DELTA_PAGE;\n\n/** @const {number} */\nWheelEvent.prototype.deltaX;\n\n/** @const {number} */\nWheelEvent.prototype.deltaY;\n\n/** @const {number} */\nWheelEvent.prototype.deltaZ;\n\n/** @const {number} */\nWheelEvent.prototype.deltaMode;\n\n/**\n * HTML5 DataTransferItem class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransferItem() {}\n\n/** @type {string} */\nDataTransferItem.prototype.kind;\n\n/** @type {string} */\nDataTransferItem.prototype.type;\n\n/**\n * @param {function(string)} callback\n * @return {undefined}\n */\nDataTransferItem.prototype.getAsString = function(callback) {};\n\n/**\n * @return {?File} The file corresponding to this item, or null.\n * @nosideeffects\n */\nDataTransferItem.prototype.getAsFile = function() { return null; };\n\n/**\n * HTML5 DataTransferItemList class. There are some discrepancies in the docs\n * on the whatwg.org site. When in doubt, these prototypes match what is\n * implemented as of Chrome 30.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n * @implements {IArrayLike}\n */\nfunction DataTransferItemList() {}\n\n/** @type {number} */\nDataTransferItemList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {DataTransferItem} The ith DataTransferItem in the list, or null.\n * @nosideeffects\n */\nDataTransferItemList.prototype.item = function(i) { return null; };\n\n/**\n * Adds an item to the list.\n * @param {string|!File} data Data for the item being added.\n * @param {string=} opt_type Mime type of the item being added. MUST be present\n * if the {@code data} parameter is a string.\n * @return {DataTransferItem}\n */\nDataTransferItemList.prototype.add = function(data, opt_type) {};\n\n/**\n * Removes an item from the list.\n * @param {number} i File to remove from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.remove = function(i) {};\n\n/**\n * Removes all items from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.clear = function() {};\n\n/** @type {!DataTransferItemList} */\nDataTransfer.prototype.items;\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see http://w3c.github.io/html/editing.html#dictdef-drageventinit\n */\nfunction DragEventInit() {}\n\n/** @type {undefined|?DataTransfer} */\nDragEventInit.prototype.dataTransfer;\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dragevent-interface\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {DragEventInit=} opt_eventInitDict\n */\nfunction DragEvent(type, opt_eventInitDict) {}\n\n/** @type {DataTransfer} */\nDragEvent.prototype.dataTransfer;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/progress-events/#progresseventinit\n */\nfunction ProgressEventInit() {}\n\n/** @type {undefined|boolean} */\nProgressEventInit.prototype.lengthComputable;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.loaded;\n\n/** @type {undefined|number} */\nProgressEventInit.prototype.total;\n\n/**\n * @constructor\n * @template TARGET\n * @param {string} type\n * @param {ProgressEventInit=} opt_progressEventInitDict\n * @extends {Event}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/ProgressEvent\n */\nfunction ProgressEvent(type, opt_progressEventInitDict) {}\n\n/**\n * @override\n * @type {TARGET}\n */\nProgressEvent.prototype.target;\n\n/** @type {number} */\nProgressEvent.prototype.total;\n\n/** @type {number} */\nProgressEvent.prototype.loaded;\n\n/** @type {boolean} */\nProgressEvent.prototype.lengthComputable;\n\n\n/**\n * @constructor\n */\nfunction TimeRanges() {}\n\n/** @type {number} */\nTimeRanges.prototype.length;\n\n/**\n * @param {number} index The index.\n * @return {number} The start time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.start = function(index) { return 0; };\n\n/**\n * @param {number} index The index.\n * @return {number} The end time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.end = function(index) { return 0; };\n\n\n// HTML5 Web Socket class\n/**\n * @see https://html.spec.whatwg.org/multipage/web-sockets.html\n * @constructor\n * @param {string} url\n * @param {(string|!Array)=} opt_protocol\n * @implements {EventTarget}\n */\nfunction WebSocket(url, opt_protocol) {}\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.CONNECTING;\n\n/**\n * The connection has not yet been established.\n * @const {number}\n */\nWebSocket.prototype.CONNECTING;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.OPEN;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @const {number}\n */\nWebSocket.prototype.OPEN;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.CLOSING;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @const {number}\n */\nWebSocket.prototype.CLOSING;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.CLOSED;\n\n/**\n * The connection has been closed or could not be opened.\n * @const {number}\n */\nWebSocket.prototype.CLOSED;\n\n/** @override */\nWebSocket.prototype.addEventListener = function(type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nWebSocket.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Returns the URL value that was passed to the constructor.\n * @type {string}\n */\nWebSocket.prototype.url;\n\n/**\n * Represents the state of the connection.\n * @type {number}\n */\nWebSocket.prototype.readyState;\n\n/**\n * Returns the number of bytes that have been queued but not yet sent.\n * @type {number}\n */\nWebSocket.prototype.bufferedAmount;\n\n/**\n * An event handler called on error event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onerror;\n\n/**\n * An event handler called on open event.\n * @type {?function(!Event): void}\n */\nWebSocket.prototype.onopen;\n\n/**\n * An event handler called on message event.\n * @type {?function(!MessageEvent): void}\n */\nWebSocket.prototype.onmessage;\n\n/**\n * An event handler called on close event.\n * @type {?function(!CloseEvent): void}\n */\nWebSocket.prototype.onclose;\n\n/**\n * Transmits data using the connection.\n * @param {string|!ArrayBuffer|!ArrayBufferView|!Blob} data\n * @return {void}\n */\nWebSocket.prototype.send = function(data) {};\n\n/**\n * Closes the Web Socket connection or connection attempt, if any.\n * @param {number=} opt_code\n * @param {string=} opt_reason\n * @return {undefined}\n */\nWebSocket.prototype.close = function(opt_code, opt_reason) {};\n\n/**\n * @type {string} Sets the type of data (blob or arraybuffer) for binary data.\n */\nWebSocket.prototype.binaryType;\n\n// HTML5 History\n/**\n * @constructor\n * @see http://w3c.github.io/html/browsers.html#the-history-interface\n */\nfunction History() {}\n\n/**\n * Goes back one step in the joint session history.\n * If there is no previous page, does nothing.\n *\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-history-back\n * @param {number=} opt_distance the number of entries to go back\n * (Mozilla doesn't support distance -- use #go instead)\n *\n * @return {undefined}\n */\nHistory.prototype.back = function(opt_distance) {};\n\n/**\n * Goes forward one step in the joint session history.\n * If there is no next page, does nothing.\n *\n * @return {undefined}\n */\nHistory.prototype.forward = function() {};\n\n/**\n * The number of entries in the joint session history.\n *\n * @type {number}\n */\nHistory.prototype.length;\n\n/**\n * Goes back or forward the specified number of steps in the joint session\n * history. A zero delta will reload the current page. If the delta is out of\n * range, does nothing.\n *\n * @param {number} delta The number of entries to go back.\n * @return {undefined}\n */\nHistory.prototype.go = function(delta) {};\n\n/**\n * Pushes a new state into the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a new session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.pushState = function(data, title, opt_url) {};\n\n/**\n * Replaces the current state in the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.replaceState = function(data, title, opt_url) {};\n\n/**\n * Pending state object.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#Reading_the_current_state\n * @type {*}\n */\nHistory.prototype.state;\n\n/**\n * Allows web applications to explicitly set default scroll restoration behavior\n * on history navigation. This property can be either auto or manual.\n *\n * Non-standard. Only supported in Chrome 46+.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/History\n * @see https://majido.github.io/scroll-restoration-proposal/history-based-api.html\n * @type {string}\n */\nHistory.prototype.scrollRestoration;\n\n/**\n * Add history property to Window.\n *\n * @type {!History}\n */\nWindow.prototype.history;\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface\n */\nfunction Location() {}\n\n/**\n * Returns the Location object's URL. Can be set, to navigate to the given URL.\n * @implicitCast\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-href\n */\nLocation.prototype.href;\n\n/**\n * Returns the Location object's URL's origin.\n * @const {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-origin\n */\nLocation.prototype.origin;\n\n/**\n * Returns the Location object's URL's scheme. Can be set, to navigate to the\n * same URL with a changed scheme.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-protocol\n */\nLocation.prototype.protocol;\n\n/**\n * Returns the Location object's URL's host and port (if different from the\n * default port for the scheme). Can be set, to navigate to the same URL with\n * a changed host and port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-host\n */\nLocation.prototype.host;\n\n/**\n * Returns the Location object's URL's host. Can be set, to navigate to the\n * same URL with a changed host.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hostname\n */\nLocation.prototype.hostname;\n\n/**\n * Returns the Location object's URL's port. Can be set, to navigate to the\n * same URL with a changed port.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#the-location-interface:dom-location-port\n */\nLocation.prototype.port;\n\n/**\n * Returns the Location object's URL's path. Can be set, to navigate to the\n * same URL with a changed path.\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-pathname\n */\nLocation.prototype.pathname;\n\n/**\n * Returns the Location object's URL's query (includes leading \"?\" if\n * non-empty). Can be set, to navigate to the same URL with a changed query\n * (ignores leading \"?\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-search\n */\nLocation.prototype.search;\n\n/**\n * Returns the Location object's URL's fragment (includes leading \"#\" if\n * non-empty). Can be set, to navigate to the same URL with a changed fragment\n * (ignores leading \"#\").\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-hash\n */\nLocation.prototype.hash;\n\n/**\n * Navigates to the given page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-assign\n */\nLocation.prototype.assign = function(url) {};\n\n/**\n * Removes the current page from the session history and navigates to the given\n * page.\n * @param {!TrustedURL|string} url\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-replace\n */\nLocation.prototype.replace = function(url) {};\n\n/**\n * Reloads the current page.\n * @param {boolean=} forceReload If true, reloads the page from\n * the server. Defaults to false.\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-reload\n */\nLocation.prototype.reload = function(forceReload) {};\n\n/**\n * Returns a DOMStringList object listing the origins of the ancestor browsing\n * contexts, from the parent browsing context to the top-level browsing\n * context.\n * @type {DOMStringList}\n * @see https://html.spec.whatwg.org/multipage/history.html#dom-location-ancestororigins\n */\nLocation.prototype.ancestorOrigins;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#popstateevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{state: *}=} opt_eventInitDict\n */\nfunction PopStateEvent(type, opt_eventInitDict) {}\n\n/**\n * @type {*}\n */\nPopStateEvent.prototype.state;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} stateArg\n * @return {undefined}\n */\nPopStateEvent.prototype.initPopStateEvent = function(typeArg, canBubbleArg,\n cancelableArg, stateArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#hashchangeevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{oldURL: string, newURL: string}=} opt_eventInitDict\n */\nfunction HashChangeEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nHashChangeEvent.prototype.oldURL;\n\n/** @type {string} */\nHashChangeEvent.prototype.newURL;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} oldURLArg\n * @param {string} newURLArg\n * @return {undefined}\n */\nHashChangeEvent.prototype.initHashChangeEvent = function(typeArg, canBubbleArg,\n cancelableArg, oldURLArg, newURLArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#pagetransitionevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{persisted: boolean}=} opt_eventInitDict\n */\nfunction PageTransitionEvent(type, opt_eventInitDict) {}\n\n/** @type {boolean} */\nPageTransitionEvent.prototype.persisted;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} persistedArg\n * @return {undefined}\n */\nPageTransitionEvent.prototype.initPageTransitionEvent = function(typeArg,\n canBubbleArg, cancelableArg, persistedArg) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n */\nfunction FileList() {}\n\n/** @type {number} */\nFileList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {File} The ith file in the list.\n * @nosideeffects\n */\nFileList.prototype.item = function(i) { return null; };\n\n/**\n * @type {boolean}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#withcredentials\n */\nXMLHttpRequest.prototype.withCredentials;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadstart\n */\nXMLHttpRequest.prototype.onloadstart;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequest.prototype.onprogress;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onabort\n */\nXMLHttpRequest.prototype.onabort;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onload\n */\nXMLHttpRequest.prototype.onload;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-ontimeout\n */\nXMLHttpRequest.prototype.ontimeout;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadend\n */\nXMLHttpRequest.prototype.onloadend;\n\n/**\n * @type {XMLHttpRequestUpload}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-upload-attribute\n */\nXMLHttpRequest.prototype.upload;\n\n/**\n * @param {string} mimeType The mime type to override with.\n * @return {undefined}\n */\nXMLHttpRequest.prototype.overrideMimeType = function(mimeType) {};\n\n/**\n * @type {string}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-responsetype-attribute\n */\nXMLHttpRequest.prototype.responseType;\n\n/**\n * @type {?(ArrayBuffer|Blob|Document|Object|string)}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-response-attribute\n */\nXMLHttpRequest.prototype.response;\n\n\n/**\n * @type {ArrayBuffer}\n * Implemented as a draft spec in Firefox 4 as the way to get a requested array\n * buffer from an XMLHttpRequest.\n * @see https://developer.m0z111a.qjz9zk/En/Using_XMLHttpRequest#Receiving_binary_data_using_JavaScript_typed_arrays\n *\n * This property is not used anymore and should be removed.\n * @see https://github.com/google/closure-compiler/pull/1389\n */\nXMLHttpRequest.prototype.mozResponseArrayBuffer;\n\n/**\n * XMLHttpRequestEventTarget defines events for checking the status of a data\n * transfer between a client and a server. This should be a common base class\n * for XMLHttpRequest and XMLHttpRequestUpload.\n *\n * @constructor\n * @implements {EventTarget}\n */\nfunction XMLHttpRequestEventTarget() {}\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequestEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * An event target to track the status of an upload.\n *\n * @constructor\n * @extends {XMLHttpRequestEventTarget}\n */\nfunction XMLHttpRequestUpload() {}\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequestUpload.prototype.onprogress;\n\n/**\n * @param {number=} opt_width\n * @param {number=} opt_height\n * @constructor\n * @extends {HTMLImageElement}\n */\nfunction Image(opt_width, opt_height) {}\n\n\n/**\n * Dataset collection.\n * This is really a DOMStringMap but it behaves close enough to an object to\n * pass as an object.\n * @const {!Object}\n */\nHTMLElement.prototype.dataset;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see https://dom.spec.whatwg.org/#interface-domtokenlist\n */\nfunction DOMTokenList() {}\n\n/**\n * Returns the number of CSS classes applied to this Element.\n * @type {number}\n */\nDOMTokenList.prototype.length;\n\n/**\n * Returns the string value applied to this Element.\n * @type {string|undefined}\n */\nDOMTokenList.prototype.value;\n\n/**\n * @param {number} index The index of the item to return.\n * @return {string} The CSS class at the specified index.\n * @nosideeffects\n */\nDOMTokenList.prototype.item = function(index) {};\n\n/**\n * @param {string} token The CSS class to check for.\n * @return {boolean} Whether the CSS class has been applied to the Element.\n * @nosideeffects\n */\nDOMTokenList.prototype.contains = function(token) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to add to this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.add = function(var_args) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to remove from this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.remove = function(var_args) {};\n\n/**\n * Replaces token with newToken.\n * @param {string} token The CSS class to replace.\n * @param {string} newToken The new CSS class to use.\n * @return {undefined}\n */\nDOMTokenList.prototype.replace = function(token, newToken) {};\n\n/**\n * @param {string} token The token to query for.\n * @return {boolean} Whether the token was found.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/DOMTokenList/supports\n * @nosideeffects\n */\nDOMTokenList.prototype.supports = function(token) {};\n\n/**\n * @param {string} token The CSS class to toggle from this element.\n * @param {boolean=} opt_force True to add the class whether it exists\n * or not. False to remove the class whether it exists or not.\n * This argument is not supported on IE 10 and below, according to\n * the MDN page linked below.\n * @return {boolean} False if the token was removed; True otherwise.\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element.classList\n */\nDOMTokenList.prototype.toggle = function(token, opt_force) {};\n\n/**\n * @return {string} A stringified representation of CSS classes.\n * @nosideeffects\n * @override\n */\nDOMTokenList.prototype.toString = function() {};\n\n/**\n * @return {!IteratorIterable} An iterator to go through all values of\n * the key/value pairs contained in this object.\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/DOMTokenList/values\n */\nDOMTokenList.prototype.values = function() {};\n\n/**\n * A better interface to CSS classes than className.\n * @const {!DOMTokenList}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element/classList\n */\nElement.prototype.classList;\n\n/**\n * Constraint Validation API properties and methods\n * @see http://www.w3.org/TR/2009/WD-html5-20090423/forms.html#the-constraint-validation-api\n */\n\n/** @return {boolean} */\nHTMLFormElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLFormElement.prototype.reportValidity = function() {};\n\n/** @type {boolean} */\nHTMLFormElement.prototype.noValidate;\n\n/** @constructor */\nfunction ValidityState() {}\n\n/** @type {boolean} */\nValidityState.prototype.badInput;\n\n/** @type {boolean} */\nValidityState.prototype.customError;\n\n/** @type {boolean} */\nValidityState.prototype.patternMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.rangeOverflow;\n\n/** @type {boolean} */\nValidityState.prototype.rangeUnderflow;\n\n/** @type {boolean} */\nValidityState.prototype.stepMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.typeMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.tooLong;\n\n/** @type {boolean} */\nValidityState.prototype.tooShort;\n\n/** @type {boolean} */\nValidityState.prototype.valid;\n\n/** @type {boolean} */\nValidityState.prototype.valueMissing;\n\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLButtonElement.prototype.labels;\n\n/** @type {string} */\nHTMLButtonElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLButtonElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLButtonElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLButtonElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLButtonElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLButtonElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLButtonElement.prototype.formTarget;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.autofocus;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.formNoValidate;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLInputElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLInputElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLInputElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLInputElement.prototype.formTarget;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLInputElement.prototype.labels;\n\n/** @type {string} */\nHTMLInputElement.prototype.validationMessage;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionStart;\n\n/**\n * @type {number}\n * @implicitCast\n */\nHTMLInputElement.prototype.selectionEnd;\n\n/** @type {string} */\nHTMLInputElement.prototype.selectionDirection;\n\n/**\n * @param {number} start\n * @param {number} end\n * @param {string=} direction\n * @see https://html.spec.whatwg.org/#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLInputElement.prototype.setSelectionRange = function(start, end, direction) {};\n\n/**\n * @const {ValidityState}\n */\nHTMLInputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLInputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLInputElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLInputElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {Element} */\nHTMLLabelElement.prototype.control;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLSelectElement.prototype.labels;\n\n/** @type {HTMLCollection} */\nHTMLSelectElement.prototype.selectedOptions;\n\n/** @type {string} */\nHTMLSelectElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLSelectElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLSelectElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.autofocus;\n\n/**\n * Can return null when hidden.\n * See https://html.spec.whatwg.org/multipage/forms.html#dom-lfe-labels\n * @const {?NodeList}\n */\nHTMLTextAreaElement.prototype.labels;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.placeholder;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLTextAreaElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#htmlembedelement\n */\nfunction HTMLEmbedElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-width\n */\nHTMLEmbedElement.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-height\n */\nHTMLEmbedElement.prototype.height;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-src\n */\nHTMLEmbedElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-type\n */\nHTMLEmbedElement.prototype.type;\n\n// Fullscreen APIs.\n\n/**\n * @record\n * @see https://fullscreen.spec.whatwg.org/#dictdef-fullscreenoptions\n */\nfunction FullscreenOptions() {}\n\n/** @type {string} */\nFullscreenOptions.prototype.navigationUI;\n\n/**\n * @see https://fullscreen.spec.whatwg.org/#dom-element-requestfullscreen\n * @param {!FullscreenOptions=} options\n * @return {undefined}\n */\nElement.prototype.requestFullscreen = function(options) {};\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenenabled\n */\nDocument.prototype.fullscreenEnabled;\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenelement\n */\nDocument.prototype.fullscreenElement;\n\n/**\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-exitfullscreen\n * @return {undefined}\n */\nDocument.prototype.exitFullscreen = function() {};\n\n// Externs definitions of browser current implementations.\n// Firefox 10 implementation.\nElement.prototype.mozRequestFullScreen = function() {};\n\nElement.prototype.mozRequestFullScreenWithKeys = function() {};\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreen;\n\nDocument.prototype.mozCancelFullScreen = function() {};\n\n/** @type {Element} */\nDocument.prototype.mozFullScreenElement;\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreenEnabled;\n\n// Chrome 21 implementation.\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullScreen = function(opt_allowKeyboardInput) {};\n\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n * Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullscreen = function(opt_allowKeyboardInput) {};\n\n/** @type {boolean} */\nDocument.prototype.webkitIsFullScreen;\n\nDocument.prototype.webkitCancelFullScreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.webkitFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.webkitCurrentFullScreenElement;\n\n/** @type {Element} */\nDocument.prototype.webkitFullscreenElement;\n\n/** @type {boolean} */\nDocument.prototype.webkitFullScreenKeyboardInputAllowed;\n\n// IE 11 implementation.\n// http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/dn265028(v=vs.85).aspx\n/** @return {void} */\nElement.prototype.msRequestFullscreen = function() {};\n\n/** @return {void} */\nDocument.prototype.msExitFullscreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.msFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.msFullscreenElement;\n\n/** @const {number} */\nElement.ALLOW_KEYBOARD_INPUT;\n\n/** @const {number} */\nElement.prototype.ALLOW_KEYBOARD_INPUT;\n\n\n/**\n * @typedef {{\n * childList: (boolean|undefined),\n * attributes: (boolean|undefined),\n * characterData: (boolean|undefined),\n * subtree: (boolean|undefined),\n * attributeOldValue: (boolean|undefined),\n * characterDataOldValue: (boolean|undefined),\n * attributeFilter: (!Array|undefined)\n * }}\n */\nvar MutationObserverInit;\n\n\n/** @constructor */\nfunction MutationRecord() {}\n\n/** @type {string} */\nMutationRecord.prototype.type;\n\n/** @type {Node} */\nMutationRecord.prototype.target;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.addedNodes;\n\n/** @type {!NodeList} */\nMutationRecord.prototype.removedNodes;\n\n/** @type {?Node} */\nMutationRecord.prototype.previousSibling;\n\n/** @type {?Node} */\nMutationRecord.prototype.nextSibling;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeName;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeNamespace;\n\n/** @type {?string} */\nMutationRecord.prototype.oldValue;\n\n\n/**\n * @see http://www.w3.org/TR/domcore/#mutation-observers\n * @param {function(!Array, !MutationObserver)} callback\n * @constructor\n */\nfunction MutationObserver(callback) {}\n\n/**\n * @param {Node} target\n * @param {MutationObserverInit=} options\n * @return {undefined}\n */\nMutationObserver.prototype.observe = function(target, options) {};\n\nMutationObserver.prototype.disconnect = function() {};\n\n/**\n * @return {!Array}\n */\nMutationObserver.prototype.takeRecords = function() {};\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.WebKitMutationObserver;\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.MozMutationObserver;\n\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {VisibilityState}\n */\nDocument.prototype.visibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.mozVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.webkitVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.msVisibilityState;\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {boolean}\n */\nDocument.prototype.hidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.mozHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.webkitHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.msHidden;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}=}\n * options\n * @return {function(new:Element, ...*)} a constructor for the new tag.\n * @deprecated document.registerElement() is deprecated in favor of\n * customElements.define()\n */\nDocument.prototype.registerElement = function(type, options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}} options\n * @deprecated This method has been removed and will be removed soon from this file.\n */\nDocument.prototype.register = function(type, options) {};\n\n/**\n * @type {!FontFaceSet}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfacesource-fonts\n */\nDocument.prototype.fonts;\n\n\n/**\n * @type {?HTMLScriptElement}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Document/currentScript\n */\nDocument.prototype.currentScript;\n\n/**\n * Definition of ShadowRoot interface,\n * @see http://www.w3.org/TR/shadow-dom/#api-shadow-root\n * @constructor\n * @extends {DocumentFragment}\n */\nfunction ShadowRoot() {}\n\n/**\n * The host element that a ShadowRoot is attached to.\n * Note: this is not yet W3C standard but is undergoing development.\n * W3C feature tracking bug:\n * https://www.w3.org/Bugs/Public/show_bug.cgi?id=22399\n * Draft specification:\n * https://dvcs.w3.org/hg/webcomponents/raw-file/6743f1ace623/spec/shadow/index.html#shadow-root-object\n * @type {!Element}\n */\nShadowRoot.prototype.host;\n\n/**\n * @param {string} id id.\n * @return {HTMLElement}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementById = function(id) {};\n\n\n/**\n * @return {Selection}\n * @nosideeffects\n */\nShadowRoot.prototype.getSelection = function() {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {Element}\n * @nosideeffects\n */\nShadowRoot.prototype.elementFromPoint = function(x, y) {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {!IArrayLike}\n * @nosideeffects\n */\nShadowRoot.prototype.elementsFromPoint = function(x, y) {};\n\n\n/**\n * @type {?Element}\n */\nShadowRoot.prototype.activeElement;\n\n\n/**\n * @type {string}\n */\nShadowRoot.prototype.mode;\n\n\n/**\n * @type {?ShadowRoot}\n * @deprecated\n */\nShadowRoot.prototype.olderShadowRoot;\n\n\n/**\n * @type {string}\n * @implicitCast\n */\nShadowRoot.prototype.innerHTML;\n\n\n/**\n * @type {!StyleSheetList}\n */\nShadowRoot.prototype.styleSheets;\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-content-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLContentElement() {}\n\n/**\n * @type {string}\n */\nHTMLContentElement.prototype.select;\n\n/**\n * @return {!NodeList}\n */\nHTMLContentElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-shadow-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLShadowElement() {}\n\n/**\n * @return {!NodeList}\n */\nHTMLShadowElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/html5/webappapis.html#the-errorevent-interface\n *\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {ErrorEventInit=} opt_eventInitDict\n */\nfunction ErrorEvent(type, opt_eventInitDict) {}\n\n/** @const {string} */\nErrorEvent.prototype.message;\n\n/** @const {string} */\nErrorEvent.prototype.filename;\n\n/** @const {number} */\nErrorEvent.prototype.lineno;\n\n/** @const {number} */\nErrorEvent.prototype.colno;\n\n/** @const {*} */\nErrorEvent.prototype.error;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/html5/webappapis.html#erroreventinit\n */\nfunction ErrorEventInit() {}\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.message;\n\n/** @type {undefined|string} */\nErrorEventInit.prototype.filename;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.lineno;\n\n/** @type {undefined|number} */\nErrorEventInit.prototype.colno;\n\n/** @type {*} */\nErrorEventInit.prototype.error;\n\n\n/**\n * @see http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n * @param {string=} opt_title A title to give the new HTML document\n * @return {!HTMLDocument}\n */\nDOMImplementation.prototype.createHTMLDocument = function(opt_title) {};\n\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLPictureElement() {}\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLSourceElement() {}\n\n/** @type {string} */\nHTMLSourceElement.prototype.media;\n\n/** @type {string} */\nHTMLSourceElement.prototype.sizes;\n\n/** @type {string} @implicitCast */\nHTMLSourceElement.prototype.src;\n\n/** @type {string} */\nHTMLSourceElement.prototype.srcset;\n\n/** @type {string} */\nHTMLSourceElement.prototype.type;\n\n/** @type {string} */\nHTMLImageElement.prototype.sizes;\n\n/** @type {string} */\nHTMLImageElement.prototype.srcset;\n\n\n/**\n * 4.11 Interactive elements\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html\n */\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-details-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDetailsElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-details-open\n * @type {boolean}\n */\nHTMLDetailsElement.prototype.open;\n\n\n// As of 2/20/2015, has no special web IDL interface nor global\n// constructor (i.e. HTMLSummaryElement).\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-type\n * @type {string}\n */\nHTMLMenuElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-label\n * @type {string}\n */\nHTMLMenuElement.prototype.label;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menuitem-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMenuItemElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-type\n * @type {string}\n */\nHTMLMenuItemElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-label\n * @type {string}\n */\nHTMLMenuItemElement.prototype.label;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-icon\n * @type {string}\n */\nHTMLMenuItemElement.prototype.icon;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-disabled\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.disabled;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-checked\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.checked;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-radiogroup\n * @type {string}\n */\nHTMLMenuItemElement.prototype.radiogroup;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-default\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.default;\n\n// TODO(dbeam): add HTMLMenuItemElement.prototype.command if it's implemented.\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#relatedevent\n * @param {string} type\n * @param {{relatedTarget: (EventTarget|undefined)}=} opt_eventInitDict\n * @constructor\n * @extends {Event}\n */\nfunction RelatedEvent(type, opt_eventInitDict) {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-relatedevent-relatedtarget\n * @type {EventTarget|undefined}\n */\nRelatedEvent.prototype.relatedTarget;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-dialog-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDialogElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-open\n * @type {boolean}\n */\nHTMLDialogElement.prototype.open;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-returnvalue\n * @type {string}\n */\nHTMLDialogElement.prototype.returnValue;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-show\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.show = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-showmodal\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.showModal = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-close\n * @param {string=} opt_returnValue\n * @return {undefined}\n */\nHTMLDialogElement.prototype.close = function(opt_returnValue) {};\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTemplateElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @type {!DocumentFragment}\n */\nHTMLTemplateElement.prototype.content;\n\n\n/**\n * @type {?Document}\n * @see w3c_dom2.js\n * @see http://www.w3.org/TR/html-imports/#interface-import\n */\nHTMLLinkElement.prototype.import;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/#attr-link-as\n * @see https://w3c.github.io/preload/#as-attribute\n */\nHTMLLinkElement.prototype.as;\n\n/**\n * @see https://html.spec.whatwg.org/#attr-link-crossorigin\n * @type {string}\n */\nHTMLLinkElement.prototype.crossOrigin;\n\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.checkValidity = function() {};\n\n/**\n * @type {HTMLCollection}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.elements;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.name;\n\n/**\n * @param {string} message\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n * @return {undefined}\n */\nHTMLFieldSetElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-type\n */\nHTMLFieldSetElement.prototype.type;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validationMessage;\n\n/**\n * @type {ValidityState}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.willValidate;\n\n/**\n * @constructor\n * @extends {NodeList}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nfunction RadioNodeList() {}\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nRadioNodeList.prototype.value;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDataListElement() {}\n\n\n/** @type {HTMLCollection} */\nHTMLDataListElement.prototype.options;\n\n\n/**\n * @return {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.checkValidity;\n\n/**\n * @param {string} message\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n * @return {undefined}\n */\nHTMLObjectElement.prototype.setCustomValidity;\n\n/**\n * @type {string}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validationMessage;\n\n/**\n * @type {!ValidityState}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element\n */\nHTMLObjectElement.prototype.willValidate;\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-output-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLOutputElement() {}\n\n/**\n * @const {!DOMTokenList}\n */\nHTMLOutputElement.prototype.htmlFor;\n\n/**\n * @type {HTMLFormElement}\n */\nHTMLOutputElement.prototype.form;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.name;\n\n/**\n * @const {string}\n */\nHTMLOutputElement.prototype.type;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.defaultValue;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.value;\n\n/**\n * @const {?NodeList}\n */\nHTMLOutputElement.prototype.labels;\n\n/** @type {string} */\nHTMLOutputElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLOutputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLOutputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.reportValidity = function() {};\n\n/** @param {string} message */\nHTMLOutputElement.prototype.setCustomValidity = function(message) {};\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-progress-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLProgressElement() {}\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.value;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.max;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.position;\n\n\n/** @type {?NodeList} */\nHTMLProgressElement.prototype.labels;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-track-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTrackElement() {}\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.kind;\n\n\n/** @type {string} @implicitCast */\nHTMLTrackElement.prototype.src;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.srclang;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.label;\n\n\n/** @type {boolean} */\nHTMLTrackElement.prototype.default;\n\n\n/** @const {number} */\nHTMLTrackElement.prototype.readyState;\n\n\n/** @const {!TextTrack} */\nHTMLTrackElement.prototype.track;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-meter-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMeterElement() {}\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.value;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.min;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.max;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.low;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.high;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.optimum;\n\n\n/** @type {?NodeList} */\nHTMLMeterElement.prototype.labels;\n\n\n/**\n * @interface\n * @see https://storage.spec.whatwg.org/#api\n */\nfunction NavigatorStorage() {};\n\n/**\n * @type {!StorageManager}\n */\nNavigatorStorage.prototype.storage;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://www.w3.org/TR/html5/webappapis.html#navigator\n */\nfunction Navigator() {}\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appcodename\n */\nNavigator.prototype.appCodeName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appname\n */\nNavigator.prototype.appName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appversion\n */\nNavigator.prototype.appVersion;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-platform\n */\nNavigator.prototype.platform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-product\n */\nNavigator.prototype.product;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-useragent\n */\nNavigator.prototype.userAgent;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-taintenabled\n */\nNavigator.prototype.taintEnabled = function() {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-language\n */\nNavigator.prototype.language;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/browsers.html#navigatoronline\n */\nNavigator.prototype.onLine;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-cookieenabled\n */\nNavigator.prototype.cookieEnabled;\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerProtocolHandler = function(scheme, url, title) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerContentHandler = function(mimeType, url, title) {}\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterProtocolHandler = function(scheme, url) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterContentHandler = function(mimeType, url) {}\n\n/**\n * @type {!MimeTypeArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-mimetypes\n */\nNavigator.prototype.mimeTypes;\n\n/**\n * @type {!PluginArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-plugins\n */\nNavigator.prototype.plugins;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-javaenabled\n * @nosideeffects\n */\nNavigator.prototype.javaEnabled = function() {};\n\n/**\n * @type {number}\n * @see https://developers.9oo91e.qjz9zk/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nNavigator.prototype.deviceMemory;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nNavigator.prototype.storage;\n\n/**\n * @param {!ShareData=} data\n * @return {!Promise}\n * @see https://wicg.github.io/web-share/#share-method\n */\nNavigator.prototype.share = function(data) {};\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nNavigator.prototype.hardwareConcurrency;\n\n/**\n * @constructor\n * @implements NavigatorStorage\n * @see https://html.spec.whatwg.org/multipage/workers.html#the-workernavigator-object\n */\nfunction WorkerNavigator() {}\n\n/**\n * @type {number}\n * @see https://developers.9oo91e.qjz9zk/web/updates/2017/12/device-memory\n * https://github.com/w3c/device-memory\n */\nWorkerNavigator.prototype.deviceMemory;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/NavigatorConcurrentHardware/hardwareConcurrency\n */\nWorkerNavigator.prototype.hardwareConcurrency;\n\n/**\n * @type {!StorageManager}\n * @see https://storage.spec.whatwg.org\n */\nWorkerNavigator.prototype.storage;\n\n/**\n * @record\n * @see https://wicg.github.io/web-share/#sharedata-dictionary\n */\nfunction ShareData() {}\n\n/** @type {string|undefined} */\nShareData.prototype.title;\n\n/** @type {string|undefined} */\nShareData.prototype.text;\n\n/** @type {string|undefined} */\nShareData.prototype.url;\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!Plugin>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#pluginarray\n */\nfunction PluginArray() {}\n\n/** @type {number} */\nPluginArray.prototype.length;\n\n/**\n * @param {number} index\n * @return {Plugin}\n */\nPluginArray.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Plugin}\n */\nPluginArray.prototype.namedItem = function(name) {};\n\n/**\n * @param {boolean=} reloadDocuments\n * @return {undefined}\n */\nPluginArray.prototype.refresh = function(reloadDocuments) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!MimeType>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetypearray\n */\nfunction MimeTypeArray() {}\n\n/**\n * @param {number} index\n * @return {MimeType}\n */\nMimeTypeArray.prototype.item = function(index) {};\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.navigator.mimeTypes\n */\nMimeTypeArray.prototype.length;\n\n/**\n * @param {string} name\n * @return {MimeType}\n */\nMimeTypeArray.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetype\n */\nfunction MimeType() {}\n\n/** @type {string} */\nMimeType.prototype.description;\n\n/** @type {Plugin} */\nMimeType.prototype.enabledPlugin;\n\n/** @type {string} */\nMimeType.prototype.suffixes;\n\n/** @type {string} */\nMimeType.prototype.type;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-plugin\n */\nfunction Plugin() {}\n\n/** @type {string} */\nPlugin.prototype.description;\n\n/** @type {string} */\nPlugin.prototype.filename;\n\n/** @type {number} */\nPlugin.prototype.length;\n\n/** @type {string} */\nPlugin.prototype.name;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/custom-elements.html#customelementregistry\n * @constructor\n */\nfunction CustomElementRegistry() {}\n\n/**\n * @param {string} tagName\n * @param {function(new:HTMLElement)} klass\n * @param {{extends: string}=} options\n * @return {undefined}\n */\nCustomElementRegistry.prototype.define = function (tagName, klass, options) {};\n\n/**\n * @param {string} tagName\n * @return {function(new:HTMLElement)|undefined}\n */\nCustomElementRegistry.prototype.get = function(tagName) {};\n\n/**\n * @param {string} tagName\n * @return {!Promise}\n */\nCustomElementRegistry.prototype.whenDefined = function(tagName) {};\n\n/**\n * @param {!Node} root\n * @return {undefined}\n */\nCustomElementRegistry.prototype.upgrade = function(root) {};\n\n/** @type {!CustomElementRegistry} */\nvar customElements;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSlotElement() {}\n\n/** @typedef {{flatten: boolean}} */\nvar AssignedNodesOptions;\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedNodes = function(options) {};\n\n/**\n * @param {!AssignedNodesOptions=} options\n * @return {!Array}\n */\nHTMLSlotElement.prototype.assignedElements = function(options) {};\n\n/** @type {boolean} */\nEvent.prototype.composed;\n\n/**\n * @return {!Array}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Event/composedPath\n */\nEvent.prototype.composedPath = function() {};\n\n/**\n * @constructor\n * @param {{\n * firesTouchEvents: (string|undefined),\n * pointerMovementScrolls: (string|undefined)\n * }=} opt_options\n */\nfunction InputDeviceCapabilities(opt_options){}\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.firesTouchEvents;\n\n/** @type {boolean} */\nInputDeviceCapabilities.prototype.pointerMovementScrolls;\n\n/** @type {?InputDeviceCapabilities} */\nMouseEvent.prototype.sourceCapabilities;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/VisualViewport\n * @constructor\n * @implements {EventTarget}\n */\nfunction VisualViewport() {}\n\n/** @type {number} */\nVisualViewport.prototype.offsetLeft;\n\n/** @type {number} */\nVisualViewport.prototype.offsetTop;\n\n/** @type {number} */\nVisualViewport.prototype.pageLeft;\n\n/** @type {number} */\nVisualViewport.prototype.pageTop;\n\n/** @type {number} */\nVisualViewport.prototype.width;\n\n/** @type {number} */\nVisualViewport.prototype.height;\n\n/** @type {number} */\nVisualViewport.prototype.scale;\n\n/** @override */\nVisualViewport.prototype.addEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.removeEventListener = function(type, listener,\n opt_options) {};\n\n/** @override */\nVisualViewport.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onresize;\n\n/** @type {?function(!Event)} */\nVisualViewport.prototype.onscroll;\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @constructor\n */\nfunction StorageManager() {}\n\n/** @return {!Promise} */\nStorageManager.prototype.persisted = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.persist = function() {};\n\n/** @return {!Promise} */\nStorageManager.prototype.estimate = function() {};\n\n/**\n * @see https://storage.spec.whatwg.org/\n * @typedef {{\n * usage: number,\n * quota: number\n * }}\n */\nvar StorageEstimate;\n\n/*\n * Focus Management APIs\n *\n * See https://html.spec.whatwg.org/multipage/interaction.html#focus-management-apis\n */\n\n\n/**\n * @type {?Element}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n */\nDocument.prototype.activeElement;\n\n/**\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-document-hasfocus\n * @return {boolean}\n */\nDocument.prototype.hasFocus = function() {};\n\n/**\n * @param {{preventScroll: boolean}=} options\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-focus\n */\nElement.prototype.focus = function(options) {};\n\n/**\n * @return {undefined}\n * @see https://html.spec.whatwg.org/multipage/interaction.html#dom-blur\n */\nElement.prototype.blur = function() {};\n", ++"externs/ie_vml.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE\'s vector markup language, or VML.\n *\n * @externs\n * @author robbyw@9oo91e.qjz9zk (Robby Walker)\n */\n\n\n/**\n * @type {Object|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263836(VS.85).aspx\n */\nElement.prototype.coordorigin;\n\n/**\n * @type {Object|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263837(VS.85).aspx\n */\nElement.prototype.coordsize;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263839(VS.85).aspx\n */\nElement.prototype.fillcolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263840(VS.85).aspx\n */\nElement.prototype.filled;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263871(VS.85).aspx\n */\nElement.prototype.path;\n\n/**\n * @type {number|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263877(VS.85).aspx\n */\nElement.prototype.rotation;\n\n/**\n * @type {string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263881(VS.85).aspx\n */\nElement.prototype.strokecolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263882(VS.85).aspx\n */\nElement.prototype.stroked;\n\n/**\n * @type {number|string}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/bb263883(VS.85).aspx\n */\nElement.prototype.strokeweight;\n', ++"externs/intersection_observer.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Externs for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/\n * @externs\n * @author robadurbin@9oo91e.qjz9zk (Rob Durbin)\n */\n\n// TODO(robadurbin): Once the Intersection Observer spec is adopted by W3C, add\n// a w3c_ prefix to this file\'s name.\n\n\n/**\n * These contain the information provided from a change event.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @record\n */\nfunction IntersectionObserverEntry() {}\n\n/**\n * The time the change was observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-time\n * @const {number}\n */\nIntersectionObserverEntry.prototype.time;\n\n/**\n * The root intersection rectangle, if target belongs to the same unit of\n * related similar-origin browsing contexts as the intersection root, null\n * otherwise.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-rootbounds\n * @const {{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.rootBounds;\n\n/**\n * The rectangle describing the element being observed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-boundingclientrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.boundingClientRect;\n\n/**\n * The rectangle describing the intersection between the observed element and\n * the viewport.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionrect\n * @const {!{top: number, right: number, bottom: number, left: number,\n * height: number, width: number}}\n */\nIntersectionObserverEntry.prototype.intersectionRect;\n\n/**\n * Ratio of intersectionRect area to boundingClientRect area.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-intersectionratio\n * @const {number}\n */\nIntersectionObserverEntry.prototype.intersectionRatio;\n\n/**\n * The Element whose intersection with the intersection root changed.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-target\n * @const {!Element}\n */\nIntersectionObserverEntry.prototype.target;\n\n/**\n * Whether or not the target is intersecting with the root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserverentry-isintersecting\n * @const {boolean}\n */\nIntersectionObserverEntry.prototype.isIntersecting;\n\n/**\n * Whether or not the target is visible with the root.\n * @see https://w3c.github.io/IntersectionObserver/v2/#dom-intersectionobserverentry-isvisible\n * @const {boolean|undefined}\n */\nIntersectionObserverEntry.prototype.isVisible;\n\n/**\n * Callback for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-callback\n * @typedef {function(!Array,!IntersectionObserver)}\n */\nvar IntersectionObserverCallback;\n\n/**\n * Options for the IntersectionObserver.\n * @see https://w3c.github.io/IntersectionObserver/v2/#intersection-observer-init\n * @typedef {{\n * threshold: (!Array|number|undefined),\n * delay: (number|undefined),\n * trackVisibility: (boolean|undefined),\n * root: (?Element|undefined),\n * rootMargin: (string|undefined)\n * }}\n */\nvar IntersectionObserverInit;\n\n/**\n * This is the constructor for Intersection Observer objects.\n * @see https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {!IntersectionObserverCallback} handler The callback for the observer.\n * @param {!IntersectionObserverInit=} opt_options The object defining the\n * thresholds, etc.\n * @constructor\n */\nfunction IntersectionObserver(handler, opt_options) {};\n\n/**\n * The root Element to use for intersection, or null if the observer uses the\n * implicit root.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-root\n * @const {?Element}\n */\nIntersectionObserver.prototype.root;\n\n/**\n * Offsets applied to the intersection root\u2019s bounding box, effectively growing\n * or shrinking the box that is used to calculate intersections.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-rootmargin\n * @const {string}\n */\nIntersectionObserver.prototype.rootMargin;\n\n/**\n * A list of thresholds, sorted in increasing numeric order, where each\n * threshold is a ratio of intersection area to bounding box area of an observed\n * target.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-thresholds\n * @const {!Array}\n */\nIntersectionObserver.prototype.thresholds;\n\n/**\n * This is used to set which element to observe.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-observe\n * @param {!Element} element The element to observe.\n * @return {undefined}\n */\nIntersectionObserver.prototype.observe = function(element) {};\n\n/**\n * This is used to stop observing a given element.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-unobserve\n * @param {!Element} element The elmenent to stop observing.\n * @return {undefined}\n */\nIntersectionObserver.prototype.unobserve = function(element) {};\n\n/**\n * Disconnect.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-disconnect\n */\nIntersectionObserver.prototype.disconnect = function() {};\n\n/**\n * Take records.\n * @see https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-takerecords\n * @return {!Array.}\n */\nIntersectionObserver.prototype.takeRecords = function() {};\n', ++"externs/iphone.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all iPhone extensions. Created from:\n * http://developer.apple.com/library/safari/navigation/\n *\n * @externs\n * @author agrieve@9oo91e.qjz9zk (Andrew Grieve)\n */\n\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitForce;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusX;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusY;\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nTouchEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nTouchEvent.prototype.rotation;\n\n/**\n * Initializes a newly created TouchEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {TouchList} touches\n * @param {TouchList} targetTouches\n * @param {TouchList} changedTouches\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nTouchEvent.prototype.initTouchEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, touches, targetTouches, changedTouches, scale, rotation) {};\n\n/**\n * The GestureEvent class encapsulates information about a multi-touch gesture.\n *\n * GestureEvent objects are high-level events that encapsulate the low-level\n * TouchEvent objects. Both GestureEvent and TouchEvent events are sent during\n * a multi-touch sequence. Gesture events contain scaling and rotation\n * information allowing gestures to be combined, if supported by the platform.\n * If not supported, one gesture ends before another starts. Listen for\n * GestureEvent events if you want to respond to gestures only, not process\n * the low-level TouchEvent objects.\n *\n * @see http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/GestureEventClassReference/GestureEvent/GestureEvent.html\n * @extends {UIEvent}\n * @constructor\n */\nfunction GestureEvent() {}\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nGestureEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nGestureEvent.prototype.rotation;\n\n/**\n * The target of this gesture.\n * @type {EventTarget}\n */\nGestureEvent.prototype.target;\n\n/**\n * Initializes a newly created GestureEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {EventTarget} target\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nGestureEvent.prototype.initGestureEvent = function(type, canBubble, cancelable,\n view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n metaKey, target, scale, rotation) {};\n\n\n/**\n * Specifies the JavaScript method to invoke when a gesture is started by\n * two or more fingers touching the surface.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturestart;\n\n/**\n * Specifies the JavaScript method to invoke when fingers are moved during a\n * gesture.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturechange;\n\n/**\n * Specifies the JavaScript method to invoke when a gesture ends (when there are\n * 0 or 1 fingers touching the surface).\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongestureend;\n\n/**\n * Specifies the JavaScript method to invoke when the browser device\'s\n * orientation changes, i.e.the device is rotated.\n * @type {?function(!Event)}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.onorientationchange;\n\n/**\n * Returns the orientation of the browser\'s device, one of [-90, 0, 90, 180].\n * @type {number}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.orientation;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocapitalize;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocapitalize;\n', ++"externs/mediakeys.js":'/*\n * Copyright 2015 The Closure Compiler authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview MediaKey externs.\n * Based on {@link http://goo.gl.qjz9zk/blgtZZ EME draft 12 March 2015}.\n * @externs\n */\n\n\n/**\n * @typedef {{contentType: string, robustness: string}}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemmediacapability-dictionary\n */\nvar MediaKeySystemMediaCapability;\n\n\n/** @typedef {{\n * label: (string|undefined),\n * initDataTypes: (!Array|undefined),\n * audioCapabilities: (!Array|undefined),\n * videoCapabilities: (!Array|undefined),\n * distinctiveIdentifier: (string|undefined),\n * persistentState: (string|undefined),\n * sessionTypes: (!Array|undefined)\n * }}\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionary\n */\nvar MediaKeySystemConfiguration;\n\n\n/**\n * @param {string} keySystem\n * @param {!Array} supportedConfigurations\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#navigator-extension-requestmediakeysystemaccess\n */\nNavigator.prototype.requestMediaKeySystemAccess =\n function(keySystem, supportedConfigurations) {};\n\n\n/** @const {MediaKeys} */\nHTMLMediaElement.prototype.mediaKeys;\n\n\n/**\n * @param {MediaKeys} mediaKeys\n * @return {!Promise}\n * @see https://w3c.github.io/encrypted-media/#widl-HTMLMediaElement-setMediaKeys-Promise-void--MediaKeys-mediaKeys\n */\nHTMLMediaElement.prototype.setMediaKeys = function(mediaKeys) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeysystemaccess-interface\n */\nfunction MediaKeySystemAccess() {}\n\n\n/** @return {!Promise} */\nMediaKeySystemAccess.prototype.createMediaKeys = function() {};\n\n\n/** @return {!MediaKeySystemConfiguration} */\nMediaKeySystemAccess.prototype.getConfiguration = function() {};\n\n\n/** @const {string} */\nMediaKeySystemAccess.prototype.keySystem;\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeys-interface\n */\nfunction MediaKeys() {}\n\n\n/**\n * @param {string=} opt_sessionType defaults to "temporary"\n * @return {!MediaKeySession}\n * @throws {TypeError} if opt_sessionType is invalid.\n */\nMediaKeys.prototype.createSession = function(opt_sessionType) {};\n\n\n/**\n * @param {!BufferSource} serverCertificate\n * @return {!Promise}\n */\nMediaKeys.prototype.setServerCertificate = function(serverCertificate) {};\n\n\n\n/**\n * @interface\n * @see https://w3c.github.io/encrypted-media/#mediakeystatusmap-interface\n */\nfunction MediaKeyStatusMap() {}\n\n\n/** @const {number} */\nMediaKeyStatusMap.prototype.size;\n\n\n/**\n * Array entry 0 is the key, 1 is the value.\n * @return {!Iterator>}\n */\nMediaKeyStatusMap.prototype.entries = function() {};\n\n\n/**\n * The function is called with each value.\n * @param {function(string, !BufferSource)} callback A callback function to run for\n * each media key. The first parameter is the key status; the second\n * parameter is the key ID.\n * @return {undefined}\n */\nMediaKeyStatusMap.prototype.forEach = function(callback) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {string|undefined}\n */\nMediaKeyStatusMap.prototype.get = function(keyId) {};\n\n\n/**\n * @param {!BufferSource} keyId\n * @return {boolean}\n */\nMediaKeyStatusMap.prototype.has = function(keyId) {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.keys = function() {};\n\n\n/**\n * @return {!Iterator}\n */\nMediaKeyStatusMap.prototype.values = function() {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/encrypted-media/#mediakeysession-interface\n */\nfunction MediaKeySession() {}\n\n\n/** @const {string} */\nMediaKeySession.prototype.sessionId;\n\n\n/** @const {number} */\nMediaKeySession.prototype.expiration;\n\n\n/** @const {!Promise} */\nMediaKeySession.prototype.closed;\n\n\n/** @const {!MediaKeyStatusMap} */\nMediaKeySession.prototype.keyStatuses;\n\n\n/**\n * @param {string} initDataType\n * @param {!BufferSource} initData\n * @return {!Promise}\n */\nMediaKeySession.prototype.generateRequest = function(initDataType, initData) {};\n\n\n/**\n * @param {string} sessionId\n * @return {!Promise}}\n */\nMediaKeySession.prototype.load = function(sessionId) {};\n\n\n/**\n * @param {!BufferSource} response\n * @return {!Promise}\n */\nMediaKeySession.prototype.update = function(response) {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.close = function() {};\n\n\n/** @return {!Promise} */\nMediaKeySession.prototype.remove = function() {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n */\nMediaKeySession.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n\n/**\n * @override\n * @return {boolean}\n */\nMediaKeySession.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaKeyMessageEventInit() {};\n\n/** @type {string} */\nMediaKeyMessageEventInit.prototype.messageType;\n\n/** @type {!ArrayBuffer} */\nMediaKeyMessageEventInit.prototype.message;\n\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaKeyMessageEventInit} eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediakeymessageevent\n */\nfunction MediaKeyMessageEvent(type, eventInitDict) {}\n\n\n/** @const {string} */\nMediaKeyMessageEvent.prototype.messageType;\n\n\n/** @const {!ArrayBuffer} */\nMediaKeyMessageEvent.prototype.message;\n\n\n/** @const {!MediaKeySession} */\nMediaKeyMessageEvent.prototype.target;\n\n/**\n * @record\n * @extends {EventInit}\n */\nfunction MediaEncryptedEventInit() {};\n\n/** @type {(string | undefined)} */\nMediaEncryptedEventInit.prototype.initDataType;\n\n/** @type {(ArrayBuffer | undefined)} */\nMediaEncryptedEventInit.prototype.initData;\n\n/**\n * @constructor\n * @param {string} type\n * @param {MediaEncryptedEventInit=} opt_eventInitDict\n * @extends {Event}\n * @see https://w3c.github.io/encrypted-media/#mediaencryptedevent\n */\nfunction MediaEncryptedEvent(type, opt_eventInitDict) {}\n\n\n/** @const {string} */\nMediaEncryptedEvent.prototype.initDataType;\n\n\n/** @const {ArrayBuffer} */\nMediaEncryptedEvent.prototype.initData;\n\n\n/** @const {!HTMLMediaElement} */\nMediaEncryptedEvent.prototype.target;\n\n', ++"externs/mediasource.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for the Media Source Extensions. Note that the\n * properties available here are the union of several versions of the spec.\n * @see http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html\n *\n * @externs\n * @author mattward@9oo91e.qjz9zk (Matt Ward)\n */\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction MediaSource() {}\n\n/** @override */\nMediaSource.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nMediaSource.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nMediaSource.prototype.dispatchEvent = function(evt) {};\n\n/** @type {Array} */\nMediaSource.prototype.sourceBuffers;\n\n/** @type {Array} */\nMediaSource.prototype.activeSourceBuffers;\n\n/** @type {number} */\nMediaSource.prototype.duration;\n\n/**\n * @param {string} type\n * @return {SourceBuffer}\n */\nMediaSource.prototype.addSourceBuffer = function(type) {};\n\n/**\n * @param {SourceBuffer} sourceBuffer\n * @return {undefined}\n */\nMediaSource.prototype.removeSourceBuffer = function(sourceBuffer) {};\n\n/**\n * Updates the live seekable range.\n * @param {number} start\n * @param {number} end\n */\nMediaSource.prototype.setLiveSeekableRange = function(start, end) {};\n\n/**\n * Clears the live seekable range.\n * @return {void}\n */\nMediaSource.prototype.clearLiveSeekableRange = function() {};\n\n/** @type {string} */\nMediaSource.prototype.readyState;\n\n/**\n * @param {string=} opt_error\n * @return {undefined}\n */\nMediaSource.prototype.endOfStream = function(opt_error) {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaSource.isTypeSupported = function(type) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SourceBuffer() {}\n\n/** @override */\nSourceBuffer.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSourceBuffer.prototype.dispatchEvent = function(evt) {};\n\n/** @type {string} */\nSourceBuffer.prototype.appendMode;\n\n/** @type {boolean} */\nSourceBuffer.prototype.updating;\n\n/** @type {TimeRanges} */\nSourceBuffer.prototype.buffered;\n\n/** @type {number} */\nSourceBuffer.prototype.timestampOffset;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowStart;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowEnd;\n\n/**\n * @param {Uint8Array} data\n * @return {undefined}\n */\nSourceBuffer.prototype.append = function(data) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView} data\n * @return {undefined}\n */\nSourceBuffer.prototype.appendBuffer = function(data) {};\n\n/**\n * Abort the current segment append sequence.\n * @return {undefined}\n */\nSourceBuffer.prototype.abort = function() {};\n\n/**\n * @param {number} start\n * @param {number} end\n * @return {undefined}\n */\nSourceBuffer.prototype.remove = function(start, end) {};\n\n/**\n * @param {string} type\n * @return {undefined}\n */\nSourceBuffer.prototype.changeType = function(type) {};\n', + "externs/page_visibility.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for Page Visibility.\n *\n * @see http://www.w3.org/TR/page-visibility\n * @externs\n */\n\n/**\n * Set of possible values: 'hidden', 'visible', 'prerender', 'unloaded'.\n * @typedef {string}\n * @see http://www.w3.org/TR/page-visibility/#VisibilityState\n */\nvar VisibilityState;\n", +-"externs/url.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for URL and URLSearchParams from the spec at\n * https://url.spec.whatwg.org.\n *\n * @externs\n * @author rdcronin@google.com (Devlin Cronin)\n */\n\n/**\n * @typedef {Array}\n */\nvar URLSearchParamsTupleType;\n\n/**\n * Represents the query string of a URL.\n *\n * * When `init` is a string, it is basically parsed as a query string\n * `'name1=value1&name2=value2'`.\n *\n * * When `init` is an array of arrays of string\n * `([['name1', 'value1'], ['name2', 'value2']])`,\n * it must contain pairs of strings, where the first item in the pair will be\n * interpreted as a key and the second as a value.\n *\n * NOTE: The specification uses Iterable rather than Array, but this is not\n * supported in Edge 17 - 18.\n *\n * * When `init` is an object, keys and values will be interpreted as such\n * `({name1: 'value1', name2: 'value2'}).\n *\n * @see https://url.spec.whatwg.org/#interface-urlsearchparams\n * @constructor\n * @implements {Iterable>}\n * @param {(string|!Array|!Object)=}\n * init\n */\nfunction URLSearchParams(init) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nURLSearchParams.prototype.delete = function(name) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/entries\n */\nURLSearchParams.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nURLSearchParams.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nURLSearchParams.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nURLSearchParams.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.set = function(name, value) {};\n\n/**\n * @return {undefined}\n */\nURLSearchParams.prototype.sort = function() {};\n\n/**\n * @see https://url.spec.whatwg.org\n * @constructor\n * @param {string} url\n * @param {(string|!URL)=} base\n */\nfunction URL(url, base) {}\n\n/** @type {string} */\nURL.prototype.href;\n\n/**\n * @const {string}\n */\nURL.prototype.origin;\n\n/** @type {string} */\nURL.prototype.protocol;\n\n/** @type {string} */\nURL.prototype.username;\n\n/** @type {string} */\nURL.prototype.password;\n\n/** @type {string} */\nURL.prototype.host;\n\n/** @type {string} */\nURL.prototype.hostname;\n\n/** @type {string} */\nURL.prototype.port;\n\n/** @type {string} */\nURL.prototype.pathname;\n\n/** @type {string} */\nURL.prototype.search;\n\n/**\n * @const {!URLSearchParams}\n */\nURL.prototype.searchParams;\n\n/** @type {string} */\nURL.prototype.hash;\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToASCII = function(domain) {};\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToUnicode = function(domain) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!File|!Blob|!MediaSource|!MediaStream} obj\n * @return {string}\n */\nURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nURL.revokeObjectURL = function(url) {};\n", ++"externs/url.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for URL and URLSearchParams from the spec at\n * https://url.spec.whatwg.org.\n *\n * @externs\n * @author rdcronin@9oo91e.qjz9zk (Devlin Cronin)\n */\n\n/**\n * @typedef {Array}\n */\nvar URLSearchParamsTupleType;\n\n/**\n * Represents the query string of a URL.\n *\n * * When `init` is a string, it is basically parsed as a query string\n * `'name1=value1&name2=value2'`.\n *\n * * When `init` is an array of arrays of string\n * `([['name1', 'value1'], ['name2', 'value2']])`,\n * it must contain pairs of strings, where the first item in the pair will be\n * interpreted as a key and the second as a value.\n *\n * NOTE: The specification uses Iterable rather than Array, but this is not\n * supported in Edge 17 - 18.\n *\n * * When `init` is an object, keys and values will be interpreted as such\n * `({name1: 'value1', name2: 'value2'}).\n *\n * @see https://url.spec.whatwg.org/#interface-urlsearchparams\n * @constructor\n * @implements {Iterable>}\n * @param {(string|!Array|!Object)=}\n * init\n */\nfunction URLSearchParams(init) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nURLSearchParams.prototype.delete = function(name) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/URLSearchParams/entries\n */\nURLSearchParams.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nURLSearchParams.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nURLSearchParams.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nURLSearchParams.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.set = function(name, value) {};\n\n/**\n * @return {undefined}\n */\nURLSearchParams.prototype.sort = function() {};\n\n/**\n * @see https://url.spec.whatwg.org\n * @constructor\n * @param {string} url\n * @param {(string|!URL)=} base\n */\nfunction URL(url, base) {}\n\n/** @type {string} */\nURL.prototype.href;\n\n/**\n * @const {string}\n */\nURL.prototype.origin;\n\n/** @type {string} */\nURL.prototype.protocol;\n\n/** @type {string} */\nURL.prototype.username;\n\n/** @type {string} */\nURL.prototype.password;\n\n/** @type {string} */\nURL.prototype.host;\n\n/** @type {string} */\nURL.prototype.hostname;\n\n/** @type {string} */\nURL.prototype.port;\n\n/** @type {string} */\nURL.prototype.pathname;\n\n/** @type {string} */\nURL.prototype.search;\n\n/**\n * @const {!URLSearchParams}\n */\nURL.prototype.searchParams;\n\n/** @type {string} */\nURL.prototype.hash;\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToASCII = function(domain) {};\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToUnicode = function(domain) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!File|!Blob|!MediaSource|!MediaStream} obj\n * @return {string}\n */\nURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nURL.revokeObjectURL = function(url) {};\n", + "externs/v8.js":'/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview This file describes the externs API for V8-specific objects.\n * @externs\n */\n\n\n\n/**\n * Stack frame elements in V8.\n * @constructor\n */\nfunction CallSite() {}\n\n\n/**\n * Returns the value of this.\n * @return {Object|undefined}\n */\nCallSite.prototype.getThis = function() {};\n\n\n/**\n * Returns the type of this as a string. This is the name of the function stored\n * in the constructor field of this, if available, otherwise the object\'s\n * [[Class]] internal property.\n * @return {string|undefined}\n */\nCallSite.prototype.getTypeName = function() {};\n\n\n/**\n * Returns the current function.\n * @return {!Function|undefined}\n */\nCallSite.prototype.getFunction = function() {};\n\n\n/**\n * Returns the name of the current function, typically its name property. If a\n * name property is not available an attempt will be made to try to infer a name\n * from the function\'s context.\n * @return {string|undefined}\n */\nCallSite.prototype.getFunctionName = function() {};\n\n\n/**\n * Returns the name of the property of this or one of its prototypes that holds\n * the current function.\n * @return {string|undefined}\n */\nCallSite.prototype.getMethodName = function() {};\n\n\n/**\n * If this function was defined in a script returns the name of the script\n * @return {string|undefined}\n */\nCallSite.prototype.getFileName = function() {};\n\n\n/**\n * If this function was defined in a script returns the current line number.\n * @return {number|undefined}\n */\nCallSite.prototype.getLineNumber = function() {};\n\n\n/**\n * If this function was defined in a script returns the current column number.\n * @return {number|undefined}\n */\nCallSite.prototype.getColumnNumber = function() {};\n\n\n/**\n * If this function was created using a call to eval, returns a CallSite object\n * representing the location where eval was called\n * @return {CallSite|undefined}\n */\nCallSite.prototype.getEvalOrigin = function() {};\n\n\n/**\n * Is this a toplevel invocation, that is, is this the global object?\n * @return {boolean}\n */\nCallSite.prototype.isToplevel = function() {};\n\n\n/**\n * Does this call take place in code defined by a call to eval?\n * @return {boolean}\n */\nCallSite.prototype.isEval = function() {};\n\n\n/**\n * Is this call in native V8 code?\n * @return {boolean}\n */\nCallSite.prototype.isNative = function() {};\n\n\n/**\n * Is this a constructor call?\n * @return {boolean}\n */\nCallSite.prototype.isConstructor = function() {};\n', +-"externs/webstorage.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s WebStorage specification.\n * This file depends on html5.js.\n * @externs\n * @author jeffbailey@google.com (Jeff Bailey)\n */\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-interface\n */\nfunction Storage() {}\n\n/**\n * @const {number}\n */\nStorage.prototype.length;\n\n/**\n * @param {number} index\n * @return {?string}\n */\nStorage.prototype.key = function(index) {};\n\n/**\n * @param {string} key\n * @return {?string}\n */\nStorage.prototype.getItem = function(key) {};\n\n/**\n * @param {string} key\n * @param {string} data\n * @return {void}\n */\nStorage.prototype.setItem = function(key, data) {};\n\n/**\n * @param {string} key\n * @return {void}\n */\nStorage.prototype.removeItem = function(key) {};\n\n/**\n * @return {void}\n */\nStorage.prototype.clear = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-sessionstorage-attribute\n */\nfunction WindowSessionStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowSessionStorage.prototype.sessionStorage;\n\n/**\n * Window implements WindowSessionStorage\n *\n * @type {Storage}\n */\nWindow.prototype.sessionStorage;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-localstorage-attribute\n */\nfunction WindowLocalStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowLocalStorage.prototype.localStorage;\n\n/**\n * Window implements WindowLocalStorage\n *\n * @type {Storage}\n */\nWindow.prototype.localStorage;\n\n/**\n * This is the storage event interface.\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-event\n * @extends {Event}\n * @constructor\n */\nfunction StorageEvent() {}\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.key;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.oldValue;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.newValue;\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.url;\n\n/**\n * @type {?Storage}\n */\nStorageEvent.prototype.storageArea;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} keyArg\n * @param {?string} oldValueArg\n * @param {?string} newValueArg\n * @param {string} urlArg\n * @param {?Storage} storageAreaArg\n * @return {void}\n */\nStorageEvent.prototype.initStorageEvent = function(typeArg, canBubbleArg,\n cancelableArg, keyArg,\n oldValueArg, newValueArg,\n urlArg, storageAreaArg) {};\n\n', ++"externs/webstorage.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s WebStorage specification.\n * This file depends on html5.js.\n * @externs\n * @author jeffbailey@9oo91e.qjz9zk (Jeff Bailey)\n */\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-interface\n */\nfunction Storage() {}\n\n/**\n * @const {number}\n */\nStorage.prototype.length;\n\n/**\n * @param {number} index\n * @return {?string}\n */\nStorage.prototype.key = function(index) {};\n\n/**\n * @param {string} key\n * @return {?string}\n */\nStorage.prototype.getItem = function(key) {};\n\n/**\n * @param {string} key\n * @param {string} data\n * @return {void}\n */\nStorage.prototype.setItem = function(key, data) {};\n\n/**\n * @param {string} key\n * @return {void}\n */\nStorage.prototype.removeItem = function(key) {};\n\n/**\n * @return {void}\n */\nStorage.prototype.clear = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-sessionstorage-attribute\n */\nfunction WindowSessionStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowSessionStorage.prototype.sessionStorage;\n\n/**\n * Window implements WindowSessionStorage\n *\n * @type {Storage}\n */\nWindow.prototype.sessionStorage;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-localstorage-attribute\n */\nfunction WindowLocalStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowLocalStorage.prototype.localStorage;\n\n/**\n * Window implements WindowLocalStorage\n *\n * @type {Storage}\n */\nWindow.prototype.localStorage;\n\n/**\n * This is the storage event interface.\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-event\n * @extends {Event}\n * @constructor\n */\nfunction StorageEvent() {}\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.key;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.oldValue;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.newValue;\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.url;\n\n/**\n * @type {?Storage}\n */\nStorageEvent.prototype.storageArea;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} keyArg\n * @param {?string} oldValueArg\n * @param {?string} newValueArg\n * @param {string} urlArg\n * @param {?Storage} storageAreaArg\n * @return {void}\n */\nStorageEvent.prototype.initStorageEvent = function(typeArg, canBubbleArg,\n cancelableArg, keyArg,\n oldValueArg, newValueArg,\n urlArg, storageAreaArg) {};\n\n', + "externs/whatwg_encoding.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WHATWG\'s Encoding specification\n * https://encoding.spec.whatwg.org\n * @externs\n */\n\n/**\n * @constructor\n * @param {string=} encoding\n * @param {Object=} options\n */\nfunction TextDecoder(encoding, options) {}\n\n/** @type {string} **/ TextDecoder.prototype.encoding;\n/** @type {boolean} **/ TextDecoder.prototype.fatal;\n/** @type {boolean} **/ TextDecoder.prototype.ignoreBOM;\n\n/**\n * @param {!BufferSource=} input\n * @param {?Object=} options\n * @return {string}\n * @see https://encoding.spec.whatwg.org/#textdecoder\n */\nTextDecoder.prototype.decode = function decode(input, options) {};\n\n/**\n * @constructor\n * @param {string=} utfLabel\n */\nfunction TextEncoder(utfLabel) {}\n\n/** @type {string} **/ TextEncoder.prototype.encoding;\n\n/**\n * @param {string=} input\n * @return {!Uint8Array}\n */\nTextEncoder.prototype.encode = function(input) {};\n', + "externs/w3c_abort.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for AbortController\n * @see https://dom.spec.whatwg.org/#aborting-ongoing-activities\n * @externs\n */\n\n\n\n/**\n * @record\n * @extends {EventTarget}\n * @see https://dom.spec.whatwg.org/#interface-AbortSignal\n */\nfunction AbortSignal() {}\n\n/** @type {boolean} */\nAbortSignal.prototype.aborted;\n\n/** @type {?function(!Event)} */\nAbortSignal.prototype.onabort;\n\n\n\n/**\n * @constructor\n * @see https://dom.spec.whatwg.org/#interface-abortcontroller\n */\nfunction AbortController() {}\n\n/** @const {!AbortSignal} */\nAbortController.prototype.signal;\n\n/** @return {void} */\nAbortController.prototype.abort = function() {};\n', +-"externs/w3c_anim_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for timing control for script base animations. The\n * whole file has been fully type annotated.\n *\n * @see http://www.w3.org/TR/animation-timing/\n * @see http://webstuff.nfshost.com/anim-timing/Overview.html\n * @externs\n * @author bcornell@google.com (Brian Cornell)\n */\n\n/**\n * @typedef {function(number): undefined}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#framerequestcallback\n */\nvar FrameRequestCallback;\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element In early versions of this API, the callback\n * was invoked only if the element was visible.\n * @return {number}\n */\nfunction requestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelAnimationFrame(handle) {};\n', ++"externs/w3c_anim_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for timing control for script base animations. The\n * whole file has been fully type annotated.\n *\n * @see http://www.w3.org/TR/animation-timing/\n * @see http://webstuff.nfshost.com/anim-timing/Overview.html\n * @externs\n * @author bcornell@9oo91e.qjz9zk (Brian Cornell)\n */\n\n/**\n * @typedef {function(number): undefined}\n * @see https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#framerequestcallback\n */\nvar FrameRequestCallback;\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element In early versions of this API, the callback\n * was invoked only if the element was visible.\n * @return {number}\n */\nfunction requestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelAnimationFrame(handle) {};\n', + "externs/nonstandard_anim_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Nonstandard definitions for timing control for script base animations.\n *\n * @externs\n */\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction webkitRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction webkitCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction webkitCancelAnimationFrame(handle) {};\n\n/**\n * @param {?FrameRequestCallback} callback It\'s legitimate to pass a null\n * callback and listen on the MozBeforePaint event instead.\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction mozRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction mozCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction mozCancelAnimationFrame(handle) {};\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction msRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction msCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction msCancelAnimationFrame(handle) {};\n\n/**\n * @param {!FrameRequestCallback} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction oRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction oCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction oCancelAnimationFrame(handle) {};\n', + "externs/w3c_audio.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the API related to audio.\n * Definitions for the Web Audio API.\n * This file is based on the W3C Working Draft 08 December 2015.\n * @see http://www.w3.org/TR/webaudio/\n *\n * @externs\n */\n\n/**\n * @implements {EventTarget}\n * @constructor\n */\nfunction BaseAudioContext() {}\n\n/** @type {!AudioDestinationNode} */\nBaseAudioContext.prototype.destination;\n\n/** @type {number} */\nBaseAudioContext.prototype.sampleRate;\n\n/** @type {number} */\nBaseAudioContext.prototype.currentTime;\n\n/** @type {!AudioListener} */\nBaseAudioContext.prototype.listener;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#BaseAudioContext for valid values\n */\nBaseAudioContext.prototype.state;\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @return {!AudioBuffer}\n */\nBaseAudioContext.prototype.createBuffer =\n function(numberOfChannels, length, sampleRate) {};\n\n/**\n * @param {!ArrayBuffer} audioData\n * @param {function(!AudioBuffer)=} successCallback\n * @param {function(?)=} errorCallback\n * @return {!Promise}\n */\nBaseAudioContext.prototype.decodeAudioData =\n function(audioData, successCallback, errorCallback) {};\n\n/**\n * @return {!AudioBufferSourceNode}\n */\nBaseAudioContext.prototype.createBufferSource = function() {};\n\n/**\n * @deprecated Use createAudioWorker instead\n * @param {number=} bufferSize\n * @param {number=} numberOfInputChannels_opt\n * @param {number=} numberOfOutputChannels_opt\n * @return {!ScriptProcessorNode}\n */\nBaseAudioContext.prototype.createScriptProcessor = function(bufferSize,\n numberOfInputChannels_opt, numberOfOutputChannels_opt) {};\n\n/**\n * @return {!AnalyserNode}\n */\nBaseAudioContext.prototype.createAnalyser = function() {};\n\n/**\n * @return {!GainNode}\n */\nBaseAudioContext.prototype.createGain = function() {};\n\n/**\n * @param {number=} maxDelayTime\n * @return {!DelayNode}\n */\nBaseAudioContext.prototype.createDelay = function(maxDelayTime) {};\n\n/**\n * @return {!BiquadFilterNode}\n */\nBaseAudioContext.prototype.createBiquadFilter = function() {};\n\n/**\n * @return {!WaveShaperNode}\n */\nBaseAudioContext.prototype.createWaveShaper = function() {};\n\n/**\n * @deprecated Use BaseAudioContext#createSpatialPanner or BaseAudioContext#createStereoPanner\n * @return {!PannerNode}\n */\nBaseAudioContext.prototype.createPanner = function() {};\n\n/**\n * @return {!StereoPannerNode}\n */\nBaseAudioContext.prototype.createStereoPanner = function() {};\n\n/**\n * @return {!ConvolverNode}\n */\nBaseAudioContext.prototype.createConvolver = function() {};\n\n/**\n * @param {number=} numberOfOutputs\n * @return {!ChannelSplitterNode}\n */\nBaseAudioContext.prototype.createChannelSplitter = function(numberOfOutputs) {};\n\n/**\n * @param {number=} numberOfInputs\n * @return {!ChannelMergerNode}\n */\nBaseAudioContext.prototype.createChannelMerger = function(numberOfInputs) {};\n\n/**\n * @return {!DynamicsCompressorNode}\n */\nBaseAudioContext.prototype.createDynamicsCompressor = function() {};\n\n/**\n * @return {!OscillatorNode}\n */\nBaseAudioContext.prototype.createOscillator = function() {};\n\n/**\n * @param {!Float32Array} real\n * @param {!Float32Array} imag\n * @return {!PeriodicWave}\n */\nBaseAudioContext.prototype.createPeriodicWave = function(real, imag) {};\n\n/**\n * @return {!Promise}\n */\nBaseAudioContext.prototype.resume = function() {};\n\n/**\n * @return {!Promise}\n */\nBaseAudioContext.prototype.suspend = function() {};\n\n/**\n * @return {!Promise}\n */\nBaseAudioContext.prototype.close = function() {};\n\n/** @type {?function(!Event)} */\nBaseAudioContext.prototype.onstatechange;\n\n/**\n * @param {string} scriptURL\n * @return {!Promise}\n */\nBaseAudioContext.prototype.createAudioWorker = function(scriptURL) {};\n\n/**\n * @param {!IArrayLike} feedforward\n * @param {!IArrayLike} feedback\n * @return {!IIRFilterNode}\n */\nBaseAudioContext.prototype.createIIRFilter = function(feedforward, feedback) {};\n\n/**\n * @return {!SpatialPannerNode}\n */\nBaseAudioContext.prototype.createSpatialPanner = function() {};\n\n/**\n * @record\n * @see https://webaudio.github.io/web-audio-api/#idl-def-AudioContextOptions\n */\nfunction AudioContextOptions() {};\n\n/** @type {(undefined|string|number)} */\nAudioContextOptions.prototype.latencyHint;\n\n/** @type {(undefined|number)} */\nAudioContextOptions.prototype.sampleRate;\n\n/**\n * Includes the non-standard contextOptions optional options parameter\n * implemented by Chrome and Firefox.\n * @param {!AudioContextOptions=} contextOptions\n * @constructor\n * @extends {BaseAudioContext}\n */\nfunction AudioContext(contextOptions) {}\n\n/**\n * @param {!HTMLMediaElement} mediaElement\n * @return {!MediaElementAudioSourceNode}\n */\nAudioContext.prototype.createMediaElementSource = function(mediaElement) {};\n\n/**\n * @return {!MediaStreamAudioDestinationNode}\n */\nAudioContext.prototype.createMediaStreamDestination = function() {};\n\n/**\n * @param {!MediaStream} mediaStream\n * @return {!MediaStreamAudioSourceNode}\n */\nAudioContext.prototype.createMediaStreamSource = function(mediaStream) {};\n\n/**\n * @deprecated Use createScriptProcessor instead.\n * @param {number} bufferSize\n * @param {number} numberOfInputs\n * @param {number} numberOfOuputs\n * @return {!ScriptProcessorNode}\n */\nAudioContext.prototype.createJavaScriptNode = function(bufferSize,\n numberOfInputs, numberOfOuputs) {};\n\n/**\n * @deprecated Use createGain instead.\n * @return {!GainNode}\n */\nAudioContext.prototype.createGainNode = function() {};\n\n/**\n * @deprecated Use createDelay instead.\n * @param {number=} maxDelayTime\n * @return {!DelayNode}\n */\nAudioContext.prototype.createDelayNode = function(maxDelayTime) {};\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {BaseAudioContext}\n */\nfunction OfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @return {!Promise}\n */\nOfflineAudioContext.prototype.startRendering = function() {};\n\n/** @type {function(!OfflineAudioCompletionEvent)} */\nOfflineAudioContext.prototype.oncomplete;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction OfflineAudioCompletionEvent() {}\n\n/** @type {AudioBuffer} */\nOfflineAudioCompletionEvent.prototype.renderedBuffer;\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/webaudio/#the-audionode-interface\n */\nfunction AudioNode() {}\n\n/**\n * @override\n */\nAudioNode.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nAudioNode.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nAudioNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {!AudioNode|!AudioParam} destination\n * @param {number=} output\n * @param {number=} input\n * @return {AudioNode|void}\n */\nAudioNode.prototype.connect = function(destination, output, input) {};\n\n/**\n * @param {!AudioNode|!AudioParam|number=} destination\n * @param {number=} output\n * @param {number=} input\n */\nAudioNode.prototype.disconnect = function(destination, output, input) {};\n\n/** @type {!AudioContext} */\nAudioNode.prototype.context;\n\n/** @type {number} */\nAudioNode.prototype.numberOfInputs;\n\n/** @type {number} */\nAudioNode.prototype.numberOfOutputs;\n\n/** @type {number} */\nAudioNode.prototype.channelCount;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-audionode-interface for valid values\n */\nAudioNode.prototype.channelCountMode;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-audionode-interface for valid values\n */\nAudioNode.prototype.channelInterpretation;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioSourceNode() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioDestinationNode() {}\n\n/**\n * @deprecated Use AudioDestinationNode#maxChannelCount\n * @type {number}\n */\nAudioDestinationNode.prototype.numberOfChannels;\n\n/** @type {number} */\nAudioDestinationNode.prototype.maxChannelCount;\n\n/**\n * @constructor\n */\nfunction AudioParam() {}\n\n/** @type {number} */\nAudioParam.prototype.value;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioParam.prototype.maxValue;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioParam.prototype.minValue;\n\n/** @type {number} */\nAudioParam.prototype.defaultValue;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioParam.prototype.units;\n\n/**\n * @param {number} value\n * @param {number} startTime\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number\n */\nAudioParam.prototype.setValueAtTime = function(value, startTime) {};\n\n/**\n * @param {number} value\n * @param {number} endTime\n * @return {!AudioParam}\n * @throws {!TypeError} if endTime is negative or not a finite number\n */\nAudioParam.prototype.linearRampToValueAtTime = function(value, endTime) {};\n\n/**\n * @param {number} value\n * @param {number} endTime\n * @return {!AudioParam}\n * @throws {!TypeError} if endTime is negative or not a finite number\n */\nAudioParam.prototype.exponentialRampToValueAtTime = function(value, endTime) {};\n\n/**\n * @param {number} target\n * @param {number} startTime\n * @param {number} timeConstant\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number, or\n * timeConstant is not strictly positive\n */\nAudioParam.prototype.setTargetAtTime = function(target, startTime,\n timeConstant) {};\n\n/**\n * @deprecated Use setTargetAtTime instead.\n * @param {number} target\n * @param {number} startTime\n * @param {number} timeConstant\n * @return {!AudioParam}\n */\nAudioParam.prototype.setTargetValueAtTime = function(target, startTime,\n timeConstant) {};\n\n/**\n * @param {!Float32Array} values\n * @param {number} startTime\n * @param {number} duration\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number\n */\nAudioParam.prototype.setValueCurveAtTime = function(values, startTime,\n duration) {};\n\n/**\n * @param {number} startTime\n * @return {!AudioParam}\n * @throws {!TypeError} if startTime is negative or not a finite number\n */\nAudioParam.prototype.cancelScheduledValues = function(startTime) {};\n\n/**\n * @constructor\n * @extends {AudioParam}\n */\nfunction AudioGain() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction GainNode() {}\n\n/** @type {!AudioParam} */\nGainNode.prototype.gain;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction DelayNode() {}\n\n/** @type {!AudioParam} */\nDelayNode.prototype.delayTime;\n\n/**\n * @constructor\n */\nfunction AudioBuffer() {}\n\n/**\n * @deprecated\n * @type {!AudioGain}\n */\nAudioBuffer.prototype.gain;\n\n/** @type {number} */\nAudioBuffer.prototype.sampleRate;\n\n/** @type {number} */\nAudioBuffer.prototype.length;\n\n/** @type {number} */\nAudioBuffer.prototype.duration;\n\n/** @type {number} */\nAudioBuffer.prototype.numberOfChannels;\n\n/**\n * @param {number} channel\n * @return {!Float32Array}\n */\nAudioBuffer.prototype.getChannelData = function(channel) {};\n\n/**\n * @param {!Float32Array} destination\n * @param {number} channelNumber\n * @param {number=} startInChannel\n */\nAudioBuffer.prototype.copyFromChannel = function(destination,\n channelNumber, startInChannel) {};\n\n/**\n * @param {!Float32Array} source\n * @param {number} channelNumber\n * @param {number=} startInChannel\n */\nAudioBuffer.prototype.copyToChannel = function(source, channelNumber,\n startInChannel) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioBufferSourceNode() {}\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.UNSCHEDULED_STATE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.SCHEDULED_STATE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.PLAYING_STATE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioBufferSourceNode.prototype.FINISHED_STATE;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioBufferSourceNode.prototype.playbackState;\n\n/** @type {AudioBuffer} */\nAudioBufferSourceNode.prototype.buffer;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioBufferSourceNode.prototype.gain;\n\n/** @type {!AudioParam} */\nAudioBufferSourceNode.prototype.playbackRate;\n\n/** @type {boolean} */\nAudioBufferSourceNode.prototype.loop;\n\n/** @type {number} */\nAudioBufferSourceNode.prototype.loopStart;\n\n/** @type {number} */\nAudioBufferSourceNode.prototype.loopEnd;\n\n/** @type {?function(!Event): void} */\nAudioBufferSourceNode.prototype.onended;\n\n/** @type {!AudioParam} */\nAudioBufferSourceNode.prototype.detune;\n\n/**\n * @param {number=} when\n * @param {number=} opt_offset\n * @param {number=} opt_duration\n * @throws {!TypeError} if any parameter is negative\n */\nAudioBufferSourceNode.prototype.start = function(when, opt_offset,\n opt_duration) {};\n\n/**\n * @param {number=} when\n * @throws {!TypeError} if when is negative\n */\nAudioBufferSourceNode.prototype.stop = function(when) {};\n\n/**\n * @deprecated Use AudioBufferSourceNode#start\n * @param {number} when\n * @return {undefined}\n */\nAudioBufferSourceNode.prototype.noteOn = function(when) {};\n\n/**\n * @param {number=} when\n * @param {number=} opt_offset\n * @param {number=} opt_duration\n * @deprecated Use AudioBufferSourceNode#start\n */\nAudioBufferSourceNode.prototype.noteGrainOn = function(when, opt_offset,\n opt_duration) {};\n\n/**\n * @param {number} when\n * @deprecated Use AudioBufferSourceNode#stop\n */\nAudioBufferSourceNode.prototype.noteOff = function(when) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction MediaElementAudioSourceNode() {}\n\n/**\n * @constructor\n */\nfunction AudioWorker() {}\n\n/** @type {?function(!Event)} */\nAudioWorker.prototype.onloaded;\n\n/** @type {?function(!Event)} */\nAudioWorker.prototype.onmessage;\n\n/** @type {!Array} */\nAudioWorker.prototype.parameters;\n\n/**\n * @param {string} name\n * @param {number} defaultValue\n * @return {!AudioParam}\n */\nAudioWorker.prototype.addParameter = function(name, defaultValue) {};\n\n/**\n * @param {number} numberOfInputs\n * @param {number} numberOfOutputs\n * @return {!AudioWorkerNode}\n */\nAudioWorker.prototype.createNode = function(numberOfInputs, numberOfOutputs) {};\n\n/**\n * @param {*} message\n * @param {!Array=} transfer\n */\nAudioWorker.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @param {string} name\n */\nAudioWorker.prototype.removeParameter = function(name) {};\n\n/**\n */\nAudioWorker.prototype.terminate = function() {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioWorkerNode() {}\n\n/** @type {?function(!Event)} */\nAudioWorkerNode.prototype.onmessage;\n\n/**\n * @param {*} message\n * @param {!Array=} transfer\n */\nAudioWorkerNode.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @constructor\n */\nfunction AudioWorkerParamDescriptor() {}\n\n/** @type {number} */\nAudioWorkerParamDescriptor.prototype.defaultValue;\n\n/** @type {string} */\nAudioWorkerParamDescriptor.prototype.name;\n\n/**\n * @constructor\n */\nfunction AudioWorkerGlobalScope() {}\n\n/** @type {?function(!Event)} */\nAudioWorkerGlobalScope.prototype.onaudioprocess;\n\n/** @type {?function(!Event)} */\nAudioWorkerGlobalScope.prototype.onnodecreate;\n\n/** @type {!Array} */\nAudioWorkerGlobalScope.prototype.parameters;\n\n/** @type {number} */\nAudioWorkerGlobalScope.prototype.sampleRate;\n\n/**\n * @param {string} name\n * @param {number} defaultValue\n * @return {!AudioParam}\n */\nAudioWorkerGlobalScope.prototype.addParameter = function(name, defaultValue) {};\n\n/**\n * @param {string} name\n */\nAudioWorkerGlobalScope.prototype.removeParameter = function(name) {};\n\n/**\n * @constructor\n */\nfunction AudioWorkerNodeProcessor() {}\n\n/** @type {?function(!Event)} */\nAudioWorkerNodeProcessor.prototype.onmessage;\n\n/**\n * @param {*} message\n * @param {!Array=} transfer\n */\nAudioWorkerNodeProcessor.prototype.postMessage = function(message, transfer) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @deprecated Use AudioWorkerNode\n */\nfunction JavaScriptAudioNode() {}\n\n/**\n * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))}\n * @deprecated Use AudioWorkerNode\n */\nJavaScriptAudioNode.prototype.onaudioprocess;\n\n/**\n * @type {number}\n * @deprecated Use AudioWorkerNode\n */\nJavaScriptAudioNode.prototype.bufferSize;\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @deprecated Use AudioWorkerNode\n */\nfunction ScriptProcessorNode() {}\n\n/**\n * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))}\n * @deprecated Use AudioWorkerNode\n */\nScriptProcessorNode.prototype.onaudioprocess;\n\n/**\n * @type {number}\n * @deprecated Use AudioWorkerNode\n */\nScriptProcessorNode.prototype.bufferSize;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction AudioWorkerNodeCreationEvent() {}\n\n/** @type {!Array} */\nAudioWorkerNodeCreationEvent.prototype.inputs;\n\n/** @type {!AudioWorkerNodeProcessor} */\nAudioWorkerNodeCreationEvent.prototype.node;\n\n/** @type {!Array} */\nAudioWorkerNodeCreationEvent.prototype.outputs;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction AudioProcessEvent() {}\n\n/** @type {!Float32Array} */\nAudioProcessEvent.prototype.inputs;\n\n/** @type {!AudioWorkerNodeProcessor} */\nAudioProcessEvent.prototype.node;\n\n/** @type {!Float32Array} */\nAudioProcessEvent.prototype.outputs;\n\n/** @type {!Object} */\nAudioProcessEvent.prototype.parameters;\n\n/** @type {number} */\nAudioProcessEvent.prototype.playbackTime;\n\n/**\n * @constructor\n * @extends {Event}\n * @deprecated Use AudioProcessEvent\n */\nfunction AudioProcessingEvent() {}\n\n/**\n * @type {!ScriptProcessorNode}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.node;\n\n/**\n * @type {number}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.playbackTime;\n\n/**\n * @type {!AudioBuffer}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.inputBuffer;\n\n/**\n * @type {!AudioBuffer}\n * @deprecated Use AudioProcessEvent\n */\nAudioProcessingEvent.prototype.outputBuffer;\n\n/**\n * @deprecated\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioPannerNode() {}\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.EQUALPOWER;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.HRTF;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.SOUNDFIELD;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.LINEAR_DISTANCE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.INVERSE_DISTANCE;\n\n/**\n * @deprecated\n * @const {number}\n */\nAudioPannerNode.prototype.EXPONENTIAL_DISTANCE;\n\n/**\n * @deprecated\n * @type {number|string}\n */\nAudioPannerNode.prototype.panningModel;\n\n/**\n * @deprecated\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @deprecated\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setOrientation = function(x, y, z) {};\n\n/**\n * @deprecated\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @deprecated\n * @type {number|string}\n */\nAudioPannerNode.prototype.distanceModel;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.refDistance;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.maxDistance;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.rolloffFactor;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.coneInnerAngle;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.coneOuterAngle;\n\n/**\n * @deprecated\n * @type {number}\n */\nAudioPannerNode.prototype.coneOuterGain;\n\n/**\n * @deprecated\n * @type {!AudioGain}\n */\nAudioPannerNode.prototype.coneGain;\n\n/**\n * @deprecated\n * @type {!AudioGain}\n */\nAudioPannerNode.prototype.distanceGain;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction PannerNode() {}\n\n/** @type {number} */\nPannerNode.prototype.coneInnerAngle;\n\n/** @type {number} */\nPannerNode.prototype.coneOuterAngle;\n\n/** @type {number} */\nPannerNode.prototype.coneOuterGain;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nPannerNode.prototype.distanceModel;\n\n/** @type {number} */\nPannerNode.prototype.maxDistance;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nPannerNode.prototype.panningModel;\n\n/** @type {number} */\nPannerNode.prototype.refDistance;\n\n/** @type {number} */\nPannerNode.prototype.rolloffFactor;\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\nPannerNode.prototype.setOrientation = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\nPannerNode.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n */\nPannerNode.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @constructor\n * @deprecated Use SpatialListener\n */\nfunction AudioListener() {}\n\n/**\n * @type {number}\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.gain;\n\n/**\n * @type {number}\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.dopplerFactor;\n\n/**\n * @type {number}\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.speedOfSound;\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} xUp\n * @param {number} yUp\n * @param {number} zUp\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.setOrientation = function(x, y, z, xUp, yUp, zUp) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @deprecated Use SpatialListener\n */\nAudioListener.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction SpatialPannerNode() {}\n\n/** @type {number} */\nSpatialPannerNode.prototype.coneInnerAngle;\n\n/** @type {number} */\nSpatialPannerNode.prototype.coneOuterAngle;\n\n/** @type {number} */\nSpatialPannerNode.prototype.coneOuterGain;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nSpatialPannerNode.prototype.distanceModel;\n\n/** @type {number} */\nSpatialPannerNode.prototype.maxDistance;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.orientationX;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.orientationY;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.orientationZ;\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-pannernode-interface for valid values\n */\nSpatialPannerNode.prototype.panningModel;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.positionX;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.positionY;\n\n/** @type {!AudioParam} */\nSpatialPannerNode.prototype.positionZ;\n\n/** @type {number} */\nSpatialPannerNode.prototype.refDistance;\n\n/** @type {number} */\nSpatialPannerNode.prototype.rolloffFactor;\n\n/**\n * @constructor\n */\nfunction SpatialListener() {}\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.forwardX;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.forwardY;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.forwardZ;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.positionX;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.positionY;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.positionZ;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.upX;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.upY;\n\n/** @type {!AudioParam} */\nSpatialListener.prototype.upZ;\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @see http://webaudio.github.io/web-audio-api/#the-stereopannernode-interface\n */\nfunction StereoPannerNode() {}\n\n/** @type {!AudioParam} */\nStereoPannerNode.prototype.pan;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ConvolverNode() {}\n\n/** @type {?AudioBuffer} */\nConvolverNode.prototype.buffer;\n\n/** @type {boolean} */\nConvolverNode.prototype.normalize;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nvar AnalyserNode = function() {};\n\n/**\n * @param {!Float32Array} array\n */\nAnalyserNode.prototype.getFloatFrequencyData = function(array) {};\n\n/**\n * @param {!Uint8Array} array\n */\nAnalyserNode.prototype.getByteFrequencyData = function(array) {};\n\n/**\n * @param {!Uint8Array} array\n */\nAnalyserNode.prototype.getByteTimeDomainData = function(array) {};\n\n/**\n * @param {!Float32Array} array\n */\nAnalyserNode.prototype.getFloatTimeDomainData = function(array) {};\n\n/** @type {number} */\nAnalyserNode.prototype.fftSize;\n\n/** @type {number} */\nAnalyserNode.prototype.frequencyBinCount;\n\n/** @type {number} */\nAnalyserNode.prototype.minDecibels;\n\n/** @type {number} */\nAnalyserNode.prototype.maxDecibels;\n\n/** @type {number} */\nAnalyserNode.prototype.smoothingTimeConstant;\n\n/**\n * @constructor\n * @extends {AnalyserNode}\n * @deprecated Use AnalyserNode\n *\n * This constructor has been added for backwards compatibility.\n */\nvar RealtimeAnalyserNode = function() {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ChannelSplitterNode() {}\n\n/**\n * @constructor\n * @extends {ChannelSplitterNode}\n * @deprecated Use ChannelSplitterNode\n *\n * This constructor has been added for backwards compatibility.\n */\nfunction AudioChannelSplitter() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ChannelMergerNode() {}\n\n/**\n * @constructor\n * @extends {ChannelMergerNode}\n * @deprecated Use ChannelMergerNode\n *\n * This constructor has been added for backwards compatibility.\n */\nfunction AudioChannelMerger() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction DynamicsCompressorNode() {}\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.threshold;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.knee;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.ratio;\n\n/** @type {number} */\nDynamicsCompressorNode.prototype.reduction;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.attack;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.release;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction BiquadFilterNode() {}\n\n/**\n * A read-able and write-able string that specifies the type of the filter.\n * See http://webaudio.github.io/web-audio-api/#the-biquadfilternode-interface\n * for valid values.\n * @type {string}\n */\nBiquadFilterNode.prototype.type;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.frequency;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.detune;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.Q;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.gain;\n/**\n * @param {Float32Array} frequencyHz\n * @param {Float32Array} magResponse\n * @param {Float32Array} phaseResponse\n * @return {undefined}\n */\nBiquadFilterNode.prototype.getFrequencyResponse = function(\n frequencyHz, magResponse, phaseResponse) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction IIRFilterNode() {}\n\n/**\n * @param {!Float32Array} frequencyHz\n * @param {!Float32Array} magResponse\n * @param {!Float32Array} phaseResponse\n * @return {undefined}\n */\nIIRFilterNode.prototype.getFrequencyResponse = function(\n frequencyHz, magResponse, phaseResponse) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction WaveShaperNode() {}\n\n/** @type {Float32Array} */\nWaveShaperNode.prototype.curve;\n\n/** @type {string} */\nWaveShaperNode.prototype.oversample;\n\n/**\n * @deprecated\n * @constructor\n */\nfunction WaveTable() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction OscillatorNode() {}\n\n/**\n * @type {string}\n * See https://www.w3.org/TR/webaudio/#the-oscillatornode-interface for valid values\n */\nOscillatorNode.prototype.type;\n\n/**\n * @deprecated\n * @type {number}\n */\nOscillatorNode.prototype.playbackState;\n\n/** @type {!AudioParam} */\nOscillatorNode.prototype.frequency;\n\n/** @type {!AudioParam} */\nOscillatorNode.prototype.detune;\n\n/**\n * @param {number=} when\n */\nOscillatorNode.prototype.start = function(when) {};\n\n/**\n * @param {number=} when\n */\nOscillatorNode.prototype.stop = function(when) {};\n\n/**\n * @deprecated\n * @param {!WaveTable} waveTable\n */\nOscillatorNode.prototype.setWaveTable = function(waveTable) {};\n\n/**\n * @param {!PeriodicWave} periodicWave\n */\nOscillatorNode.prototype.setPeriodicWave = function(periodicWave) {};\n\n/** @type {?function(!Event)} */\nOscillatorNode.prototype.onended;\n\n/**\n * @constructor\n */\nfunction PeriodicWave() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction MediaStreamAudioSourceNode() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction MediaStreamAudioDestinationNode() {}\n\n/** @type {!MediaStream} */\nMediaStreamAudioDestinationNode.prototype.stream;\n', +-"externs/nonstandard_audio.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard definitions for the API related to audio.\n *\n * @externs\n */\n\n/**\n * Definitions for the Web Audio API with webkit prefix.\n */\n\n/**\n * @constructor\n * @extends {AudioContext}\n */\nfunction webkitAudioContext() {}\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {OfflineAudioContext}\n */\nfunction webkitOfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @constructor\n * @extends {AudioPannerNode}\n */\nfunction webkitAudioPannerNode() {}\n\n/**\n * @constructor\n * @extends {PannerNode}\n */\nfunction webkitPannerNode() {}\n\n/**\n * Definitions for the Audio API as implemented in Firefox.\n * Please note that this document describes a non-standard experimental API.\n * This API is considered deprecated.\n * @see https://developer.mozilla.org/en/DOM/HTMLAudioElement\n */\n\n/**\n * @param {string=} src\n * @constructor\n * @extends {HTMLAudioElement}\n */\nfunction Audio(src) {}\n\n/**\n * @param {number} channels\n * @param {number} rate\n */\nAudio.prototype.mozSetup = function(channels, rate) {};\n\n/**\n * @param {Array|Float32Array} buffer\n */\nAudio.prototype.mozWriteAudio = function(buffer) {};\n\n/**\n * @return {number}\n */\nAudio.prototype.mozCurrentSampleOffset = function() {};\n', ++"externs/nonstandard_audio.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard definitions for the API related to audio.\n *\n * @externs\n */\n\n/**\n * Definitions for the Web Audio API with webkit prefix.\n */\n\n/**\n * @constructor\n * @extends {AudioContext}\n */\nfunction webkitAudioContext() {}\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {OfflineAudioContext}\n */\nfunction webkitOfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @constructor\n * @extends {AudioPannerNode}\n */\nfunction webkitAudioPannerNode() {}\n\n/**\n * @constructor\n * @extends {PannerNode}\n */\nfunction webkitPannerNode() {}\n\n/**\n * Definitions for the Audio API as implemented in Firefox.\n * Please note that this document describes a non-standard experimental API.\n * This API is considered deprecated.\n * @see https://developer.m0z111a.qjz9zk/en/DOM/HTMLAudioElement\n */\n\n/**\n * @param {string=} src\n * @constructor\n * @extends {HTMLAudioElement}\n */\nfunction Audio(src) {}\n\n/**\n * @param {number} channels\n * @param {number} rate\n */\nAudio.prototype.mozSetup = function(channels, rate) {};\n\n/**\n * @param {Array|Float32Array} buffer\n */\nAudio.prototype.mozWriteAudio = function(buffer) {};\n\n/**\n * @return {number}\n */\nAudio.prototype.mozCurrentSampleOffset = function() {};\n', + "externs/w3c_batterystatus.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Battery Status API.\n * The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/battery-status/\n *\n * @externs\n */\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction BatteryManager() {}\n\n\n/**\n * @type {boolean}\n */\nBatteryManager.prototype.charging;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.chargingTime;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.dischargingTime;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.level;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.onchargingchange;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.onchargingtimechange;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.ondischargingtimechange;\n\n\n/**\n * @type {?function(!Event): void}\n */\nBatteryManager.prototype.onlevelchange;\n\n/**\n * @return {!Promise}\n * @see http://www.w3.org/TR/battery-status/\n */\nNavigator.prototype.getBattery = function() {};\n', + "externs/w3c_clipboard.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the asynchronous clipboard Web API.\n * @externs\n */\n\n/**\n * @interface\n * @see https://w3c.github.io/clipboard-apis/#async-clipboard-api\n */\nfunction Clipboard() {}\n\n/**\n * @return {!Promise}\n */\nClipboard.prototype.readText = function() {};\n\n/**\n * @param {string} text\n * @return {!Promise}\n */\nClipboard.prototype.writeText = function(text) {};\n\n/** @const {!Clipboard} */\nNavigator.prototype.clipboard;\n', + "externs/w3c_composition_event.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Composition Events specification.\n * @externs\n */\n\n/**\n * The `CompositionEvent` interface provides specific contextual information\n * associated with Composition Events.\n * @see https://www.w3.org/TR/uievents/#interface-compositionevent\n * @record\n * @extends {UIEventInit}\n */\nfunction CompositionEventInit() {}\n\n/**\n * `data` holds the value of the characters generated by an input method. This\n * MAY be a single Unicode character or a non-empty sequence of Unicode\n * characters. This attribute MAY be the empty string. The un-initialized value\n * of this attribute MUST be "" (the empty string).\n * @type {string}\n */\nCompositionEventInit.prototype.data;\n\n/**\n * Composition Events provide a means for inputing text in a supplementary or\n * alternate manner than by Keyboard Events, in order to allow the use of\n * characters that might not be commonly available on keyboard. For example,\n * Composition Events might be used to add accents to characters despite their\n * absence from standard US keyboards, to build up logograms of many Asian\n * languages from their base components or categories, to select word choices\n * from a combination of key presses on a mobile device keyboard, or to convert\n * voice commands into text using a speech recognition processor.\n *\n * Conceptually, a composition session consists of one `compositionstart` event,\n * one or more `compositionupdate` events, and one `compositionend` event, with\n * the value of the data attribute persisting between each stage of this event\n * chain during each session.\n *\n * Not all IME systems or devices expose the necessary data to the DOM, so the\n * active composition string (the "Reading Window" or "candidate selection" menu\n * option) might not be available through this interface, in which case the\n * selection MAY be represented by the empty string.\n *\n * @see https://www.w3.org/TR/uievents/#events-compositionevents\n * @param {string} type\n * @param {!CompositionEventInit=} opt_eventInitDict\n * @extends {UIEvent}\n * @constructor\n */\nfunction CompositionEvent(type, opt_eventInitDict) {}\n\n/**\n * Initializes attributes of a `CompositionEvent` object. This method has the\n * same behavior as `UIEvent.initUIEvent()`. The value of `detail` remains\n * undefined.\n *\n * @see https://www.w3.org/TR/uievents/#idl-interface-CompositionEvent-initializers\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {?Window} viewArg\n * @param {string} dataArg\n * @param {string} localeArg\n * @return {undefined}\n */\nCompositionEvent.prototype.initCompositionEvent = function(\n typeArg, canBubbleArg, cancelableArg, viewArg, dataArg, localeArg) {};\n\n/**\n * @type {string}\n */\nCompositionEvent.prototype.data;\n\n/**\n * @type {string}\n */\nCompositionEvent.prototype.locale;\n', +-"externs/w3c_css3d.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s CSS 3D Transforms specification.\n * The whole file has been fully type annotated. Created from\n * https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html\n *\n * @externs\n * @author rjfioravanti@google.com (Ryan Fioravanti)\n */\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#the-cssmatrix-interface\n */\nfunction CSSMatrix(opt_matrix) {}\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m11;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m12;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m13;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m14;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m21;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m22;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m23;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m24;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m31;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m32;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m33;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m34;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m41;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m42;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m43;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m44;\n\n/**\n * @param {string} string\n * @return {void}\n */\nCSSMatrix.prototype.setMatrixValue = function(string) {};\n\n/**\n * @param {!CSSMatrix} secondMatrix\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-multiply-CSSMatrix-CSSMatrix-other\n */\nCSSMatrix.prototype.multiply = function(secondMatrix) {};\n\n/**\n * @return {CSSMatrix} Returns void if the matrix is non-invertable.\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-inverse-CSSMatrix\n */\nCSSMatrix.prototype.inverse = function() {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-translate-CSSMatrix-unrestricted-double-tx-unrestricted-double-ty-unrestricted-double-tz\n */\nCSSMatrix.prototype.translate = function(opt_x, opt_y, opt_z) {};\n\n/**\n * @param {number=} opt_scaleX Defaults to 1.\n * @param {number=} opt_scaleY Defaults to scaleX.\n * @param {number=} opt_scaleZ Defaults to 1.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-scale-CSSMatrix-unrestricted-double-scale-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.scale = function(opt_scaleX, opt_scaleY, opt_scaleZ) {};\n\n/**\n * @param {number=} opt_rotX Defaults to 0.\n * @param {number=} opt_rotY Defaults to 0.\n * @param {number=} opt_rotZ Defaults to rotX if rotY is not defined, else 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotate-CSSMatrix-unrestricted-double-angle-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.rotate = function(opt_rotX, opt_rotY, opt_rotZ) {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @param {number=} opt_angle Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotateAxisAngle-CSSMatrix-unrestricted-double-x-unrestricted-double-y-unrestricted-double-z-unrestricted-double-angle\n */\nCSSMatrix.prototype.rotateAxisAngle =\n function(opt_x, opt_y, opt_z, opt_angle) {};\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://developer.apple.com/safari/library/documentation/AudioVideo/Reference/WebKitCSSMatrixClassReference/WebKitCSSMatrix/WebKitCSSMatrix.html#//apple_ref/javascript/instm/WebKitCSSMatrix/setMatrixValue\n */\nfunction WebKitCSSMatrix(opt_matrix) {}\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh453593.aspx\n */\nfunction MSCSSMatrix(opt_matrix) {}\n', +-"externs/w3c_elementtraversal.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for DOM Element Traversal interface.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from:\n * http://www.w3.org/TR/ElementTraversal/#ecmascript-bindings\n *\n * @externs\n * @author arv@google.com (Erik Arvidsson)\n */\n\n/**\n * @typedef {?(Document|DocumentFragment|Element)}\n * @see https://dom.spec.whatwg.org/#parentnode\n */\nvar ParentNode;\n\n/**\n * @typedef {?(Element|CharacterData)}\n * @see https://dom.spec.whatwg.org/#nondocumenttypechildnode\n */\nvar NonDocumentTypeChildNode;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.firstElementChild\n */\nElement.prototype.firstElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.lastElementChild\n */\nElement.prototype.lastElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.previousElementSibling\n */\nElement.prototype.previousElementSibling;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.nextElementSibling\n */\nElement.prototype.nextElementSibling;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/Element.childElementCount\n */\nElement.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocument.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocument.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocument.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocumentFragment.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocumentFragment.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocumentFragment.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling\n */\nCharacterData.prototype.previousElementSibling;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling\n */\nCharacterData.prototype.nextElementSibling;\n', ++"externs/w3c_css3d.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s CSS 3D Transforms specification.\n * The whole file has been fully type annotated. Created from\n * https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html\n *\n * @externs\n * @author rjfioravanti@9oo91e.qjz9zk (Ryan Fioravanti)\n */\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#the-cssmatrix-interface\n */\nfunction CSSMatrix(opt_matrix) {}\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m11;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m12;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m13;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m14;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m21;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m22;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m23;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m24;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m31;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m32;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m33;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m34;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m41;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m42;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m43;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m44;\n\n/**\n * @param {string} string\n * @return {void}\n */\nCSSMatrix.prototype.setMatrixValue = function(string) {};\n\n/**\n * @param {!CSSMatrix} secondMatrix\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-multiply-CSSMatrix-CSSMatrix-other\n */\nCSSMatrix.prototype.multiply = function(secondMatrix) {};\n\n/**\n * @return {CSSMatrix} Returns void if the matrix is non-invertable.\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-inverse-CSSMatrix\n */\nCSSMatrix.prototype.inverse = function() {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-translate-CSSMatrix-unrestricted-double-tx-unrestricted-double-ty-unrestricted-double-tz\n */\nCSSMatrix.prototype.translate = function(opt_x, opt_y, opt_z) {};\n\n/**\n * @param {number=} opt_scaleX Defaults to 1.\n * @param {number=} opt_scaleY Defaults to scaleX.\n * @param {number=} opt_scaleZ Defaults to 1.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-scale-CSSMatrix-unrestricted-double-scale-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.scale = function(opt_scaleX, opt_scaleY, opt_scaleZ) {};\n\n/**\n * @param {number=} opt_rotX Defaults to 0.\n * @param {number=} opt_rotY Defaults to 0.\n * @param {number=} opt_rotZ Defaults to rotX if rotY is not defined, else 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotate-CSSMatrix-unrestricted-double-angle-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.rotate = function(opt_rotX, opt_rotY, opt_rotZ) {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @param {number=} opt_angle Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotateAxisAngle-CSSMatrix-unrestricted-double-x-unrestricted-double-y-unrestricted-double-z-unrestricted-double-angle\n */\nCSSMatrix.prototype.rotateAxisAngle =\n function(opt_x, opt_y, opt_z, opt_angle) {};\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://developer.apple.com/safari/library/documentation/AudioVideo/Reference/WebKitCSSMatrixClassReference/WebKitCSSMatrix/WebKitCSSMatrix.html#//apple_ref/javascript/instm/WebKitCSSMatrix/setMatrixValue\n */\nfunction WebKitCSSMatrix(opt_matrix) {}\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/windows/apps/hh453593.aspx\n */\nfunction MSCSSMatrix(opt_matrix) {}\n', ++"externs/w3c_elementtraversal.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for DOM Element Traversal interface.\n * This file depends on w3c_dom1.js.\n * The whole file has been fully type annotated.\n * Created from:\n * http://www.w3.org/TR/ElementTraversal/#ecmascript-bindings\n *\n * @externs\n * @author arv@9oo91e.qjz9zk (Erik Arvidsson)\n */\n\n/**\n * @typedef {?(Document|DocumentFragment|Element)}\n * @see https://dom.spec.whatwg.org/#parentnode\n */\nvar ParentNode;\n\n/**\n * @typedef {?(Element|CharacterData)}\n * @see https://dom.spec.whatwg.org/#nondocumenttypechildnode\n */\nvar NonDocumentTypeChildNode;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.firstElementChild\n */\nElement.prototype.firstElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.lastElementChild\n */\nElement.prototype.lastElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.previousElementSibling\n */\nElement.prototype.previousElementSibling;\n\n/**\n * @type {Element}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.nextElementSibling\n */\nElement.prototype.nextElementSibling;\n\n/**\n * @type {number}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Element.childElementCount\n */\nElement.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocument.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocument.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocument.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocumentFragment.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocumentFragment.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocumentFragment.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling\n */\nCharacterData.prototype.previousElementSibling;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling\n */\nCharacterData.prototype.nextElementSibling;\n', + "externs/w3c_gamepad.js":'/*\n * Copyright 2013 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Gamepad specification.\n * @see http://www.w3.org/TR/gamepad/\n * @externs\n */\n\n/**\n * @return {!Array.}\n */\nnavigator.getGamepads = function() {};\n\n/**\n * @return {!Array.}\n */\nnavigator.webkitGetGamepads = function() {};\n\n\n/**\n * @interface\n */\nvar Gamepad = function() {};\n\n/**\n * @type {string}\n */\nGamepad.prototype.id; // read-only\n\n/**\n * @type {number}\n */\nGamepad.prototype.index; // read-only\n\n/**\n * @type {boolean}\n */\nGamepad.prototype.connected; // read-only\n\n/**\n * @type {number}\n */\nGamepad.prototype.timestamp; // read-only\n\n/**\n * @type {string}\n */\nGamepad.prototype.mapping; // read-only\n\n/**\n * @type {!Array.}\n */\nGamepad.prototype.axes; // read-only\n\n/**\n * Note: The W3C spec changed, this property now returns an array of\n * GamepadButton objects.\n *\n * @type {(!Array.|!Array.)}\n */\nGamepad.prototype.buttons;\n\n\n/**\n * @interface\n */\nvar GamepadButton = function() {};\n\n/**\n * @type {boolean}\n */\nGamepadButton.prototype.pressed; // read-only\n\n/**\n * @type {number}\n */\nGamepadButton.prototype.value; // read-only\n', +-"externs/w3c_geometry1.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geometry Interfaces Module Level 1 spec.\n * The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/geometry-1/\n *\n * @externs\n * @author bobak@google.com (Andreas F. Bobak)\n */\n\n/**\n * @deprecated ClientRect has been replaced by DOMRect in the latest spec.\n * @constructor\n * @see https://www.w3.org/TR/cssom-view/#changes-from-2011-08-04\n */\nfunction ClientRect() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-top\n */\nClientRect.prototype.top;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-right\n */\nClientRect.prototype.right;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-bottom\n */\nClientRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-left\n */\nClientRect.prototype.left;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-width\n */\nClientRect.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-height\n */\nClientRect.prototype.height;\n\n/**\n * @constructor\n * @extends {ClientRect} for backwards compatibility\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-domrectreadonly\n */\nfunction DOMRectReadOnly(x, y, width, height) {}\n\n/**\n * @param {!DOMRectInit} other\n * @return {!DOMRectReadOnly}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-fromrect\n */\nDOMRectReadOnly.prototype.fromRect = function(other) {};\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-x\n */\nDOMRectReadOnly.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-y\n */\nDOMRectReadOnly.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-width\n */\nDOMRectReadOnly.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-height\n */\nDOMRectReadOnly.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRectReadOnly.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRectReadOnly.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRectReadOnly.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRectReadOnly.prototype.left;\n\n/**\n * @constructor\n * @extends {DOMRectReadOnly}\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-domrect\n */\nfunction DOMRect(x, y, width, height) {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-x\n */\nDOMRect.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-y\n */\nDOMRect.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-width\n */\nDOMRect.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-height\n */\nDOMRect.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRect.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRect.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRect.prototype.left;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/geometry-1/#dictdef-domrectinit\n */\nfunction DOMRectInit() {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-x\n */\nDOMRectInit.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-y\n */\nDOMRectInit.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-width\n */\nDOMRectInit.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-height\n */\nDOMRectInit.prototype.height;\n', +-"externs/w3c_geolocation.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geolocation specification\n * http://www.w3.org/TR/geolocation-API/\n * @externs\n * @author ngd@google.com (Neil Dunn)\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#geolocation\n */\nfunction Geolocation() {}\n\n/**\n * @typedef {function(!GeolocationPosition): void}\n */\nvar PositionCallback;\n\n/**\n * @typedef {function(!GeolocationPositionError): void}\n */\nvar PositionErrorCallback;\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {undefined}\n */\nGeolocation.prototype.getCurrentPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {number}\n */\nGeolocation.prototype.watchPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {number} watchId\n * @return {undefined}\n */\nGeolocation.prototype.clearWatch = function(watchId) {};\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#coordinates\n */\nfunction GeolocationCoordinates() {}\n/** @type {number} */\nGeolocationCoordinates.prototype.latitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.longitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.accuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitudeAccuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.heading;\n/** @type {number} */\nGeolocationCoordinates.prototype.speed;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position\n */\nfunction GeolocationPosition() {}\n/** @type {GeolocationCoordinates} */\nGeolocationPosition.prototype.coords;\n/** @type {number} */\nGeolocationPosition.prototype.timestamp;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-options\n */\nfunction GeolocationPositionOptions() {}\n/** @type {boolean|undefined} */\nGeolocationPositionOptions.prototype.enableHighAccuracy;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.maximumAge;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.timeout;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-error\n */\nfunction GeolocationPositionError() {}\n/** @type {number} */\nGeolocationPositionError.prototype.code;\n/** @type {string} */\nGeolocationPositionError.prototype.message;\n/** @const {number} */\nGeolocationPositionError.prototype.UNKNOWN_ERROR;\n/** @const {number} */\nGeolocationPositionError.prototype.PERMISSION_DENIED;\n/** @const {number} */\nGeolocationPositionError.prototype.POSITION_UNAVAILABLE;\n/** @const {number} */\nGeolocationPositionError.prototype.TIMEOUT;\n\n/** @type {Geolocation} */\nNavigator.prototype.geolocation;\n', +-"externs/w3c_indexeddb.js":"/*\n * Copyright 2011 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's IndexedDB API and IndexedDB API 2.0.\n * @see http://www.w3.org/TR/2015/REC-IndexedDB-20150108/\n * @see https://www.w3.org/TR/2017/WD-IndexedDB-2-20170313/\n *\n * @externs\n * @author guido.tapia@picnet.com.au (Guido Tapia)\n * @author vobruba.martin@gmail.com (Martin Vobruba)\n */\n\n/** @type {!IDBFactory} */\nvar indexedDB;\n\n/** @type {!IDBFactory|undefined} */\nServiceWorkerGlobalScope.prototype.indexedDB;\n\n\n\n/**\n * Possible values: 'readonly', 'readwrite', 'versionchange'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBTransactionMode\n */\nvar IDBTransactionMode;\n\n\n/**\n * Possible values: 'pending', 'done'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBRequestReadyState\n */\nvar IDBRequestReadyState;\n\n\n/**\n * Possible values: 'next', 'nextunique', 'prev', 'prevunique'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorDirection\n */\nvar IDBCursorDirection;\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBIndexParameters\n */\nfunction IDBIndexParameters(){};\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.unique;\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.multiEntry;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEventInit\n */\nfunction IDBVersionChangeEventInit(){};\n\n/** @type {(undefined|number)} */\nIDBVersionChangeEventInit.prototype.oldVersion;\n\n/** @type {(undefined|number|null)} */\nIDBVersionChangeEventInit.prototype.newVersion;\n\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters\n */\nfunction IDBObjectStoreParameters() {};\n\n/** @type {(undefined|string|!Array|null)} */\nIDBObjectStoreParameters.prototype.keyPath;\n\n/** @type {(undefined|boolean)} */\nIDBObjectStoreParameters.prototype.autoIncrement;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory\n */\nfunction IDBFactory() {}\n\n/**\n * @param {string} name The name of the database to open.\n * @param {number=} opt_version The version at which to open the database.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.open = function(name, opt_version) {};\n\n/**\n * @param {string} name The name of the database to delete.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.deleteDatabase = function(name) {};\n\n/**\n * @param {*} first\n * @param {*} second\n * @return {number}\n */\nIDBFactory.prototype.cmp = function(first, second) {};\n\n\n/**\n * @constructor\n * @template T\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest\n * @see https://www.w3.org/TR/IndexedDB-2/#request-api\n */\nfunction IDBRequest() {}\n\n/** @override */\nIDBRequest.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!IDBRequestReadyState}\n */\nIDBRequest.prototype.readyState; // readonly\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onsuccess = function(e) {};\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onerror = function(e) {};\n\n/** @type {T} */\nIDBRequest.prototype.result; // readonly\n\n/**\n * @type {number}\n * @deprecated Use \"error\"\n */\nIDBRequest.prototype.errorCode; // readonly\n\n\n/** @type {?DOMError|?DOMException} */\nIDBRequest.prototype.error; // readonly\n\n/** @type {?IDBObjectStore|?IDBIndex|?IDBCursor} */\nIDBRequest.prototype.source; // readonly\n\n/** @type {?IDBTransaction} */\nIDBRequest.prototype.transaction; // readonly\n\n\n/**\n * @constructor\n * @extends {IDBRequest}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBOpenDBRequest\n */\nfunction IDBOpenDBRequest() {}\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onblocked = function(e) {};\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onupgradeneeded = function(e) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase\n * @see https://www.w3.org/TR/IndexedDB-2/#database-interface\n */\nfunction IDBDatabase() {}\n\n/**\n * @const {string}\n */\nIDBDatabase.prototype.name;\n\n/**\n * @const {number}\n */\nIDBDatabase.prototype.version;\n\n/**\n * @const {!DOMStringList}\n */\nIDBDatabase.prototype.objectStoreNames;\n\n/**\n * @param {string} name The name of the object store.\n * @param {!IDBObjectStoreParameters=} opt_parameters Parameters to be passed\n * creating the object store.\n * @return {!IDBObjectStore} The created/open object store.\n */\nIDBDatabase.prototype.createObjectStore =\n function(name, opt_parameters) {};\n\n/**\n * @param {string} name The name of the object store to remove.\n * @return {undefined}\n */\nIDBDatabase.prototype.deleteObjectStore = function(name) {};\n\n/**\n * @param {(string|!Array|!DOMStringList)} storeNames The stores to open\n * in this transaction.\n * @param {!IDBTransactionMode=} mode The mode for opening the object stores.\n * @return {!IDBTransaction} The IDBRequest object.\n */\nIDBDatabase.prototype.transaction = function(storeNames, mode) {};\n\n/**\n * Closes the database connection.\n * @return {undefined}\n */\nIDBDatabase.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onclose;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onerror;\n\n/**\n * @type {?function(!IDBVersionChangeEvent)}\n */\nIDBDatabase.prototype.onversionchange;\n\n/** @override */\nIDBDatabase.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBDatabase.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBDatabase.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Typedef for valid key types according to the w3 specification. Note that this\n * is slightly wider than what is actually allowed, as all Array elements must\n * have a valid key type.\n * @see http://www.w3.org/TR/IndexedDB/#key-construct\n * @see https://www.w3.org/TR/IndexedDB-2/#key-construct\n * @typedef {number|string|!Date|!Array|!BufferSource}\n */\nvar IDBKeyType;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStore\n * @see https://www.w3.org/TR/IndexedDB-2/#object-store-interface\n */\nfunction IDBObjectStore() {}\n\n/**\n * @type {string}\n */\nIDBObjectStore.prototype.name;\n\n/**\n * @type {*}\n */\nIDBObjectStore.prototype.keyPath;\n\n/**\n * @type {!DOMStringList}\n */\nIDBObjectStore.prototype.indexNames;\n\n/** @type {!IDBTransaction} */\nIDBObjectStore.prototype.transaction;\n\n/** @type {boolean} */\nIDBObjectStore.prototype.autoIncrement;\n\n/**\n * @param {*} value The value to put into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.put = function(value, key) {};\n\n/**\n * @param {*} value The value to add into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.add = function(value, key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.delete = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of the document to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.get = function(key) {};\n\n/**\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.clear = function() {};\n\n/**\n * @param {?IDBKeyRange=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {string} name The name of the index.\n * @param {string|!Array} keyPath The path to the index key.\n * @param {!IDBIndexParameters=} opt_paramters Optional parameters\n * for the created index.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.createIndex = function(name, keyPath, opt_paramters) {};\n\n/**\n * @param {string} name The name of the index to retrieve.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.index = function(name) {};\n\n/**\n * @param {string} indexName The name of the index to remove.\n * @return {undefined}\n */\nIDBObjectStore.prototype.deleteIndex = function(indexName) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n * @see http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-count\n */\nIDBObjectStore.prototype.count = function(key) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getkey\n */\nIDBObjectStore.prototype.getKey = function(query) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getall\n */\nIDBObjectStore.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getallkeys\n */\nIDBObjectStore.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {!IDBCursorDirection=} direction\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-openkeycursor\n */\nIDBObjectStore.prototype.openKeyCursor = function(query, direction) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBIndex\n * @see https://www.w3.org/TR/IndexedDB-2/#index-interface\n */\nfunction IDBIndex() {}\n\n/**\n * @type {string}\n */\nIDBIndex.prototype.name;\n\n/**\n * @const {!IDBObjectStore}\n */\nIDBIndex.prototype.objectStore;\n\n/**\n * @const {*}\n */\nIDBIndex.prototype.keyPath;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.multiEntry;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.unique;\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openKeyCursor = function(range, direction) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.get = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.getKey = function(key) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getall\n */\nIDBIndex.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getallkeys\n */\nIDBIndex.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} opt_key\n * @return {!IDBRequest}\n */\nIDBIndex.prototype.count = function(opt_key) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor\n * @see https://www.w3.org/TR/IndexedDB-2/#cursor-interface\n */\nfunction IDBCursor() {}\n\n/**\n * @const {(!IDBObjectStore|!IDBIndex)}\n */\nIDBCursor.prototype.source;\n\n/**\n * @const {!IDBCursorDirection}\n */\nIDBCursor.prototype.direction;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.key;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.primaryKey;\n\n/**\n * @param {*} value The new value for the current object in the cursor.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.update = function(value) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @param {!IDBKeyType=} key Continue enumerating the cursor from the specified\n * key (or next).\n * @return {undefined}\n */\nIDBCursor.prototype.continue = function(key) {};\n\n/**\n * @param {!IDBKeyType} key\n * @param {!IDBKeyType} primaryKey\n * @return {undefined}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbcursor-continueprimarykey\n */\nIDBCursor.prototype.continuePrimaryKey = function(key, primaryKey) {};\n\n/**\n * @param {number} count Number of times to iterate the cursor.\n * @return {undefined}\n */\nIDBCursor.prototype.advance = function(count) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.delete = function() {};\n\n\n/**\n * @constructor\n * @extends {IDBCursor}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorWithValue\n */\nfunction IDBCursorWithValue() {}\n\n/** @type {*} */\nIDBCursorWithValue.prototype.value; // readonly\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction\n * @see https://www.w3.org/TR/IndexedDB-2/#transaction\n */\nfunction IDBTransaction() {}\n\n/**\n * @const {!DOMStringList}\n */\nIDBTransaction.prototype.objectStoreNames;\n\n/**\n * @const {!IDBTransactionMode}\n */\nIDBTransaction.prototype.mode;\n\n/**\n * @const {!IDBDatabase}\n */\nIDBTransaction.prototype.db;\n\n/**\n * @type {!DOMError|!DOMException}\n */\nIDBTransaction.prototype.error;\n\n/**\n * @param {string} name The name of the object store to retrieve.\n * @return {!IDBObjectStore} The object store.\n */\nIDBTransaction.prototype.objectStore = function(name) {};\n\n/**\n * Aborts the transaction.\n * @return {undefined}\n */\nIDBTransaction.prototype.abort = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.oncomplete;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onerror;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange\n * @see https://www.w3.org/TR/IndexedDB-2/#keyrange\n */\nfunction IDBKeyRange() {}\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.lower;\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.upper;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.lowerOpen;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.upperOpen;\n\n/**\n * @param {!IDBKeyType} value The single key value of this range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.only = function(value) {};\n\n/**\n * @param {!IDBKeyType} bound Creates a lower bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.lowerBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} bound Creates an upper bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.upperBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} left The left bound value.\n * @param {!IDBKeyType} right The right bound value.\n * @param {boolean=} openLeft Whether the left bound value should be excluded.\n * @param {boolean=} openRight Whether the right bound value should be excluded.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.bound = function(left, right, openLeft, openRight) {};\n\n/**\n * @param {!IDBKeyType} key\n * @return {boolean}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbkeyrange-includes\n */\nIDBKeyRange.prototype.includes = function(key) {};\n\n\n/**\n * @param {string} type\n * @param {!IDBVersionChangeEventInit=} opt_eventInit\n * @constructor\n * @extends {Event}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent\n */\nfunction IDBVersionChangeEvent(type, opt_eventInit) {}\n\n/**\n * @const {number}\n */\nIDBVersionChangeEvent.prototype.oldVersion;\n\n/**\n * @const {?number}\n */\nIDBVersionChangeEvent.prototype.newVersion;\n", ++"externs/w3c_geometry1.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geometry Interfaces Module Level 1 spec.\n * The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/geometry-1/\n *\n * @externs\n * @author bobak@9oo91e.qjz9zk (Andreas F. Bobak)\n */\n\n/**\n * @deprecated ClientRect has been replaced by DOMRect in the latest spec.\n * @constructor\n * @see https://www.w3.org/TR/cssom-view/#changes-from-2011-08-04\n */\nfunction ClientRect() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-top\n */\nClientRect.prototype.top;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-right\n */\nClientRect.prototype.right;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-bottom\n */\nClientRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-left\n */\nClientRect.prototype.left;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-width\n */\nClientRect.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-height\n */\nClientRect.prototype.height;\n\n/**\n * @constructor\n * @extends {ClientRect} for backwards compatibility\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-domrectreadonly\n */\nfunction DOMRectReadOnly(x, y, width, height) {}\n\n/**\n * @param {!DOMRectInit} other\n * @return {!DOMRectReadOnly}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-fromrect\n */\nDOMRectReadOnly.prototype.fromRect = function(other) {};\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-x\n */\nDOMRectReadOnly.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-y\n */\nDOMRectReadOnly.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-width\n */\nDOMRectReadOnly.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-height\n */\nDOMRectReadOnly.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRectReadOnly.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRectReadOnly.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRectReadOnly.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRectReadOnly.prototype.left;\n\n/**\n * @constructor\n * @extends {DOMRectReadOnly}\n * @param {number=} x\n * @param {number=} y\n * @param {number=} width\n * @param {number=} height\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-domrect\n */\nfunction DOMRect(x, y, width, height) {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-x\n */\nDOMRect.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-y\n */\nDOMRect.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-width\n */\nDOMRect.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrect-height\n */\nDOMRect.prototype.height;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-top\n */\nDOMRect.prototype.top;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-right\n */\nDOMRect.prototype.right;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-bottom\n */\nDOMRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectreadonly-left\n */\nDOMRect.prototype.left;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/geometry-1/#dictdef-domrectinit\n */\nfunction DOMRectInit() {}\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-x\n */\nDOMRectInit.prototype.x;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-y\n */\nDOMRectInit.prototype.y;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-width\n */\nDOMRectInit.prototype.width;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/geometry-1/#dom-domrectinit-height\n */\nDOMRectInit.prototype.height;\n', ++"externs/w3c_geolocation.js":'/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Geolocation specification\n * http://www.w3.org/TR/geolocation-API/\n * @externs\n * @author ngd@9oo91e.qjz9zk (Neil Dunn)\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#geolocation\n */\nfunction Geolocation() {}\n\n/**\n * @typedef {function(!GeolocationPosition): void}\n */\nvar PositionCallback;\n\n/**\n * @typedef {function(!GeolocationPositionError): void}\n */\nvar PositionErrorCallback;\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {undefined}\n */\nGeolocation.prototype.getCurrentPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {PositionCallback} successCallback\n * @param {PositionErrorCallback=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {number}\n */\nGeolocation.prototype.watchPosition = function(successCallback,\n opt_errorCallback,\n opt_options) {};\n\n/**\n * @param {number} watchId\n * @return {undefined}\n */\nGeolocation.prototype.clearWatch = function(watchId) {};\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#coordinates\n */\nfunction GeolocationCoordinates() {}\n/** @type {number} */\nGeolocationCoordinates.prototype.latitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.longitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.accuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitudeAccuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.heading;\n/** @type {number} */\nGeolocationCoordinates.prototype.speed;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position\n */\nfunction GeolocationPosition() {}\n/** @type {GeolocationCoordinates} */\nGeolocationPosition.prototype.coords;\n/** @type {number} */\nGeolocationPosition.prototype.timestamp;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-options\n */\nfunction GeolocationPositionOptions() {}\n/** @type {boolean|undefined} */\nGeolocationPositionOptions.prototype.enableHighAccuracy;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.maximumAge;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.timeout;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-error\n */\nfunction GeolocationPositionError() {}\n/** @type {number} */\nGeolocationPositionError.prototype.code;\n/** @type {string} */\nGeolocationPositionError.prototype.message;\n/** @const {number} */\nGeolocationPositionError.prototype.UNKNOWN_ERROR;\n/** @const {number} */\nGeolocationPositionError.prototype.PERMISSION_DENIED;\n/** @const {number} */\nGeolocationPositionError.prototype.POSITION_UNAVAILABLE;\n/** @const {number} */\nGeolocationPositionError.prototype.TIMEOUT;\n\n/** @type {Geolocation} */\nNavigator.prototype.geolocation;\n', ++"externs/w3c_indexeddb.js":"/*\n * Copyright 2011 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's IndexedDB API and IndexedDB API 2.0.\n * @see http://www.w3.org/TR/2015/REC-IndexedDB-20150108/\n * @see https://www.w3.org/TR/2017/WD-IndexedDB-2-20170313/\n *\n * @externs\n * @author guido.tapia@picnet.com.au (Guido Tapia)\n * @author vobruba.martin@9ma1l.qjz9zk (Martin Vobruba)\n */\n\n/** @type {!IDBFactory} */\nvar indexedDB;\n\n/** @type {!IDBFactory|undefined} */\nServiceWorkerGlobalScope.prototype.indexedDB;\n\n\n\n/**\n * Possible values: 'readonly', 'readwrite', 'versionchange'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBTransactionMode\n */\nvar IDBTransactionMode;\n\n\n/**\n * Possible values: 'pending', 'done'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBRequestReadyState\n */\nvar IDBRequestReadyState;\n\n\n/**\n * Possible values: 'next', 'nextunique', 'prev', 'prevunique'\n *\n * @typedef {string}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorDirection\n */\nvar IDBCursorDirection;\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBIndexParameters\n */\nfunction IDBIndexParameters(){};\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.unique;\n\n/** @type {(undefined|boolean)} */\nIDBIndexParameters.prototype.multiEntry;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEventInit\n */\nfunction IDBVersionChangeEventInit(){};\n\n/** @type {(undefined|number)} */\nIDBVersionChangeEventInit.prototype.oldVersion;\n\n/** @type {(undefined|number|null)} */\nIDBVersionChangeEventInit.prototype.newVersion;\n\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters\n */\nfunction IDBObjectStoreParameters() {};\n\n/** @type {(undefined|string|!Array|null)} */\nIDBObjectStoreParameters.prototype.keyPath;\n\n/** @type {(undefined|boolean)} */\nIDBObjectStoreParameters.prototype.autoIncrement;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory\n */\nfunction IDBFactory() {}\n\n/**\n * @param {string} name The name of the database to open.\n * @param {number=} opt_version The version at which to open the database.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.open = function(name, opt_version) {};\n\n/**\n * @param {string} name The name of the database to delete.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.deleteDatabase = function(name) {};\n\n/**\n * @param {*} first\n * @param {*} second\n * @return {number}\n */\nIDBFactory.prototype.cmp = function(first, second) {};\n\n\n/**\n * @constructor\n * @template T\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest\n * @see https://www.w3.org/TR/IndexedDB-2/#request-api\n */\nfunction IDBRequest() {}\n\n/** @override */\nIDBRequest.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!IDBRequestReadyState}\n */\nIDBRequest.prototype.readyState; // readonly\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onsuccess = function(e) {};\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onerror = function(e) {};\n\n/** @type {T} */\nIDBRequest.prototype.result; // readonly\n\n/**\n * @type {number}\n * @deprecated Use \"error\"\n */\nIDBRequest.prototype.errorCode; // readonly\n\n\n/** @type {?DOMError|?DOMException} */\nIDBRequest.prototype.error; // readonly\n\n/** @type {?IDBObjectStore|?IDBIndex|?IDBCursor} */\nIDBRequest.prototype.source; // readonly\n\n/** @type {?IDBTransaction} */\nIDBRequest.prototype.transaction; // readonly\n\n\n/**\n * @constructor\n * @extends {IDBRequest}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBOpenDBRequest\n */\nfunction IDBOpenDBRequest() {}\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onblocked = function(e) {};\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onupgradeneeded = function(e) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase\n * @see https://www.w3.org/TR/IndexedDB-2/#database-interface\n */\nfunction IDBDatabase() {}\n\n/**\n * @const {string}\n */\nIDBDatabase.prototype.name;\n\n/**\n * @const {number}\n */\nIDBDatabase.prototype.version;\n\n/**\n * @const {!DOMStringList}\n */\nIDBDatabase.prototype.objectStoreNames;\n\n/**\n * @param {string} name The name of the object store.\n * @param {!IDBObjectStoreParameters=} opt_parameters Parameters to be passed\n * creating the object store.\n * @return {!IDBObjectStore} The created/open object store.\n */\nIDBDatabase.prototype.createObjectStore =\n function(name, opt_parameters) {};\n\n/**\n * @param {string} name The name of the object store to remove.\n * @return {undefined}\n */\nIDBDatabase.prototype.deleteObjectStore = function(name) {};\n\n/**\n * @param {(string|!Array|!DOMStringList)} storeNames The stores to open\n * in this transaction.\n * @param {!IDBTransactionMode=} mode The mode for opening the object stores.\n * @return {!IDBTransaction} The IDBRequest object.\n */\nIDBDatabase.prototype.transaction = function(storeNames, mode) {};\n\n/**\n * Closes the database connection.\n * @return {undefined}\n */\nIDBDatabase.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onclose;\n\n/**\n * @type {?function(!Event)}\n */\nIDBDatabase.prototype.onerror;\n\n/**\n * @type {?function(!IDBVersionChangeEvent)}\n */\nIDBDatabase.prototype.onversionchange;\n\n/** @override */\nIDBDatabase.prototype.addEventListener = function(type, listener, opt_options) {\n};\n\n/** @override */\nIDBDatabase.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nIDBDatabase.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Typedef for valid key types according to the w3 specification. Note that this\n * is slightly wider than what is actually allowed, as all Array elements must\n * have a valid key type.\n * @see http://www.w3.org/TR/IndexedDB/#key-construct\n * @see https://www.w3.org/TR/IndexedDB-2/#key-construct\n * @typedef {number|string|!Date|!Array|!BufferSource}\n */\nvar IDBKeyType;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStore\n * @see https://www.w3.org/TR/IndexedDB-2/#object-store-interface\n */\nfunction IDBObjectStore() {}\n\n/**\n * @type {string}\n */\nIDBObjectStore.prototype.name;\n\n/**\n * @type {*}\n */\nIDBObjectStore.prototype.keyPath;\n\n/**\n * @type {!DOMStringList}\n */\nIDBObjectStore.prototype.indexNames;\n\n/** @type {!IDBTransaction} */\nIDBObjectStore.prototype.transaction;\n\n/** @type {boolean} */\nIDBObjectStore.prototype.autoIncrement;\n\n/**\n * @param {*} value The value to put into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.put = function(value, key) {};\n\n/**\n * @param {*} value The value to add into the object store.\n * @param {!IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.add = function(value, key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.delete = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The key of the document to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.get = function(key) {};\n\n/**\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.clear = function() {};\n\n/**\n * @param {?IDBKeyRange=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {string} name The name of the index.\n * @param {string|!Array} keyPath The path to the index key.\n * @param {!IDBIndexParameters=} opt_paramters Optional parameters\n * for the created index.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.createIndex = function(name, keyPath, opt_paramters) {};\n\n/**\n * @param {string} name The name of the index to retrieve.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.index = function(name) {};\n\n/**\n * @param {string} indexName The name of the index to remove.\n * @return {undefined}\n */\nIDBObjectStore.prototype.deleteIndex = function(indexName) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n * @see http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-count\n */\nIDBObjectStore.prototype.count = function(key) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getkey\n */\nIDBObjectStore.prototype.getKey = function(query) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getall\n */\nIDBObjectStore.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-getallkeys\n */\nIDBObjectStore.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|IDBKeyRange)=} query\n * @param {!IDBCursorDirection=} direction\n * @return {!IDBRequest} The IDBRequest object.\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbobjectstore-openkeycursor\n */\nIDBObjectStore.prototype.openKeyCursor = function(query, direction) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBIndex\n * @see https://www.w3.org/TR/IndexedDB-2/#index-interface\n */\nfunction IDBIndex() {}\n\n/**\n * @type {string}\n */\nIDBIndex.prototype.name;\n\n/**\n * @const {!IDBObjectStore}\n */\nIDBIndex.prototype.objectStore;\n\n/**\n * @const {*}\n */\nIDBIndex.prototype.keyPath;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.multiEntry;\n\n/**\n * @const {boolean}\n */\nIDBIndex.prototype.unique;\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {(!IDBKeyType|?IDBKeyRange)=} range The range of the cursor.\n * Nullable because IE <11 has problems with undefined.\n * @param {!IDBCursorDirection=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openKeyCursor = function(range, direction) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.get = function(key) {};\n\n/**\n * @param {!IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.getKey = function(key) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getall\n */\nIDBIndex.prototype.getAll = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} query\n * @param {number=} count\n * @return {!IDBRequest}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbindex-getallkeys\n */\nIDBIndex.prototype.getAllKeys = function(query, count) {};\n\n/**\n * @param {(!IDBKeyType|!IDBKeyRange)=} opt_key\n * @return {!IDBRequest}\n */\nIDBIndex.prototype.count = function(opt_key) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor\n * @see https://www.w3.org/TR/IndexedDB-2/#cursor-interface\n */\nfunction IDBCursor() {}\n\n/**\n * @const {(!IDBObjectStore|!IDBIndex)}\n */\nIDBCursor.prototype.source;\n\n/**\n * @const {!IDBCursorDirection}\n */\nIDBCursor.prototype.direction;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.key;\n\n/**\n * @const {!IDBKeyType}\n */\nIDBCursor.prototype.primaryKey;\n\n/**\n * @param {*} value The new value for the current object in the cursor.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.update = function(value) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @param {!IDBKeyType=} key Continue enumerating the cursor from the specified\n * key (or next).\n * @return {undefined}\n */\nIDBCursor.prototype.continue = function(key) {};\n\n/**\n * @param {!IDBKeyType} key\n * @param {!IDBKeyType} primaryKey\n * @return {undefined}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbcursor-continueprimarykey\n */\nIDBCursor.prototype.continuePrimaryKey = function(key, primaryKey) {};\n\n/**\n * @param {number} count Number of times to iterate the cursor.\n * @return {undefined}\n */\nIDBCursor.prototype.advance = function(count) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.delete = function() {};\n\n\n/**\n * @constructor\n * @extends {IDBCursor}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorWithValue\n */\nfunction IDBCursorWithValue() {}\n\n/** @type {*} */\nIDBCursorWithValue.prototype.value; // readonly\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction\n * @see https://www.w3.org/TR/IndexedDB-2/#transaction\n */\nfunction IDBTransaction() {}\n\n/**\n * @const {!DOMStringList}\n */\nIDBTransaction.prototype.objectStoreNames;\n\n/**\n * @const {!IDBTransactionMode}\n */\nIDBTransaction.prototype.mode;\n\n/**\n * @const {!IDBDatabase}\n */\nIDBTransaction.prototype.db;\n\n/**\n * @type {!DOMError|!DOMException}\n */\nIDBTransaction.prototype.error;\n\n/**\n * @param {string} name The name of the object store to retrieve.\n * @return {!IDBObjectStore} The object store.\n */\nIDBTransaction.prototype.objectStore = function(name) {};\n\n/**\n * Aborts the transaction.\n * @return {undefined}\n */\nIDBTransaction.prototype.abort = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onabort;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.oncomplete;\n\n/**\n * @type {?function(!Event)}\n */\nIDBTransaction.prototype.onerror;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange\n * @see https://www.w3.org/TR/IndexedDB-2/#keyrange\n */\nfunction IDBKeyRange() {}\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.lower;\n\n/**\n * @const {*}\n */\nIDBKeyRange.prototype.upper;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.lowerOpen;\n\n/**\n * @const {boolean}\n */\nIDBKeyRange.prototype.upperOpen;\n\n/**\n * @param {!IDBKeyType} value The single key value of this range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.only = function(value) {};\n\n/**\n * @param {!IDBKeyType} bound Creates a lower bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.lowerBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} bound Creates an upper bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.upperBound = function(bound, open) {};\n\n/**\n * @param {!IDBKeyType} left The left bound value.\n * @param {!IDBKeyType} right The right bound value.\n * @param {boolean=} openLeft Whether the left bound value should be excluded.\n * @param {boolean=} openRight Whether the right bound value should be excluded.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.bound = function(left, right, openLeft, openRight) {};\n\n/**\n * @param {!IDBKeyType} key\n * @return {boolean}\n * @see https://www.w3.org/TR/IndexedDB-2/#dom-idbkeyrange-includes\n */\nIDBKeyRange.prototype.includes = function(key) {};\n\n\n/**\n * @param {string} type\n * @param {!IDBVersionChangeEventInit=} opt_eventInit\n * @constructor\n * @extends {Event}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent\n */\nfunction IDBVersionChangeEvent(type, opt_eventInit) {}\n\n/**\n * @const {number}\n */\nIDBVersionChangeEvent.prototype.oldVersion;\n\n/**\n * @const {?number}\n */\nIDBVersionChangeEvent.prototype.newVersion;\n", + "externs/w3c_midi.js":'/*\n * Copyright 2014 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview W3C Web MIDI specification.\n * @see http://www.w3.org/TR/webmidi/\n *\n * @externs\n */\n\n\n/**\n * @param {!MIDIOptions=} opt_options\n * @return {!Promise.}\n */\nnavigator.requestMIDIAccess = function(opt_options) {};\n\n\n/**\n * @typedef {{\n * sysex: boolean\n * }}\n */\nvar MIDIOptions;\n\n\n\n/**\n * @interface\n */\nvar MIDIInputMap = function() {};\n\n\n/**\n * @const {number}\n */\nMIDIInputMap.prototype.size;\n\n\n/**\n * @param {function(string)} iterator\n */\nMIDIInputMap.prototype.keys = function(iterator) {};\n\n\n/**\n * @param {function(!Array.<*>)} iterator\n */\nMIDIInputMap.prototype.entries = function(iterator) {};\n\n\n/**\n * @param {function(!MIDIInput)} iterator\n */\nMIDIInputMap.prototype.values = function(iterator) {};\n\n\n/**\n * @param {string} key\n * @return {!MIDIInput}\n */\nMIDIInputMap.prototype.get = function(key) {};\n\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nMIDIInputMap.prototype.has = function(key) {};\n\n\n\n/**\n * @interface\n */\nvar MIDIOutputMap = function() {};\n\n\n/**\n * @const {number}\n */\nMIDIOutputMap.prototype.size;\n\n\n/**\n * @param {function(string)} iterator\n */\nMIDIOutputMap.prototype.keys = function(iterator) {};\n\n\n/**\n * @param {function(!Array.<*>)} iterator\n */\nMIDIOutputMap.prototype.entries = function(iterator) {};\n\n\n/**\n * @param {function(!MIDIOutput)} iterator\n */\nMIDIOutputMap.prototype.values = function(iterator) {};\n\n\n/**\n * @param {string} key\n * @return {!MIDIOutput}\n */\nMIDIOutputMap.prototype.get = function(key) {};\n\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nMIDIOutputMap.prototype.has = function(key) {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nvar MIDIAccess = function() {};\n\n\n/**\n * @const {!MIDIInputMap}\n */\nMIDIAccess.prototype.inputs;\n\n\n/**\n * @const {!MIDIOutputMap}\n */\nMIDIAccess.prototype.outputs;\n\n\n/**\n * @const {function(!MIDIConnectionEvent)}\n */\nMIDIAccess.prototype.onconnect;\n\n\n/**\n * @type {function(!MIDIConnectionEvent)}\n */\nMIDIAccess.prototype.ondisconnect;\n\n\n/**\n * @const {boolean}\n */\nMIDIAccess.prototype.sysexEnabled;\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nvar MIDIPort = function() {};\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.id;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.manufacturer;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.name;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.type;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.version;\n\n\n/**\n * @type {function(!MIDIConnectionEvent)}\n */\nMIDIPort.prototype.ondisconnect;\n\n\n\n/**\n * @interface\n * @extends {MIDIPort}\n */\nvar MIDIInput = function() {};\n\n\n/**\n * @type {function(!MIDIMessageEvent)}\n */\nMIDIInput.prototype.onmidimessage;\n\n\n\n/**\n * @interface\n * @extends {MIDIPort}\n */\nvar MIDIOutput = function() {};\n\n\n/**\n * @param {!Uint8Array} data\n * @param {number=} opt_timestamp\n */\nMIDIOutput.prototype.send = function(data, opt_timestamp) {};\n\n\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!MIDIMessageEventInit=} opt_init\n */\nvar MIDIMessageEvent = function(type, opt_init) {};\n\n\n/**\n * @const {number}\n */\nMIDIMessageEvent.prototype.receivedTime;\n\n\n/**\n * @const {!Uint8Array}\n */\nMIDIMessageEvent.prototype.data;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/webmidi/#midimessageeventinit-interface\n */\nfunction MIDIMessageEventInit() {}\n\n/** @type {undefined|number} */\nMIDIMessageEventInit.prototype.receivedTime;\n\n/** @type {undefined|!Uint8Array} */\nMIDIMessageEventInit.prototype.data;\n\n\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!MIDIConnectionEventInit=} opt_init\n */\nvar MIDIConnectionEvent = function(type, opt_init) {};\n\n\n/**\n * @const {MIDIPort}\n */\nMIDIConnectionEvent.prototype.port;\n\n\n/**\n * @record\n * @extends {EventInit}\n * @see https://www.w3.org/TR/webmidi/#idl-def-MIDIConnectionEventInit\n */\nfunction MIDIConnectionEventInit() {}\n\n/** @type {undefined|!MIDIPort} */\nMIDIConnectionEventInit.prototype.port;\n', +-"externs/w3c_navigation_timing.js":"/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Navigation Timing specification.\n *\n * Created from\n * @see http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html\n * @see http://w3c-test.org/webperf/specs/ResourceTiming\n * @see http://www.w3.org/TR/performance-timeline\n * @see http://www.w3.org/TR/user-timing/\n *\n * @externs\n * @author rky@google.com (Ren\u00e9 Kyllingstad)\n */\n\n/** @constructor */\nfunction PerformanceTiming() {}\n/** @type {number} */ PerformanceTiming.prototype.navigationStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceTiming.prototype.connectEnd;\n/** @type {number} */ PerformanceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceTiming.prototype.responseEnd;\n/** @type {number} */ PerformanceTiming.prototype.domLoading;\n/** @type {number} */ PerformanceTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventStart;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.domComplete;\n/** @type {number} */ PerformanceTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.loadEventEnd;\n\n/** @constructor */\nfunction PerformanceEntry() {}\n/** @type {string} */ PerformanceEntry.prototype.name;\n/** @type {string} */ PerformanceEntry.prototype.entryType;\n/** @type {number} */ PerformanceEntry.prototype.startTime;\n/** @type {number} */ PerformanceEntry.prototype.duration;\n\n/**\n * https://www.w3.org/TR/resource-timing-2/#performanceresourcetiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceResourceTiming() {}\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectEnd;\n/** @type {number} */\nPerformanceResourceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseEnd;\n/** @type {string} */ PerformanceResourceTiming.prototype.initiatorType;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.transferSize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.encodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.decodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.workerStart;\n/** @type {string} */ PerformanceResourceTiming.prototype.nextHopProtocol;\n\n/**\n * Possible values are 'navigate', 'reload', 'back_forward', and 'prerender'.\n * See https://w3c.github.io/navigation-timing/#sec-performance-navigation-types\n * @typedef {string}\n */\nvar NavigationType;\n\n/**\n * https://w3c.github.io/navigation-timing/#sec-PerformanceNavigationTiming\n * @constructor\n * @extends {PerformanceResourceTiming}\n */\nfunction PerformanceNavigationTiming() {}\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domComplete;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventEnd;\n/** @type {NavigationType} */ PerformanceNavigationTiming.prototype.type;\n/** @type {number} */ PerformanceNavigationTiming.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformancePaintTiming() {}\n\n/** @constructor */\nfunction PerformanceNavigation() {}\n/** @const {number} */ PerformanceNavigation.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.TYPE_RESERVED;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RESERVED;\n/** @type {number} */ PerformanceNavigation.prototype.type;\n/** @type {number} */ PerformanceNavigation.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/longtasks/#taskattributiontiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction TaskAttributionTiming() {}\n/** @type {string} */ TaskAttributionTiming.prototype.containerId;\n/** @type {string} */ TaskAttributionTiming.prototype.containerName;\n/** @type {string} */ TaskAttributionTiming.prototype.containerSrc;\n/** @type {string} */ TaskAttributionTiming.prototype.containerType;\n\n/**\n * https://w3c.github.io/longtasks/#performancelongtasktiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceLongTaskTiming() {}\n/** @type {!Array} */\nPerformanceLongTaskTiming.prototype.attribution;\n\n/**\n * https://wicg.github.io/layout-instability/#sec-layout-shift\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LayoutShift() {}\n/** @type {number} */ LayoutShift.prototype.value;\n/** @type {boolean} */ LayoutShift.prototype.hadRecentInput;\n/** @type {number} */ LayoutShift.prototype.lastInputTime;\n\n/**\n * https://wicg.github.io/largest-contentful-paint/#largestcontentfulpaint\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LargestContentfulPaint() {}\n/** @type {number} */ LargestContentfulPaint.prototype.renderTime;\n/** @type {number} */ LargestContentfulPaint.prototype.loadTime;\n/** @type {number} */ LargestContentfulPaint.prototype.size;\n/** @type {string} */ LargestContentfulPaint.prototype.id;\n/** @type {string} */ LargestContentfulPaint.prototype.url;\n/** @type {?Element} */ LargestContentfulPaint.prototype.element;\n\n/**\n * https://wicg.github.io/event-timing/#sec-performance-event-timing\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceEventTiming() {}\n/** @type {number} */ PerformanceEventTiming.prototype.processingStart;\n/** @type {number} */ PerformanceEventTiming.prototype.processingEnd;\n/** @type {boolean} */ PerformanceEventTiming.prototype.cancelable;\n\n/** @constructor */\nfunction Performance() {}\n\n/** @type {PerformanceTiming} */\nPerformance.prototype.timing;\n\n/** @type {PerformanceNavigation} */\nPerformance.prototype.navigation;\n\n/** @type {number} */\nPerformance.prototype.timeOrigin;\n\n\n/**\n * Clears the buffer used to store the current list of\n * PerformanceResourceTiming resources.\n * @return {undefined}\n */\nPerformance.prototype.clearResourceTimings = function() {};\n\n/**\n * A callback that is invoked when the resourcetimingbufferfull event is fired.\n * @type {?function(Event)}\n */\nPerformance.prototype.onresourcetimingbufferfull = function() {};\n\n/**\n * Set the maximum number of PerformanceResourceTiming resources that may be\n * stored in the buffer.\n * @param {number} maxSize\n * @return {undefined}\n */\nPerformance.prototype.setResourceTimingBufferSize = function(maxSize) {};\n\n/**\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntries = function() {};\n\n/**\n * @param {string} entryType Only return `PerformanceEntry`s with this\n * entryType.\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByType = function(entryType) {};\n\n/**\n * @param {string} name Only return `PerformanceEntry`s with this name.\n * @param {string=} opt_entryType Only return `PerformanceEntry`s with\n * this entryType.\n * @return {!Array} PerformanceEntry list in chronological\n * order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByName = function(name, opt_entryType) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.now = function() {};\n\n/**\n * @param {string} markName\n * @return {undefined}\n */\nPerformance.prototype.mark = function(markName) {};\n\n/**\n * @param {string=} opt_markName\n * @return {undefined}\n */\nPerformance.prototype.clearMarks = function(opt_markName) {};\n\n/**\n * @param {string} measureName\n * @param {string=} opt_startMark\n * @param {string=} opt_endMark\n * @return {undefined}\n */\nPerformance.prototype.measure = function(\n measureName, opt_startMark, opt_endMark) {};\n\n/**\n * @param {string=} opt_measureName\n * @return {undefined}\n */\nPerformance.prototype.clearMeasures = function(opt_measureName) {};\n\n/** @type {Performance} */\nWindow.prototype.performance;\n\n/**\n * @type {!Performance}\n * @suppress {duplicate}\n */\nvar performance;\n\n/**\n * @constructor\n * @extends {Performance}\n */\nfunction WorkerPerformance() {}\n\n/**\n * @typedef {function(!PerformanceObserverEntryList, !PerformanceObserver): void}\n */\nvar PerformanceObserverCallback;\n\n/**\n * See:\n * https://w3c.github.io/performance-timeline/#the-performanceobserver-interface\n * @constructor\n * @param {!PerformanceObserverCallback} callback\n */\nfunction PerformanceObserver(callback) {}\n\n/**\n * @param {!PerformanceObserverInit} options\n */\nPerformanceObserver.prototype.observe = function(options) {};\n\n/** @return {void} */\nPerformanceObserver.prototype.disconnect = function() {};\n\n/**\n * See https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver/takeRecords\n * @return {!PerformanceObserverEntryList}\n */\nPerformanceObserver.prototype.takeRecords = function() {};\n\n/**\n * @record\n */\nfunction PerformanceObserverInit() {}\n\n/** @type {undefined|!Array} */\nPerformanceObserverInit.prototype.entryTypes;\n/** @type {undefined|string} */\nPerformanceObserverInit.prototype.type;\n/** @type {undefined|boolean} */\nPerformanceObserverInit.prototype.buffered;\n\n/**\n * @constructor\n */\nfunction PerformanceObserverEntryList() {}\n\n/** @return {!Array} */\nPerformanceObserverEntryList.prototype.getEntries = function() {};\n/**\n * @param {string} type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByName = function(type) {};\n/**\n * @param {string} name\n * @param {string=} opt_type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByType = function(\n name, opt_type) {};\n", ++"externs/w3c_navigation_timing.js":"/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Navigation Timing specification.\n *\n * Created from\n * @see http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html\n * @see http://w3c-test.org/webperf/specs/ResourceTiming\n * @see http://www.w3.org/TR/performance-timeline\n * @see http://www.w3.org/TR/user-timing/\n *\n * @externs\n * @author rky@9oo91e.qjz9zk (Ren\u00e9 Kyllingstad)\n */\n\n/** @constructor */\nfunction PerformanceTiming() {}\n/** @type {number} */ PerformanceTiming.prototype.navigationStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceTiming.prototype.connectEnd;\n/** @type {number} */ PerformanceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceTiming.prototype.responseEnd;\n/** @type {number} */ PerformanceTiming.prototype.domLoading;\n/** @type {number} */ PerformanceTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventStart;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.domComplete;\n/** @type {number} */ PerformanceTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.loadEventEnd;\n\n/** @constructor */\nfunction PerformanceEntry() {}\n/** @type {string} */ PerformanceEntry.prototype.name;\n/** @type {string} */ PerformanceEntry.prototype.entryType;\n/** @type {number} */ PerformanceEntry.prototype.startTime;\n/** @type {number} */ PerformanceEntry.prototype.duration;\n\n/**\n * https://www.w3.org/TR/resource-timing-2/#performanceresourcetiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceResourceTiming() {}\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectEnd;\n/** @type {number} */\nPerformanceResourceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseEnd;\n/** @type {string} */ PerformanceResourceTiming.prototype.initiatorType;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.transferSize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.encodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.decodedBodySize;\n/** @type {number|undefined} */\nPerformanceResourceTiming.prototype.workerStart;\n/** @type {string} */ PerformanceResourceTiming.prototype.nextHopProtocol;\n\n/**\n * Possible values are 'navigate', 'reload', 'back_forward', and 'prerender'.\n * See https://w3c.github.io/navigation-timing/#sec-performance-navigation-types\n * @typedef {string}\n */\nvar NavigationType;\n\n/**\n * https://w3c.github.io/navigation-timing/#sec-PerformanceNavigationTiming\n * @constructor\n * @extends {PerformanceResourceTiming}\n */\nfunction PerformanceNavigationTiming() {}\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype\n .domContentLoadedEventEnd;\n/** @type {number} */ PerformanceNavigationTiming.prototype.domComplete;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceNavigationTiming.prototype.loadEventEnd;\n/** @type {NavigationType} */ PerformanceNavigationTiming.prototype.type;\n/** @type {number} */ PerformanceNavigationTiming.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformancePaintTiming() {}\n\n/** @constructor */\nfunction PerformanceNavigation() {}\n/** @const {number} */ PerformanceNavigation.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_NAVIGATE;\n/** @const {number} */ PerformanceNavigation.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RELOAD;\n/** @const {number} */ PerformanceNavigation.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_BACK_FORWARD;\n/** @const {number} */ PerformanceNavigation.TYPE_RESERVED;\n/** @const {number} */ PerformanceNavigation.prototype.TYPE_RESERVED;\n/** @type {number} */ PerformanceNavigation.prototype.type;\n/** @type {number} */ PerformanceNavigation.prototype.redirectCount;\n\n/**\n * https://w3c.github.io/longtasks/#taskattributiontiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction TaskAttributionTiming() {}\n/** @type {string} */ TaskAttributionTiming.prototype.containerId;\n/** @type {string} */ TaskAttributionTiming.prototype.containerName;\n/** @type {string} */ TaskAttributionTiming.prototype.containerSrc;\n/** @type {string} */ TaskAttributionTiming.prototype.containerType;\n\n/**\n * https://w3c.github.io/longtasks/#performancelongtasktiming\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceLongTaskTiming() {}\n/** @type {!Array} */\nPerformanceLongTaskTiming.prototype.attribution;\n\n/**\n * https://wicg.github.io/layout-instability/#sec-layout-shift\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LayoutShift() {}\n/** @type {number} */ LayoutShift.prototype.value;\n/** @type {boolean} */ LayoutShift.prototype.hadRecentInput;\n/** @type {number} */ LayoutShift.prototype.lastInputTime;\n\n/**\n * https://wicg.github.io/largest-contentful-paint/#largestcontentfulpaint\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction LargestContentfulPaint() {}\n/** @type {number} */ LargestContentfulPaint.prototype.renderTime;\n/** @type {number} */ LargestContentfulPaint.prototype.loadTime;\n/** @type {number} */ LargestContentfulPaint.prototype.size;\n/** @type {string} */ LargestContentfulPaint.prototype.id;\n/** @type {string} */ LargestContentfulPaint.prototype.url;\n/** @type {?Element} */ LargestContentfulPaint.prototype.element;\n\n/**\n * https://wicg.github.io/event-timing/#sec-performance-event-timing\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceEventTiming() {}\n/** @type {number} */ PerformanceEventTiming.prototype.processingStart;\n/** @type {number} */ PerformanceEventTiming.prototype.processingEnd;\n/** @type {boolean} */ PerformanceEventTiming.prototype.cancelable;\n\n/** @constructor */\nfunction Performance() {}\n\n/** @type {PerformanceTiming} */\nPerformance.prototype.timing;\n\n/** @type {PerformanceNavigation} */\nPerformance.prototype.navigation;\n\n/** @type {number} */\nPerformance.prototype.timeOrigin;\n\n\n/**\n * Clears the buffer used to store the current list of\n * PerformanceResourceTiming resources.\n * @return {undefined}\n */\nPerformance.prototype.clearResourceTimings = function() {};\n\n/**\n * A callback that is invoked when the resourcetimingbufferfull event is fired.\n * @type {?function(Event)}\n */\nPerformance.prototype.onresourcetimingbufferfull = function() {};\n\n/**\n * Set the maximum number of PerformanceResourceTiming resources that may be\n * stored in the buffer.\n * @param {number} maxSize\n * @return {undefined}\n */\nPerformance.prototype.setResourceTimingBufferSize = function(maxSize) {};\n\n/**\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntries = function() {};\n\n/**\n * @param {string} entryType Only return `PerformanceEntry`s with this\n * entryType.\n * @return {!Array} A copy of the PerformanceEntry list,\n * in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByType = function(entryType) {};\n\n/**\n * @param {string} name Only return `PerformanceEntry`s with this name.\n * @param {string=} opt_entryType Only return `PerformanceEntry`s with\n * this entryType.\n * @return {!Array} PerformanceEntry list in chronological\n * order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByName = function(name, opt_entryType) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.now = function() {};\n\n/**\n * @param {string} markName\n * @return {undefined}\n */\nPerformance.prototype.mark = function(markName) {};\n\n/**\n * @param {string=} opt_markName\n * @return {undefined}\n */\nPerformance.prototype.clearMarks = function(opt_markName) {};\n\n/**\n * @param {string} measureName\n * @param {string=} opt_startMark\n * @param {string=} opt_endMark\n * @return {undefined}\n */\nPerformance.prototype.measure = function(\n measureName, opt_startMark, opt_endMark) {};\n\n/**\n * @param {string=} opt_measureName\n * @return {undefined}\n */\nPerformance.prototype.clearMeasures = function(opt_measureName) {};\n\n/** @type {Performance} */\nWindow.prototype.performance;\n\n/**\n * @type {!Performance}\n * @suppress {duplicate}\n */\nvar performance;\n\n/**\n * @constructor\n * @extends {Performance}\n */\nfunction WorkerPerformance() {}\n\n/**\n * @typedef {function(!PerformanceObserverEntryList, !PerformanceObserver): void}\n */\nvar PerformanceObserverCallback;\n\n/**\n * See:\n * https://w3c.github.io/performance-timeline/#the-performanceobserver-interface\n * @constructor\n * @param {!PerformanceObserverCallback} callback\n */\nfunction PerformanceObserver(callback) {}\n\n/**\n * @param {!PerformanceObserverInit} options\n */\nPerformanceObserver.prototype.observe = function(options) {};\n\n/** @return {void} */\nPerformanceObserver.prototype.disconnect = function() {};\n\n/**\n * See https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/PerformanceObserver/takeRecords\n * @return {!PerformanceObserverEntryList}\n */\nPerformanceObserver.prototype.takeRecords = function() {};\n\n/**\n * @record\n */\nfunction PerformanceObserverInit() {}\n\n/** @type {undefined|!Array} */\nPerformanceObserverInit.prototype.entryTypes;\n/** @type {undefined|string} */\nPerformanceObserverInit.prototype.type;\n/** @type {undefined|boolean} */\nPerformanceObserverInit.prototype.buffered;\n\n/**\n * @constructor\n */\nfunction PerformanceObserverEntryList() {}\n\n/** @return {!Array} */\nPerformanceObserverEntryList.prototype.getEntries = function() {};\n/**\n * @param {string} type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByName = function(type) {};\n/**\n * @param {string} name\n * @param {string=} opt_type\n * @return {!Array}\n */\nPerformanceObserverEntryList.prototype.getEntriesByType = function(\n name, opt_type) {};\n", + "externs/nonstandard_navigation_timing.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard Definitions for W3C\'s Navigation Timing\n * specification.\n *\n * @externs\n */\n\n// Nonstandard. Only available in Blink.\n// Returns more granular results with the --enable-memory-info flag.\n/** @type {MemoryInfo} */ Performance.prototype.memory;\n\n/**\n * Clear out the buffer of performance timing events for webkit browsers.\n * @return {undefined}\n */\nPerformance.prototype.webkitClearResourceTimings = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.webkitNow = function() {};\n', + "externs/w3c_netinfo.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Externs for the Network Information API.\n * @externs\n */\n\n/**\n * @see http://wicg.github.io/netinfo/#-dfn-networkinformation-dfn-interface\n * @constructor\n */\nfunction NetworkInformation() {}\n\n/** @type {ConnectionType} */\nNetworkInformation.prototype.type;\n\n/** @type {EffectiveConnectionType} */\nNetworkInformation.prototype.effectiveType;\n\n/** @type {Megabit} */\nNetworkInformation.prototype.downlinkMax;\n\n/** @type {Megabit} */\nNetworkInformation.prototype.downlink;\n\n/** @type {Millisecond} */\nNetworkInformation.prototype.rtt;\n\n/** @type {?function(Event)} */\nNetworkInformation.prototype.onchange;\n\n/**\n * @typedef {number}\n */\nvar Megabit;\n\n/**\n * @typedef {number}\n */\nvar Millisecond;\n\n/**\n * Enum of:\n * 'bluetooth',\n * 'cellular',\n * 'ethernet',\n * 'mixed',\n * 'none',\n * 'other',\n * 'unknown',\n * 'wifi',\n * 'wimax'\n * @typedef {string}\n */\nvar ConnectionType;\n\n/**\n * Enum of:\n * '2g',\n * '3g',\n * '4g',\n * 'slow-2g'\n * @typedef {string}\n */\nvar EffectiveConnectionType;\n\n/** @type {!NetworkInformation} */\nNavigator.prototype.connection;\n", + "externs/w3c_permissions.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Permissions API.\n * @see https://w3c.github.io/permissions/\n *\n * @externs\n */\n\n\n/**\n * @typedef {{name: PermissionName}}\n * @see https://w3c.github.io/permissions/#permission-descriptor\n */\nvar PermissionDescriptor;\n\n\n/**\n * @typedef {{name: PermissionName, userVisibleOnly: boolean}}\n * @see https://w3c.github.io/permissions/#push\n */\nvar PushPermissionDescriptor;\n\n\n/**\n * @typedef {{name: PermissionName, sysex: boolean}}\n * @see https://w3c.github.io/permissions/#midi\n */\nvar MidiPermissionDescriptor;\n\n\n/**\n * Set of possible values: 'geolocation', 'notifications', 'push', 'midi'.\n * @typedef {string}\n * @see https://w3c.github.io/permissions/#idl-def-PermissionName\n */\nvar PermissionName;\n\n\n/**\n * Set of possible values: 'granted', 'denied', 'prompt'.\n * @typedef {string}\n * @see https://w3c.github.io/permissions/#idl-def-PermissionState\n */\nvar PermissionState;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see https://w3c.github.io/permissions/#status-of-a-permission\n */\nfunction PermissionStatus() {}\n\n/** @type {PermissionState} */\nPermissionStatus.prototype.state;\n\n/**\n * @type {PermissionState}\n * @deprecated, use PermissionStatus.state for newer clients\n */\nPermissionStatus.prototype.status;\n\n/** @type {?function(!Event)} */\nPermissionStatus.prototype.onchange;\n\n/** @override */\nPermissionStatus.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nPermissionStatus.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nPermissionStatus.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * @constructor\n * @see https://w3c.github.io/permissions/#idl-def-permissions\n */\nfunction Permissions() {}\n\n/**\n * @param {PermissionDescriptor} permission The permission to look up\n * @return {!Promise}\n * @see https://w3c.github.io/permissions/#dom-permissions-query\n */\nPermissions.prototype.query = function(permission) {};\n\n\n/** @type {Permissions} */\nNavigator.prototype.permissions;\n", + "externs/w3c_pointer_events.js":'/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Pointer Events specification.\n * Created from\n * http://www.w3.org/TR/pointerevents/\n *\n * @externs\n */\n\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/pointerevents/#the-touch-action-css-property\n */\nCSSProperties.prototype.touchAction;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/pointerevents/#widl-Navigator-pointerEnabled\n */\nNavigator.prototype.pointerEnabled;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/pointerevents/#widl-Navigator-maxTouchPoints\n */\nNavigator.prototype.maxTouchPoints;\n\n\n/**\n * @param {number} pointerId\n * @see https://www.w3.org/TR/pointerevents/#widl-Element-setPointerCapture-void-long-pointerId\n */\nElement.prototype.setPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see https://www.w3.org/TR/pointerevents/#widl-Element-releasePointerCapture-void-long-pointerId\n */\nElement.prototype.releasePointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see https://www.w3.org/TR/pointerevents/#dom-element-haspointercapture\n * @return {boolean}\n */\nElement.prototype.hasPointerCapture = function(pointerId) {};\n\n\n/**\n * @record\n * @extends {MouseEventInit}\n * @see https://www.w3.org/TR/pointerevents/#idl-def-PointerEventInit\n */\nfunction PointerEventInit() {}\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.pointerId;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.width;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.height;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.pressure;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.tiltX;\n\n/** @type {undefined|number} */\nPointerEventInit.prototype.tiltY;\n\n/** @type {undefined|string} */\nPointerEventInit.prototype.pointerType;\n\n/** @type {undefined|boolean} */\nPointerEventInit.prototype.isPrimary;\n\n/**\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {PointerEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/pointerevents/#pointerevent-interface\n */\nfunction PointerEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nPointerEvent.prototype.width;\n\n/** @type {number} */\nPointerEvent.prototype.height;\n\n/** @type {number} */\nPointerEvent.prototype.pressure;\n\n/** @type {number} */\nPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nPointerEvent.prototype.tiltY;\n\n/** @type {string} */\nPointerEvent.prototype.pointerType;\n\n/** @type {boolean} */\nPointerEvent.prototype.isPrimary;\n\n// Microsoft pointerType values\n/** @const {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_TOUCH;\n\n/** @const {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_PEN;\n\n/** @const {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_MOUSE;\n\n/**\n * @see https://w3c.github.io/pointerevents/extension.html\n * @return {!Array}\n */\nPointerEvent.prototype.getCoalescedEvents = function() {};\n\n', +-"externs/w3c_range.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s range specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Interface\n */\nfunction Range() {}\n\n// constants on the constructor\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_START;\n\n// constants repeated on the prototype\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_START;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startParent\n */\nRange.prototype.startContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startOffset\n */\nRange.prototype.startOffset;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endParent\n */\nRange.prototype.endContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endOffset\n */\nRange.prototype.endOffset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-collapsed\n */\nRange.prototype.collapsed;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-commonParent\n */\nRange.prototype.commonAncestorContainer;\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStart\n */\nRange.prototype.setStart = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEnd\n */\nRange.prototype.setEnd = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-setStartBefore\n */\nRange.prototype.setStartBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStartAfter\n */\nRange.prototype.setStartAfter = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndBefore\n */\nRange.prototype.setEndBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndAfter\n */\nRange.prototype.setEndAfter = function(refNode) {};\n\n/**\n * @param {boolean} toStart\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-collapse\n */\nRange.prototype.collapse = function(toStart) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNode\n */\nRange.prototype.selectNode = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNodeContents\n */\nRange.prototype.selectNodeContents = function(refNode) {};\n\n/**\n * @param {number} how\n * @param {Range} sourceRange\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-compareBoundaryPoints\n */\nRange.prototype.compareBoundaryPoints = function(how, sourceRange) {};\n\n/**\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-deleteContents\n */\nRange.prototype.deleteContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-extractContents\n */\nRange.prototype.extractContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-cloneContents\n */\nRange.prototype.cloneContents = function() {};\n\n/**\n * @param {Node} newNode\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-insertNode\n */\nRange.prototype.insertNode = function(newNode) {};\n\n/**\n * @param {Node} newParent\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-surroundContents\n */\nRange.prototype.surroundContents = function(newParent) {};\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-clone\n */\nRange.prototype.cloneRange = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-detach\n */\nRange.prototype.detach = function() {};\n\n// Introduced in DOM Level 2:\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl\n */\nfunction DocumentRange() {}\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-DocumentRange-method-createRange\n */\nDocumentRange.prototype.createRange = function() {};\n', ++"externs/w3c_range.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s range specification.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n * Created from\n * http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Interface\n */\nfunction Range() {}\n\n// constants on the constructor\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.END_TO_START;\n\n// constants repeated on the prototype\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_START;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_END;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_START;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startParent\n */\nRange.prototype.startContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startOffset\n */\nRange.prototype.startOffset;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endParent\n */\nRange.prototype.endContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endOffset\n */\nRange.prototype.endOffset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-collapsed\n */\nRange.prototype.collapsed;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-commonParent\n */\nRange.prototype.commonAncestorContainer;\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStart\n */\nRange.prototype.setStart = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEnd\n */\nRange.prototype.setEnd = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-setStartBefore\n */\nRange.prototype.setStartBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStartAfter\n */\nRange.prototype.setStartAfter = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndBefore\n */\nRange.prototype.setEndBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndAfter\n */\nRange.prototype.setEndAfter = function(refNode) {};\n\n/**\n * @param {boolean} toStart\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-collapse\n */\nRange.prototype.collapse = function(toStart) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNode\n */\nRange.prototype.selectNode = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNodeContents\n */\nRange.prototype.selectNodeContents = function(refNode) {};\n\n/**\n * @param {number} how\n * @param {Range} sourceRange\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-compareBoundaryPoints\n */\nRange.prototype.compareBoundaryPoints = function(how, sourceRange) {};\n\n/**\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-deleteContents\n */\nRange.prototype.deleteContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-extractContents\n */\nRange.prototype.extractContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-cloneContents\n */\nRange.prototype.cloneContents = function() {};\n\n/**\n * @param {Node} newNode\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-insertNode\n */\nRange.prototype.insertNode = function(newNode) {};\n\n/**\n * @param {Node} newParent\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-surroundContents\n */\nRange.prototype.surroundContents = function(newParent) {};\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-clone\n */\nRange.prototype.cloneRange = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-detach\n */\nRange.prototype.detach = function() {};\n\n// Introduced in DOM Level 2:\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl\n */\nfunction DocumentRange() {}\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-DocumentRange-method-createRange\n */\nDocumentRange.prototype.createRange = function() {};\n', + "externs/w3c_referrer_policy.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s referrer policy specification.\n * @see https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-delivery\n * @externs\n */\n\n/** @type {string} */\nHTMLAnchorElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLAreaElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLImageElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLIFrameElement.prototype.referrerPolicy;\n\n/** @type {string} */\nHTMLLinkElement.prototype.referrerPolicy;\n', +-"externs/w3c_rtc.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for components of the WebRTC browser API.\n * @see https://www.w3.org/TR/webrtc/\n * @see https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-19\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API\n * @see https://www.w3.org/TR/mediacapture-streams/\n *\n * @externs\n * @author bemasc@google.com (Benjamin M. Schwartz)\n */\n\n/**\n * @typedef {string}\n * @see {https://www.w3.org/TR/mediacapture-streams/\n * #idl-def-MediaStreamTrackState}\n * In WebIDL this is an enum with values \'live\', \'mute\', and \'ended\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar MediaStreamTrackState;\n\n/**\n * @interface\n */\nfunction SourceInfo() {}\n\n/** @const {string} */\nSourceInfo.prototype.kind;\n\n/** @const {string} */\nSourceInfo.prototype.id;\n\n/** @const {?string} */\nSourceInfo.prototype.label;\n\n/** @const {boolean} */\nSourceInfo.prototype.facing;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/#mediasettingsrange-section\n */\nfunction MediaSettingsRange() {}\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.max;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.min;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.step;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaTrackCapabilities\n * @see https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section\n */\nfunction MediaTrackCapabilities() {}\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.width;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.height;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.frameRate;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.volume;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleSize;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.latency;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.groupId;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.whiteBalanceMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.exposureMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.focusMode;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.exposureCompensation;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.colorTemperature\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.iso\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.brightness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.contrast\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.saturation\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.sharpness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackCapabilities.prototype.torch\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#media-track-settings\n * @see https://w3c.github.io/mediacapture-image/#mediatracksettings-section\n */\nfunction MediaTrackSettings() {}\n\n/** @type {number} */\nMediaTrackSettings.prototype.width;\n\n/** @type {number} */\nMediaTrackSettings.prototype.height;\n\n/** @type {number} */\nMediaTrackSettings.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackSettings.prototype.frameRate;\n\n/** @type {string} */\nMediaTrackSettings.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackSettings.prototype.volume;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleSize;\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.latency;\n\n/** @type {number} */\nMediaTrackSettings.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackSettings.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.groupId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.whiteBalanceMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.exposureMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.focusMode;\n\n/** @type {!Array<{x: number, y: number}>} */\nMediaTrackSettings.prototype.pointsOfInterest;\n\n/** @type {number} */\nMediaTrackSettings.prototype.exposureCompensation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.colorTemperature\n\n/** @type {number} */\nMediaTrackSettings.prototype.iso\n\n/** @type {number} */\nMediaTrackSettings.prototype.brightness\n\n/** @type {number} */\nMediaTrackSettings.prototype.contrast\n\n/** @type {number} */\nMediaTrackSettings.prototype.saturation\n\n/** @type {number} */\nMediaTrackSettings.prototype.sharpness\n\n/** @type {number} */\nMediaTrackSettings.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.torch\n\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-main/#media-track-supported-constraints\n */\nfunction MediaTrackSupportedConstraints() {}\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.width;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.height;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.aspectRatio;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.frameRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.facingMode;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.volume;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleSize;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.echoCancellation;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.autoGainControl;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.noiseSuppression;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.latency;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.channelCount;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.deviceId;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.groupId;\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrack\n */\nfunction MediaStreamTrack() {}\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.kind;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.id;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.label;\n\n/**\n * @type {boolean}\n */\nMediaStreamTrack.prototype.enabled;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.muted;\n\n/**\n * @type {string}\n * @see https://crbug.com/653531\n * @see https://wicg.github.io/mst-content-hint/\n */\nMediaStreamTrack.prototype.contentHint;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.remote;\n\n/**\n * @type {MediaStreamTrackState}\n * Read only.\n */\nMediaStreamTrack.prototype.readyState;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onunmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onended;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onoverconstrained;\n\n/**\n * Applies the specified set of constraints to the track, if any specified; or\n * if no constraints are specified, removes all constraints from the track.\n *\n * @param {MediaTrackConstraints=} constraints Constraints to apply to the\n * track.\n * @return {!Promise} A |Promise| that is resolved when the constraints\n * have been applied, or rejected if there was an error applying the\n * constraints.\n */\nMediaStreamTrack.prototype.applyConstraints = function(constraints) {};\n\n/**\n * @return {!MediaStreamTrack}\n */\nMediaStreamTrack.prototype.clone = function() {};\n\n/** @return {void} */\nMediaStreamTrack.prototype.stop = function() {};\n\n/** @return {!MediaTrackCapabilities} */\nMediaStreamTrack.prototype.getCapabilities = function() {};\n\n/** @return {!MediaTrackConstraints} */\nMediaStreamTrack.prototype.getConstraints = function() {};\n\n/** @return {!MediaTrackSettings} */\nMediaStreamTrack.prototype.getSettings = function() {};\n\n/**\n * @typedef {{track: MediaStreamTrack}}\n */\nvar MediaStreamTrackEventInit;\n\n\n/**\n * @param {string} type\n * @param {!MediaStreamTrackEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrackevent\n */\nfunction MediaStreamTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nMediaStreamTrackEvent.prototype.track;\n\n/**\n * @param {!MediaStream|!Array=} streamOrTracks\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastream\n */\nfunction MediaStream(streamOrTracks) {}\n\n/**\n * @override\n */\nMediaStream.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaStream.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaStream.prototype.dispatchEvent = function(evt) {};\n\n/**\n * TODO(bemasc): Remove this property.\n * @deprecated\n * @const {string}\n */\nMediaStream.prototype.label;\n\n/**\n * @const {string}\n */\nMediaStream.prototype.id;\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getAudioTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getVideoTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getTracks = function() {};\n\n/**\n * @param {string} trackId\n * @return {MediaStreamTrack}\n */\nMediaStream.prototype.getTrackById = function(trackId) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.addTrack = function(track) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.removeTrack = function(track) {};\n\n/**\n * @return {!MediaStream}\n */\nMediaStream.prototype.clone = function() {};\n\n/**\n * @deprecated\n * @type {boolean}\n */\nMediaStream.prototype.ended;\n\n/**\n * @deprecated\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onended;\n\n/**\n * @type {boolean}\n */\nMediaStream.prototype.active;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onactive;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.oninactive;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onaddtrack;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onremovetrack;\n\n/**\n * @deprecated\n * TODO(bemasc): Remove this method once browsers have updated to\n * MediaStreamTrack.stop().\n * @return {undefined}\n */\nMediaStream.prototype.stop = function() {};\n\n/**\n * @typedef {{tone: string}}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeeventinit\n */\nvar RTCDTMFToneChangeEventInit;\n\n\n/**\n * @param {string} type\n * @param {!RTCDTMFToneChangeEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeevent\n */\nfunction RTCDTMFToneChangeEvent(type, eventInitDict) {}\n\n/**\n * @const {string}\n */\nRTCDTMFToneChangeEvent.prototype.tone;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcdtmfsender\n */\nfunction RTCDTMFSender() {}\n\n/**\n * @param {string} tones\n * @param {number=} opt_duration\n * @param {number=} opt_interToneGap\n */\nRTCDTMFSender.prototype.insertDTMF =\n function(tones, opt_duration, opt_interToneGap) {};\n\n/**\n * @type {?boolean}\n */\nRTCDTMFSender.prototype.canInsertDTMF;\n\n/**\n * @type {?function(!RTCDTMFToneChangeEvent)}\n */\nRTCDTMFSender.prototype.ontonechange;\n\n/**\n * @const {string}\n */\nRTCDTMFSender.prototype.toneBuffer;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpsender-interface\n */\nfunction RTCRtpSender() {}\n\n/**\n * @const {!RTCDTMFSender}\n */\nRTCRtpSender.prototype.dtmf;\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpSender.prototype.track;\n\n/**\n * @param {?MediaStreamTrack} track\n * @return {!Promise}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsender\n */\nRTCRtpSender.prototype.replaceTrack = function(track) {};\n\n\n/**\n * @return {!RTCRtpSendParameters}\n */\nRTCRtpSender.prototype.getParameters = function() {};\n\n\n/**\n * @param {!RTCRtpSendParameters} params\n * @return {!Promise}\n */\nRTCRtpSender.prototype.setParameters = function(params) {};\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsendparameters\n */\nfunction RTCRtpSendParameters() {}\n\n/**\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.transactionId;\n\n/**\n * @type {!Array}\n */\nRTCRtpSendParameters.prototype.encodings;\n\n/**\n * Possible string values are "maintain-framerate", "maintain-resolution", and\n * "balanced".\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.degradationPreference;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpcontributingsource\n */\nfunction RTCRtpContributingSource() {}\n\n/**\n * @type {?number}\n */\nRTCRtpContributingSource.prototype.source;\n\n/**\n * @type {?Date|number}\n */\nRTCRtpContributingSource.prototype.timestamp;\n\n/**\n * @type {number|undefined}\n */\nRTCRtpContributingSource.prototype.audioLevel;\n\n/**\n * This is a relatively new field and browsers may not yet be compliant to the\n * spec.\n * @type {?number}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcrtpcontributingsource-rtptimestamp\n */\nRTCRtpContributingSource.prototype.rtpTimestamp;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpreceiver-interface\n */\nfunction RTCRtpReceiver() {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpReceiver.prototype.track;\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getContributingSources = function() {};\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getSynchronizationSources = function() {};\n\n/**\n * Chrome extension to control jitter buffer delay.\n * @see https://github.com/henbos/webrtc-timing/issues/1\n * @type {?number|undefined}\n */\nRTCRtpReceiver.prototype.jitterBufferDelayHint;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverinit\n * @record\n */\nfunction RTCRtpTransceiverInit() {}\n\n/**\n * The direction of the `RTCRtpTransceiver`. Defaults to "sendrecv".\n * @type {?RTCRtpTransceiverDirection|undefined}\n */\nRTCRtpTransceiverInit.prototype.direction;\n\n/**\n * The streams to add to the tranceiver\'s sender.\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.streams;\n\n/**\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.sendEncodings;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters\n * @record\n */\nfunction RTCRtpEncodingParameters() {}\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.codecPayloadType;\n\n/**\n * Possible values are "disabled" and "enabled".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.dtx;\n\n/**\n * @type {?boolean|undefined}\n */\nRTCRtpEncodingParameters.prototype.active;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.priority;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @see https://w3c.github.io/webrtc-dscp-exp/\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.networkPriority;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.ptime;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxBitrate;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxFramerate;\n\n/**\n * @type {?string|number}\n */\nRTCRtpEncodingParameters.prototype.rid;\n\n/**\n * @type {?number|number}\n */\nRTCRtpEncodingParameters.prototype.scaleResolutionDownBy;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtptransceiver-interface\n */\nfunction RTCRtpTransceiver() {}\n\n/**\n * @const {?string}\n */\nRTCRtpTransceiver.prototype.mid;\n\n/**\n * @const {boolean}\n */\nRTCRtpTransceiver.prototype.stopped;\n\n/**\n * @type {!RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.direction;\n\n/**\n * @const {?RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.currentDirection;\n\n/**\n * @param {!RTCRtpTransceiverDirection} direction\n */\nRTCRtpTransceiver.prototype.setDirection = function(direction) {};\n\n/**\n */\nRTCRtpTransceiver.prototype.stop = function() {};\n\n/**\n * @const {?RTCRtpSender}\n */\nRTCRtpTransceiver.prototype.sender;\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCRtpTransceiver.prototype.receiver;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-longrange\n * @record\n */\nfunction LongRange() {}\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.min;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-doublerange\n * @record\n */\nfunction DoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.min;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainbooleanparameters\n * @record\n */\nfunction ConstrainBooleanParameters() {}\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.exact;\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomstringparameters\n * @record\n */\nfunction ConstrainDOMStringParameters() {}\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.exact;\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindoublerange\n * @record\n * @extends {DoubleRange}\n */\nfunction ConstrainDoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.ideal;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlongrange\n * @record\n * @extends {LongRange}\n */\nfunction ConstrainLongRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainboolean\n * @typedef {boolean|ConstrainBooleanParameters}\n */\nvar ConstrainBoolean;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomString\n * @typedef {string|Array|ConstrainDOMStringParameters}\n */\nvar ConstrainDOMString;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindouble\n * @typedef {number|ConstrainDoubleRange}\n */\nvar ConstrainDouble;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlong\n * @typedef {number|ConstrainLongRange}\n */\nvar ConstrainLong;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-mediatrackconstraintset\n * @record\n * @private\n */\nfunction MediaTrackConstraintSet() {}\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.autoGainControl;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.aspectRatio;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.channelCount;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.deviceId;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.echoCancellation;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.facingMode;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.frameRate;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.groupId;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.height;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.latency;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.noiseSuppression;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleRate;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleSize;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.volume;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.width;\n\n\n/**\n * @record\n * @extends {MediaTrackConstraintSet}\n */\nfunction MediaTrackConstraints() {}\n\n/**\n * @type {Array|undefined}\n */\nMediaTrackConstraints.prototype.advanced;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#media-track-constraints\n * @record\n */\nfunction MediaStreamConstraints() {}\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.audio;\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.video;\n\n/**\n * @see {http://dev.w3.org/2011/webrtc/editor/getusermedia.html#\n * navigatorusermediaerror-and-navigatorusermediaerrorcallback}\n * @interface\n */\nfunction NavigatorUserMediaError() {}\n\n/**\n * @const {number}\n * @deprecated Removed from the standard and some browsers.\n */\nNavigatorUserMediaError.prototype.PERMISSION_DENIED;\n\n/**\n * @type {number}\n * @deprecated Removed from the standard and some browsers.\n * Read only.\n */\nNavigatorUserMediaError.prototype.code;\n\n/**\n * @type {string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.name;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.message;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.constraintName;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction MediaStreamEvent(type, eventInitDict) {}\n\n/**\n * @const {?MediaStream}\n */\nMediaStreamEvent.prototype.stream;\n\n/**\n * @record\n * @see https://www.w3.org/TR/mediastream-recording/#dictdef-mediarecorderoptions\n */\nfunction MediaRecorderOptions() {}\n\n/** @type {(string|undefined)} */\nMediaRecorderOptions.prototype.mimeType\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.audioBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.videoBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.bitsPerSecond\n\n/**\n * @see https://www.w3.org/TR/mediastream-recording/#mediarecorder-api\n * @param {!MediaStream} stream\n * @param {MediaRecorderOptions=} options\n * @implements {EventTarget}\n * @constructor\n */\nfunction MediaRecorder(stream, options) {}\n\n/**\n * @override\n */\nMediaRecorder.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaRecorder.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaRecorder.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MediaStream}\n */\nMediaRecorder.prototype.stream;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.mimeType;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.state;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstart;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstop;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.ondataavailable;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onpause;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onresume;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onerror;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.videoBitsPerSecond;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.audioBitsPerSecond;\n\n/**\n * @param {number=} timeslice\n */\nMediaRecorder.prototype.start = function(timeslice) {};\n\n/** @return {void} */\nMediaRecorder.prototype.stop = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.pause = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.resume = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.requestData = function() {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaRecorder.isTypeSupported = function(type) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {{data: !Blob, timecode: (number|undefined)}} eventInitDict\n * @see https://www.w3.org/TR/mediastream-recording/#blobevent-section\n */\nfunction BlobEvent(type, eventInitDict) {}\n\n/** @type {!Blob} */\nBlobEvent.prototype.data;\n\n/** @type {number} */\nBlobEvent.prototype.timecode;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photosettings-section\n */\nfunction PhotoSettings() {}\n\n/**\n * @type {string}\n */\nPhotoSettings.prototype.fillLightMode;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageHeight;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageWidth;\n\n/**\n * @type {boolean}\n */\nPhotoSettings.prototype.redEyeReduction;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photocapabilities-section\n */\nfunction PhotoCapabilities() {}\n\n/**\n * @const {string}\n */\nPhotoCapabilities.prototype.redEyeReduction;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageHeight;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageWidth;\n\n/**\n * @const {!Array}\n */\nPhotoCapabilities.prototype.fillLightMode;\n\n/**\n * @see https://w3c.github.io/mediacapture-image/\n * @param {!MediaStreamTrack} videoTrack\n * @constructor\n */\nfunction ImageCapture(videoTrack) {}\n\n/**\n * @param {!PhotoSettings=} photoSettings\n * @return {!Promise}\n */\nImageCapture.prototype.takePhoto = function(photoSettings) {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.getPhotoCapabilities = function() {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.grabFrame = function() {};\n\n/**\n * @const {!MediaStreamTrack}\n */\nImageCapture.prototype.track;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#rtctrackevent\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCTrackEvent.prototype.receiver;\n\n/**\n * @const {?MediaStreamTrack}\n */\nRTCTrackEvent.prototype.track;\n\n/**\n * @const {?Array}\n */\nRTCTrackEvent.prototype.streams;\n\n/**\n * @const {?RTCRtpTransceiver}\n */\nRTCTrackEvent.prototype.transceiver;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaDeviceKind\n * In WebIDL this is an enum with values \'audioinput\', \'audiooutput\', and\n * \'videoinput\', but there is no mechanism in Closure for describing a\n * specialization of the string type.\n */\nvar MediaDeviceKind;\n\n/**\n * Possible values are "sendrecv", "sendonly", "recvonly", and "inactive".\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverdirection\n */\nvar RTCRtpTransceiverDirection;\n\n/**\n * @interface\n */\nfunction MediaDeviceInfo() {}\n\n/** @const {string} */\nMediaDeviceInfo.prototype.deviceId;\n\n/** @const {!MediaDeviceKind} */\nMediaDeviceInfo.prototype.kind;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.label;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.groupId;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediadevices\n */\nfunction MediaDevices() {}\n\n/**\n * @return {!Promise>}\n */\nMediaDevices.prototype.enumerateDevices = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n * @param {!MediaStreamConstraints} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getUserMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia\n * @param {!MediaStreamConstraints=} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getDisplayMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-main/#dom-mediadevices-getsupportedconstraints\n * @return {!MediaTrackSupportedConstraints}\n */\nMediaDevices.prototype.getSupportedConstraints = function() {}\n\n/** @const {!MediaDevices} */\nNavigator.prototype.mediaDevices;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#rtcsdptype\n * In WebIDL this is an enum with values \'offer\', \'pranswer\', and \'answer\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar RTCSdpType;\n\n/**\n * @param {!Object=} descriptionInitDict The RTCSessionDescriptionInit\n * dictionary. This optional argument may have type\n * {type:RTCSdpType, sdp:string}, but neither of these keys are required to be\n * present, and other keys are ignored, so the closest Closure type is Object.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcsessiondescription-class\n */\nfunction RTCSessionDescription(descriptionInitDict) {}\n\n/**\n * @type {?RTCSdpType}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-type\n */\nRTCSessionDescription.prototype.type;\n\n/**\n * @type {?string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-sdp\n */\nRTCSessionDescription.prototype.sdp;\n\n/**\n * TODO(bemasc): Remove this definition once it is removed from the browser.\n * @param {string} label The label index (audio/video/data -> 0,1,2)\n * @param {string} sdp The ICE candidate in SDP text form\n * @constructor\n */\nfunction IceCandidate(label, sdp) {}\n\n/**\n * @return {string}\n */\nIceCandidate.prototype.toSdp = function() {};\n\n/**\n * @type {?string}\n */\nIceCandidate.prototype.label;\n\n/** @record */\nfunction RTCIceCandidateInit() {};\n\n/** @type {?string|undefined} */\nRTCIceCandidateInit.prototype.candidate;\n\n/** @type {(?string|undefined)} */\nRTCIceCandidateInit.prototype.sdpMid;\n\n/** @type {(?number|undefined)} */\nRTCIceCandidateInit.prototype.sdpMLineIndex;\n\n/** @type {(string|undefined)} */\nRTCIceCandidateInit.prototype.usernameFragment;\n\n/**\n * @param {!RTCIceCandidateInit=} candidateInitDict The RTCIceCandidateInit dictionary.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcicecandidate-interface\n */\nfunction RTCIceCandidate(candidateInitDict) {}\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.candidate;\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.sdpMid;\n\n/**\n * @type {?number}\n */\nRTCIceCandidate.prototype.sdpMLineIndex;\n\n/**\n * @typedef {{urls: string}|{urls: !Array}}\n * @private\n * @see https://www.w3.org/TR/webrtc/#rtciceserver-dictionary\n * This dictionary type also has an optional key {credential: ?string}.\n */\nvar RTCIceServerRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCIceServerInterface_() {}\n\n/**\n * @type {string|!Array}\n */\nRTCIceServerInterface_.prototype.urls;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.username;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.credential;\n\n/**\n * This type, and several below it, are constructed as unions between records\n *\n * @typedef {RTCIceServerRecord_|RTCIceServerInterface_}\n * @private\n */\nvar RTCIceServer;\n\n/**\n * @typedef {{\n * iceServers: !Array,\n * sdpSemantics: (string|undefined)\n * }}\n * @private\n */\nvar RTCConfigurationRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCConfigurationInterface_() {}\n\n/**\n * @type {!Array}\n */\nRTCConfigurationInterface_.prototype.iceServers;\n\n/**\n * Allows specifying the SDP semantics. Valid values are "plan-b" and\n * "unified-plan".\n *\n * @see {@link https://webrtc.org/web-apis/chrome/unified-plan/}\n * @type {string|undefined}\n */\nRTCConfigurationInterface_.prototype.sdpSemantics;\n\n/**\n * @typedef {RTCConfigurationRecord_|RTCConfigurationInterface_}\n */\nvar RTCConfiguration;\n\n/**\n * @typedef {function(!RTCSessionDescription)}\n */\nvar RTCSessionDescriptionCallback;\n\n/**\n * @typedef {function(string)}\n */\nvar RTCPeerConnectionErrorCallback;\n\n/**\n * @typedef {function()}\n */\nvar RTCVoidCallback;\n\n/**\n * @typedef {string}\n */\nvar RTCSignalingState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceConnectionState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceGatheringState;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCPeerConnectionIceEvent(type, eventInitDict) {}\n\n/**\n * @const {RTCIceCandidate}\n */\nRTCPeerConnectionIceEvent.prototype.candidate;\n\n// Note: The specification of RTCStats types is still under development.\n// Declarations here will be updated and removed to follow the development of\n// modern browsers, breaking compatibility with older versions as they become\n// obsolete.\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcstats\n * @interface\n */\nfunction RTCStats() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStats.prototype.timestamp;\n\n/**\n * https://www.w3.org/TR/webrtc-stats/#rtcstatstype-str*\n * @const {string}\n */\nRTCStats.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStats.prototype.id;\n\n/**\n * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcrtpstreamstats\n * @interface\n * @extends {RTCStats}\n */\nfunction RTCStreamStats() {}\n\n/** @const {number} */\nRTCStreamStats.prototype.ssrc;\n\n/** @const {string} */\nRTCStreamStats.prototype.kind;\n\n/** @const {string} */\nRTCStreamStats.prototype.transportId;\n\n/** @const {string} */\nRTCStreamStats.prototype.codecId;\n\n/** @const {number} */\nRTCStreamStats.prototype.firCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.pliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.nackCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.sliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.qpSum;\n\n/**\n * @interface\n */\nfunction RTCStatsReport() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStatsReport.prototype.timestamp;\n\n/**\n * @return {!Array}\n */\nRTCStatsReport.prototype.names = function() {};\n\n/**\n * @param {string} name\n * @return {string}\n */\nRTCStatsReport.prototype.stat = function(name) {};\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.local;\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.remote;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.id;\n\n// Note: Below are Map like methods supported by WebRTC statistics\n// specification-compliant RTCStatsReport. Currently only implemented by\n// Mozilla.\n// See https://www.w3.org/TR/webrtc/#rtcstatsreport-object for definition.\n/**\n * @param {function(this:SCOPE, !RTCStats, string, MAP)} callback\n * @param {SCOPE=} opt_thisObj The value of "this" inside callback function.\n * @this {MAP}\n * @template MAP,SCOPE\n */\nRTCStatsReport.prototype.forEach = function(callback, opt_thisObj) {};\n\n/**\n * @param {string} key\n * @return {!IteratorIterable>}\n */\nRTCStatsReport.prototype.entries = function(key) {};\n\n/**\n * @param {string} key\n * @return {!RTCStats}\n */\nRTCStatsReport.prototype.get = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.values = function() {};\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nRTCStatsReport.prototype.has = function(key) {};\n\n/**\n * @const {number}\n */\nRTCStatsReport.prototype.size;\n\n/**\n * @return {!Iterator>}\n */\nRTCStatsReport.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * TODO(bemasc): Remove this type once it is no longer in use. It has already\n * been removed from the specification.\n * @typedef {RTCStatsReport}\n * @deprecated\n */\nvar RTCStatsElement;\n\n/**\n * @interface\n */\nfunction RTCStatsResponse() {}\n\n/**\n * @return {!Array}\n */\nRTCStatsResponse.prototype.result = function() {};\n\n/**\n * @typedef {function(!RTCStatsResponse, MediaStreamTrack=)}\n */\nvar RTCStatsCallback;\n\n/**\n * This type is not yet standardized, so the properties here only represent\n * the current capabilities of libjingle (and hence Chromium).\n * TODO(bemasc): Add a link to the relevant standard once MediaConstraint has a\n * standard definition.\n *\n * @interface\n * @private\n */\nfunction MediaConstraintSetInterface_() {}\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveAudio;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveVideo;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.DtlsSrtpKeyAgreement;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.RtpDataChannels;\n\n/**\n * TODO(bemasc): Make this type public once it is defined in a standard.\n *\n * @typedef {Object|MediaConstraintSetInterface_}\n * @private\n */\nvar MediaConstraintSet_;\n\n/**\n * @interface\n * @private\n */\nfunction MediaConstraintsInterface_() {}\n\n/**\n * @type {?MediaConstraintSet_}\n */\nMediaConstraintsInterface_.prototype.mandatory;\n\n/**\n * @type {?Array}\n */\nMediaConstraintsInterface_.prototype.optional;\n\n/**\n * This type is used extensively in\n * {@see http://dev.w3.org/2011/webrtc/editor/webrtc.html} but is not yet\n * defined.\n *\n * @typedef {Object|MediaConstraintsInterface_}\n */\nvar MediaConstraints;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcdatachannel\n */\nfunction RTCDataChannel() {}\n\n/**\n * @const {string}\n */\nRTCDataChannel.prototype.label;\n\n/**\n * @const {boolean}\n */\nRTCDataChannel.prototype.reliable;\n\n/**\n * An enumerated string type (RTCDataChannelState) with values:\n * "connecting", "open", "closing", and "closed".\n * @type {string}\n * Read only.\n */\nRTCDataChannel.prototype.readyState;\n\n/**\n * @type {number}\n * Read only.\n */\nRTCDataChannel.prototype.bufferedAmount;\n\n/**\n * @type {number}\n */\nRTCDataChannel.prototype.bufferedAmountLowThreshold;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onopen;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onerror;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onclose;\n\nRTCDataChannel.prototype.close = function() {};\n\n/**\n * @type {?function(!MessageEvent<*>)}\n */\nRTCDataChannel.prototype.onmessage;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onbufferedamountlow;\n\n/**\n * @type {string}\n */\nRTCDataChannel.prototype.binaryType;\n\n/**\n * @param {string|!Blob|!ArrayBuffer|!ArrayBufferView} data\n * @return {undefined}\n */\nRTCDataChannel.prototype.send = function(data) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @private\n */\nfunction RTCDataChannelEvent() {}\n\n/**\n * @type {!RTCDataChannel}\n * Read only.\n */\nRTCDataChannelEvent.prototype.channel;\n\n/**\n * @typedef {{reliable: boolean}}\n */\nvar RTCDataChannelInitRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCDataChannelInitInterface_() {}\n\n/**\n * @type {boolean}\n */\nRTCDataChannelInitInterface_.prototype.reliable;\n\n/**\n * @typedef {{\n * ordered: (boolean|undefined),\n * maxPacketLifeTime: (number|undefined),\n * maxRetransmits: (number|undefined),\n * protocol: (string|undefined),\n * negotiated: (boolean|undefined),\n * id: (number|undefined),\n * priority: (string|undefined),\n * }}\n * see https://www.w3.org/TR/webrtc/#dom-rtcdatachannelinit for documentation\n * Type inconsistencies due to Closure limitations:\n * maxPacketLifeTime should be UnsignedShort\n * maxRetransmits should be UnsignedShort\n * protocol should be USVString\n * id should be UnsignedShort\n * In WebIDL priority is an enum with values \'very-low\', \'low\',\n * \'medium\' and \'high\', but there is no mechanism in Closure for describing\n * a specialization of the string type.\n */\nvar RTCDataChannelInitDictionary_;\n\n/**\n * @typedef {RTCDataChannelInitInterface_|RTCDataChannelInitRecord_|RTCDataChannelInitDictionary_}\n */\nvar RTCDataChannelInit;\n\n/**\n * @typedef {{expires: number}}\n */\nvar RTCCertificate;\n\n/**\n * @param {RTCConfiguration} configuration\n * @param {!MediaConstraints=} constraints\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/webrtc/#interface-definition\n */\nfunction RTCPeerConnection(configuration, constraints) {}\n\n/**\n * @param {Object} keygenAlgorithm\n * @return {Promise}\n */\nRTCPeerConnection.generateCertificate = function (keygenAlgorithm) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.removeEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nRTCPeerConnection.prototype.dispatchEvent = function(evt) {};\n\n\n// NB: Until closure annotations support overloading, many of the following\n// functions take odd unions of parameter types. This is to support the various\n// api differences between browsers. Generally, returning a promise means you\n// don\'t take callback function parameters and draw any further parameters\n// forward, and vice versa.\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createOffer = function(successCallbackOrConstraints,\n errorCallback, constraints) {};\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createAnswer =\n function(successCallbackOrConstraints, errorCallback, constraints) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setLocalDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setRemoteDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.localDescription;\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.remoteDescription;\n\n/**\n * @type {RTCSignalingState}\n * Read only.\n */\nRTCPeerConnection.prototype.signalingState;\n\n/**\n * @param {?RTCConfiguration=} configuration\n * @param {?MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.updateIce = function(configuration, constraints) {};\n\n/**\n * Void in Chrome for now, a promise that you can then/catch in Firefox.\n * @param {!RTCIceCandidate} candidate\n * @param {!RTCVoidCallback=} successCallback\n * @param {function(DOMException)=} errorCallback\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.addIceCandidate = function(candidate, successCallback, errorCallback) {};\n\n/**\n * @type {!RTCIceGatheringState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceGatheringState;\n\n/**\n * @type {!RTCIceConnectionState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceConnectionState;\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getLocalStreams = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getRemoteStreams = function() {};\n\n/**\n * @param {string} streamId\n * @return {MediaStream}\n */\nRTCPeerConnection.prototype.getStreamById = function(streamId) {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getSenders = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getReceivers = function() {};\n\n/**\n * @param {?string} label\n * @param {RTCDataChannelInit=} dataChannelDict\n * @return {!RTCDataChannel}\n */\nRTCPeerConnection.prototype.createDataChannel =\n function(label, dataChannelDict) {};\n/**\n * @param {!MediaStream} stream\n * @param {!MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.addStream = function(stream, constraints) {};\n\n/**\n * @param {!MediaStream} stream\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeStream = function(stream) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @param {!MediaStream} stream\n * @param {...MediaStream} var_args Additional streams.\n * @return {!RTCRtpSender}\n */\nRTCPeerConnection.prototype.addTrack = function(track, stream, var_args) {};\n\n/**\n * @param {!MediaStreamTrack|string} trackOrKind\n * @param {?RTCRtpTransceiverInit=} init\n * @return {!RTCRtpTransceiver}\n */\nRTCPeerConnection.prototype.addTransceiver = function(trackOrKind, init) {};\n\n/**\n * Returns the list of transceivers are currently attached to this peer.\n *\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getTransceivers = function() {};\n\n/**\n * @return {!RTCConfiguration}\n */\nRTCPeerConnection.prototype.getConfiguration = function() {};\n\n/**\n * @param {!RTCConfiguration} configuration\n * @return {undefined}\n */\nRTCPeerConnection.prototype.setConfiguration = function(configuration) {};\n\n/**\n * @param {!RTCRtpSender} sender\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeTrack = function(sender) {};\n\n// TODO(bemasc): Add identity provider stuff once implementations exist\n\n// TODO(rjogrady): Per w3c spec, getStats() should always return a Promise.\n// Remove RTCStatsReport from the return value once Firefox supports that.\n/**\n * Firefox\' getstats is synchronous and returns a much simpler\n * {!RTCStatsReport} Map-like object.\n * @param {!RTCStatsCallback=} successCallback\n * @param {MediaStreamTrack=} selector\n * @return {undefined|!RTCStatsReport|!Promise}\n */\nRTCPeerConnection.prototype.getStats = function(successCallback, selector) {};\n\nRTCPeerConnection.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onnegotiationneeded;\n\n/**\n * @type {?function(!RTCPeerConnectionIceEvent)}\n */\nRTCPeerConnection.prototype.onicecandidate;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onicegatheringstatechange;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onsignalingstatechange;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onaddstream;\n\n/**\n * @type {?function(!RTCTrackEvent)}\n */\nRTCPeerConnection.prototype.ontrack;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onremovestream;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.oniceconnectionstatechange;\n\n/**\n * @type {?function(!RTCDataChannelEvent)}\n */\nRTCPeerConnection.prototype.ondatachannel;\n', ++"externs/w3c_rtc.js":'/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for components of the WebRTC browser API.\n * @see https://www.w3.org/TR/webrtc/\n * @see https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-19\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/WebRTC_API\n * @see https://www.w3.org/TR/mediacapture-streams/\n *\n * @externs\n * @author bemasc@9oo91e.qjz9zk (Benjamin M. Schwartz)\n */\n\n/**\n * @typedef {string}\n * @see {https://www.w3.org/TR/mediacapture-streams/\n * #idl-def-MediaStreamTrackState}\n * In WebIDL this is an enum with values \'live\', \'mute\', and \'ended\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar MediaStreamTrackState;\n\n/**\n * @interface\n */\nfunction SourceInfo() {}\n\n/** @const {string} */\nSourceInfo.prototype.kind;\n\n/** @const {string} */\nSourceInfo.prototype.id;\n\n/** @const {?string} */\nSourceInfo.prototype.label;\n\n/** @const {boolean} */\nSourceInfo.prototype.facing;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/#mediasettingsrange-section\n */\nfunction MediaSettingsRange() {}\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.max;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.min;\n\n/**\n * @const {number}\n */\nMediaSettingsRange.prototype.step;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaTrackCapabilities\n * @see https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section\n */\nfunction MediaTrackCapabilities() {}\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.width;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.height;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.frameRate;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.volume;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.sampleSize;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.latency;\n\n/** @type {number} */\nMediaTrackCapabilities.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackCapabilities.prototype.groupId;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.whiteBalanceMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.exposureMode;\n\n/** @type {!Array} */\nMediaTrackCapabilities.prototype.focusMode;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.exposureCompensation;\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.colorTemperature\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.iso\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.brightness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.contrast\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.saturation\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.sharpness\n\n/** @type {!MediaSettingsRange} */\nMediaTrackCapabilities.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackCapabilities.prototype.torch\n\n/**\n * @interface\n * @see https://www.w3.org/TR/mediacapture-streams/#media-track-settings\n * @see https://w3c.github.io/mediacapture-image/#mediatracksettings-section\n */\nfunction MediaTrackSettings() {}\n\n/** @type {number} */\nMediaTrackSettings.prototype.width;\n\n/** @type {number} */\nMediaTrackSettings.prototype.height;\n\n/** @type {number} */\nMediaTrackSettings.prototype.aspectRatio;\n\n/** @type {number} */\nMediaTrackSettings.prototype.frameRate;\n\n/** @type {string} */\nMediaTrackSettings.prototype.facingMode;\n\n/** @type {number} */\nMediaTrackSettings.prototype.volume;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleRate;\n\n/** @type {number} */\nMediaTrackSettings.prototype.sampleSize;\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.echoCancellation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.latency;\n\n/** @type {number} */\nMediaTrackSettings.prototype.channelCount;\n\n/** @type {string} */\nMediaTrackSettings.prototype.deviceId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.groupId;\n\n/** @type {string} */\nMediaTrackSettings.prototype.whiteBalanceMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.exposureMode;\n\n/** @type {string} */\nMediaTrackSettings.prototype.focusMode;\n\n/** @type {!Array<{x: number, y: number}>} */\nMediaTrackSettings.prototype.pointsOfInterest;\n\n/** @type {number} */\nMediaTrackSettings.prototype.exposureCompensation;\n\n/** @type {number} */\nMediaTrackSettings.prototype.colorTemperature\n\n/** @type {number} */\nMediaTrackSettings.prototype.iso\n\n/** @type {number} */\nMediaTrackSettings.prototype.brightness\n\n/** @type {number} */\nMediaTrackSettings.prototype.contrast\n\n/** @type {number} */\nMediaTrackSettings.prototype.saturation\n\n/** @type {number} */\nMediaTrackSettings.prototype.sharpness\n\n/** @type {number} */\nMediaTrackSettings.prototype.zoom\n\n/** @type {boolean} */\nMediaTrackSettings.prototype.torch\n\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-main/#media-track-supported-constraints\n */\nfunction MediaTrackSupportedConstraints() {}\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.width;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.height;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.aspectRatio;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.frameRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.facingMode;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.volume;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleRate;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.sampleSize;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.echoCancellation;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.autoGainControl;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.noiseSuppression;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.latency;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.channelCount;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.deviceId;\n\n/** @type {boolean|undefined} */\nMediaTrackSupportedConstraints.prototype.groupId;\n\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrack\n */\nfunction MediaStreamTrack() {}\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.kind;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.id;\n\n/**\n * @const {string}\n */\nMediaStreamTrack.prototype.label;\n\n/**\n * @type {boolean}\n */\nMediaStreamTrack.prototype.enabled;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.muted;\n\n/**\n * @type {string}\n * @see https://crbug.com/653531\n * @see https://wicg.github.io/mst-content-hint/\n */\nMediaStreamTrack.prototype.contentHint;\n\n/**\n * @const {boolean}\n */\nMediaStreamTrack.prototype.remote;\n\n/**\n * @type {MediaStreamTrackState}\n * Read only.\n */\nMediaStreamTrack.prototype.readyState;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onunmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onended;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onoverconstrained;\n\n/**\n * Applies the specified set of constraints to the track, if any specified; or\n * if no constraints are specified, removes all constraints from the track.\n *\n * @param {MediaTrackConstraints=} constraints Constraints to apply to the\n * track.\n * @return {!Promise} A |Promise| that is resolved when the constraints\n * have been applied, or rejected if there was an error applying the\n * constraints.\n */\nMediaStreamTrack.prototype.applyConstraints = function(constraints) {};\n\n/**\n * @return {!MediaStreamTrack}\n */\nMediaStreamTrack.prototype.clone = function() {};\n\n/** @return {void} */\nMediaStreamTrack.prototype.stop = function() {};\n\n/** @return {!MediaTrackCapabilities} */\nMediaStreamTrack.prototype.getCapabilities = function() {};\n\n/** @return {!MediaTrackConstraints} */\nMediaStreamTrack.prototype.getConstraints = function() {};\n\n/** @return {!MediaTrackSettings} */\nMediaStreamTrack.prototype.getSettings = function() {};\n\n/**\n * @typedef {{track: MediaStreamTrack}}\n */\nvar MediaStreamTrackEventInit;\n\n\n/**\n * @param {string} type\n * @param {!MediaStreamTrackEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastreamtrackevent\n */\nfunction MediaStreamTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nMediaStreamTrackEvent.prototype.track;\n\n/**\n * @param {!MediaStream|!Array=} streamOrTracks\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediastream\n */\nfunction MediaStream(streamOrTracks) {}\n\n/**\n * @override\n */\nMediaStream.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaStream.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaStream.prototype.dispatchEvent = function(evt) {};\n\n/**\n * TODO(bemasc): Remove this property.\n * @deprecated\n * @const {string}\n */\nMediaStream.prototype.label;\n\n/**\n * @const {string}\n */\nMediaStream.prototype.id;\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getAudioTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getVideoTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getTracks = function() {};\n\n/**\n * @param {string} trackId\n * @return {MediaStreamTrack}\n */\nMediaStream.prototype.getTrackById = function(trackId) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.addTrack = function(track) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.removeTrack = function(track) {};\n\n/**\n * @return {!MediaStream}\n */\nMediaStream.prototype.clone = function() {};\n\n/**\n * @deprecated\n * @type {boolean}\n */\nMediaStream.prototype.ended;\n\n/**\n * @deprecated\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onended;\n\n/**\n * @type {boolean}\n */\nMediaStream.prototype.active;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onactive;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.oninactive;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onaddtrack;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onremovetrack;\n\n/**\n * @deprecated\n * TODO(bemasc): Remove this method once browsers have updated to\n * MediaStreamTrack.stop().\n * @return {undefined}\n */\nMediaStream.prototype.stop = function() {};\n\n/**\n * @typedef {{tone: string}}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeeventinit\n */\nvar RTCDTMFToneChangeEventInit;\n\n\n/**\n * @param {string} type\n * @param {!RTCDTMFToneChangeEventInit} eventInitDict\n * @constructor\n * @extends {Event}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcdtmftonechangeevent\n */\nfunction RTCDTMFToneChangeEvent(type, eventInitDict) {}\n\n/**\n * @const {string}\n */\nRTCDTMFToneChangeEvent.prototype.tone;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcdtmfsender\n */\nfunction RTCDTMFSender() {}\n\n/**\n * @param {string} tones\n * @param {number=} opt_duration\n * @param {number=} opt_interToneGap\n */\nRTCDTMFSender.prototype.insertDTMF =\n function(tones, opt_duration, opt_interToneGap) {};\n\n/**\n * @type {?boolean}\n */\nRTCDTMFSender.prototype.canInsertDTMF;\n\n/**\n * @type {?function(!RTCDTMFToneChangeEvent)}\n */\nRTCDTMFSender.prototype.ontonechange;\n\n/**\n * @const {string}\n */\nRTCDTMFSender.prototype.toneBuffer;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpsender-interface\n */\nfunction RTCRtpSender() {}\n\n/**\n * @const {!RTCDTMFSender}\n */\nRTCRtpSender.prototype.dtmf;\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpSender.prototype.track;\n\n/**\n * @param {?MediaStreamTrack} track\n * @return {!Promise}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsender\n */\nRTCRtpSender.prototype.replaceTrack = function(track) {};\n\n\n/**\n * @return {!RTCRtpSendParameters}\n */\nRTCRtpSender.prototype.getParameters = function() {};\n\n\n/**\n * @param {!RTCRtpSendParameters} params\n * @return {!Promise}\n */\nRTCRtpSender.prototype.setParameters = function(params) {};\n\n\n/**\n * @record\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpsendparameters\n */\nfunction RTCRtpSendParameters() {}\n\n/**\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.transactionId;\n\n/**\n * @type {!Array}\n */\nRTCRtpSendParameters.prototype.encodings;\n\n/**\n * Possible string values are "maintain-framerate", "maintain-resolution", and\n * "balanced".\n * @type {string|undefined}\n */\nRTCRtpSendParameters.prototype.degradationPreference;\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpcontributingsource\n */\nfunction RTCRtpContributingSource() {}\n\n/**\n * @type {?number}\n */\nRTCRtpContributingSource.prototype.source;\n\n/**\n * @type {?Date|number}\n */\nRTCRtpContributingSource.prototype.timestamp;\n\n/**\n * @type {number|undefined}\n */\nRTCRtpContributingSource.prototype.audioLevel;\n\n/**\n * This is a relatively new field and browsers may not yet be compliant to the\n * spec.\n * @type {?number}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcrtpcontributingsource-rtptimestamp\n */\nRTCRtpContributingSource.prototype.rtpTimestamp;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtpreceiver-interface\n */\nfunction RTCRtpReceiver() {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpReceiver.prototype.track;\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getContributingSources = function() {};\n\n/**\n * @return {!Array}\n */\nRTCRtpReceiver.prototype.getSynchronizationSources = function() {};\n\n/**\n * Chrome extension to control jitter buffer delay.\n * @see https://github.com/henbos/webrtc-timing/issues/1\n * @type {?number|undefined}\n */\nRTCRtpReceiver.prototype.jitterBufferDelayHint;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverinit\n * @record\n */\nfunction RTCRtpTransceiverInit() {}\n\n/**\n * The direction of the `RTCRtpTransceiver`. Defaults to "sendrecv".\n * @type {?RTCRtpTransceiverDirection|undefined}\n */\nRTCRtpTransceiverInit.prototype.direction;\n\n/**\n * The streams to add to the tranceiver\'s sender.\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.streams;\n\n/**\n * @type {?Array|undefined}\n */\nRTCRtpTransceiverInit.prototype.sendEncodings;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters\n * @record\n */\nfunction RTCRtpEncodingParameters() {}\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.codecPayloadType;\n\n/**\n * Possible values are "disabled" and "enabled".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.dtx;\n\n/**\n * @type {?boolean|undefined}\n */\nRTCRtpEncodingParameters.prototype.active;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.priority;\n\n/**\n * Possible values are "very-low", "low" (default), "medium", and "high".\n * @see https://w3c.github.io/webrtc-dscp-exp/\n * @type {?string|undefined}\n */\nRTCRtpEncodingParameters.prototype.networkPriority;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.ptime;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxBitrate;\n\n/**\n * @type {?number|undefined}\n */\nRTCRtpEncodingParameters.prototype.maxFramerate;\n\n/**\n * @type {?string|number}\n */\nRTCRtpEncodingParameters.prototype.rid;\n\n/**\n * @type {?number|number}\n */\nRTCRtpEncodingParameters.prototype.scaleResolutionDownBy;\n\n/**\n * @interface\n * @see https://www.w3.org/TR/webrtc/#rtcrtptransceiver-interface\n */\nfunction RTCRtpTransceiver() {}\n\n/**\n * @const {?string}\n */\nRTCRtpTransceiver.prototype.mid;\n\n/**\n * @const {boolean}\n */\nRTCRtpTransceiver.prototype.stopped;\n\n/**\n * @type {!RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.direction;\n\n/**\n * @const {?RTCRtpTransceiverDirection}\n */\nRTCRtpTransceiver.prototype.currentDirection;\n\n/**\n * @param {!RTCRtpTransceiverDirection} direction\n */\nRTCRtpTransceiver.prototype.setDirection = function(direction) {};\n\n/**\n */\nRTCRtpTransceiver.prototype.stop = function() {};\n\n/**\n * @const {?RTCRtpSender}\n */\nRTCRtpTransceiver.prototype.sender;\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCRtpTransceiver.prototype.receiver;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-longrange\n * @record\n */\nfunction LongRange() {}\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nLongRange.prototype.min;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-doublerange\n * @record\n */\nfunction DoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.max;\n\n/**\n * @type {number|undefined}\n */\nDoubleRange.prototype.min;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainbooleanparameters\n * @record\n */\nfunction ConstrainBooleanParameters() {}\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.exact;\n\n/**\n * @type {boolean|undefined}\n */\nConstrainBooleanParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomstringparameters\n * @record\n */\nfunction ConstrainDOMStringParameters() {}\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.exact;\n\n/**\n * @type {string|Array|undefined}\n */\nConstrainDOMStringParameters.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindoublerange\n * @record\n * @extends {DoubleRange}\n */\nfunction ConstrainDoubleRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainDoubleRange.prototype.ideal;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlongrange\n * @record\n * @extends {LongRange}\n */\nfunction ConstrainLongRange() {}\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.exact;\n\n/**\n * @type {number|undefined}\n */\nConstrainLongRange.prototype.ideal;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainboolean\n * @typedef {boolean|ConstrainBooleanParameters}\n */\nvar ConstrainBoolean;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindomString\n * @typedef {string|Array|ConstrainDOMStringParameters}\n */\nvar ConstrainDOMString;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constraindouble\n * @typedef {number|ConstrainDoubleRange}\n */\nvar ConstrainDouble;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-constrainlong\n * @typedef {number|ConstrainLongRange}\n */\nvar ConstrainLong;\n\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#dom-mediatrackconstraintset\n * @record\n * @private\n */\nfunction MediaTrackConstraintSet() {}\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.autoGainControl;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.aspectRatio;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.channelCount;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.deviceId;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.echoCancellation;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.facingMode;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.frameRate;\n\n/**\n * @type {ConstrainDOMString|undefined}\n */\nMediaTrackConstraintSet.prototype.groupId;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.height;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.latency;\n\n/**\n * @type {ConstrainBoolean|undefined}\n */\nMediaTrackConstraintSet.prototype.noiseSuppression;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleRate;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.sampleSize;\n\n/**\n * @type {ConstrainDouble|undefined}\n */\nMediaTrackConstraintSet.prototype.volume;\n\n/**\n * @type {ConstrainLong|undefined}\n */\nMediaTrackConstraintSet.prototype.width;\n\n\n/**\n * @record\n * @extends {MediaTrackConstraintSet}\n */\nfunction MediaTrackConstraints() {}\n\n/**\n * @type {Array|undefined}\n */\nMediaTrackConstraints.prototype.advanced;\n\n/**\n * @see https://w3c.github.io/mediacapture-main/getusermedia.html#media-track-constraints\n * @record\n */\nfunction MediaStreamConstraints() {}\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.audio;\n\n/**\n * @type {boolean|MediaTrackConstraints|undefined}\n */\nMediaStreamConstraints.prototype.video;\n\n/**\n * @see {http://dev.w3.org/2011/webrtc/editor/getusermedia.html#\n * navigatorusermediaerror-and-navigatorusermediaerrorcallback}\n * @interface\n */\nfunction NavigatorUserMediaError() {}\n\n/**\n * @const {number}\n * @deprecated Removed from the standard and some browsers.\n */\nNavigatorUserMediaError.prototype.PERMISSION_DENIED;\n\n/**\n * @type {number}\n * @deprecated Removed from the standard and some browsers.\n * Read only.\n */\nNavigatorUserMediaError.prototype.code;\n\n/**\n * @type {string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.name;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.message;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.constraintName;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction MediaStreamEvent(type, eventInitDict) {}\n\n/**\n * @const {?MediaStream}\n */\nMediaStreamEvent.prototype.stream;\n\n/**\n * @record\n * @see https://www.w3.org/TR/mediastream-recording/#dictdef-mediarecorderoptions\n */\nfunction MediaRecorderOptions() {}\n\n/** @type {(string|undefined)} */\nMediaRecorderOptions.prototype.mimeType\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.audioBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.videoBitsPerSecond\n\n/** @type {(number|undefined)} */\nMediaRecorderOptions.prototype.bitsPerSecond\n\n/**\n * @see https://www.w3.org/TR/mediastream-recording/#mediarecorder-api\n * @param {!MediaStream} stream\n * @param {MediaRecorderOptions=} options\n * @implements {EventTarget}\n * @constructor\n */\nfunction MediaRecorder(stream, options) {}\n\n/**\n * @override\n */\nMediaRecorder.prototype.addEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n */\nMediaRecorder.prototype.removeEventListener = function(type, listener,\n opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaRecorder.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MediaStream}\n */\nMediaRecorder.prototype.stream;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.mimeType;\n\n/**\n * @type {string}\n */\nMediaRecorder.prototype.state;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstart;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onstop;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.ondataavailable;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onpause;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onresume;\n\n/**\n * @type {(function(!Event)|undefined)}\n */\nMediaRecorder.prototype.onerror;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.videoBitsPerSecond;\n\n/**\n * @type {number}\n */\nMediaRecorder.prototype.audioBitsPerSecond;\n\n/**\n * @param {number=} timeslice\n */\nMediaRecorder.prototype.start = function(timeslice) {};\n\n/** @return {void} */\nMediaRecorder.prototype.stop = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.pause = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.resume = function() {};\n\n/** @return {void} */\nMediaRecorder.prototype.requestData = function() {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaRecorder.isTypeSupported = function(type) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {{data: !Blob, timecode: (number|undefined)}} eventInitDict\n * @see https://www.w3.org/TR/mediastream-recording/#blobevent-section\n */\nfunction BlobEvent(type, eventInitDict) {}\n\n/** @type {!Blob} */\nBlobEvent.prototype.data;\n\n/** @type {number} */\nBlobEvent.prototype.timecode;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photosettings-section\n */\nfunction PhotoSettings() {}\n\n/**\n * @type {string}\n */\nPhotoSettings.prototype.fillLightMode;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageHeight;\n\n/**\n * @type {number}\n */\nPhotoSettings.prototype.imageWidth;\n\n/**\n * @type {boolean}\n */\nPhotoSettings.prototype.redEyeReduction;\n\n/**\n * @interface\n * @see https://w3c.github.io/mediacapture-image/##photocapabilities-section\n */\nfunction PhotoCapabilities() {}\n\n/**\n * @const {string}\n */\nPhotoCapabilities.prototype.redEyeReduction;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageHeight;\n\n/**\n * @const {!MediaSettingsRange}\n */\nPhotoCapabilities.prototype.imageWidth;\n\n/**\n * @const {!Array}\n */\nPhotoCapabilities.prototype.fillLightMode;\n\n/**\n * @see https://w3c.github.io/mediacapture-image/\n * @param {!MediaStreamTrack} videoTrack\n * @constructor\n */\nfunction ImageCapture(videoTrack) {}\n\n/**\n * @param {!PhotoSettings=} photoSettings\n * @return {!Promise}\n */\nImageCapture.prototype.takePhoto = function(photoSettings) {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.getPhotoCapabilities = function() {};\n\n/**\n * @return {!Promise}\n */\nImageCapture.prototype.grabFrame = function() {};\n\n/**\n * @const {!MediaStreamTrack}\n */\nImageCapture.prototype.track;\n\n/**\n * @see https://www.w3.org/TR/webrtc/#rtctrackevent\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCTrackEvent(type, eventInitDict) {}\n\n/**\n * @const {?RTCRtpReceiver}\n */\nRTCTrackEvent.prototype.receiver;\n\n/**\n * @const {?MediaStreamTrack}\n */\nRTCTrackEvent.prototype.track;\n\n/**\n * @const {?Array}\n */\nRTCTrackEvent.prototype.streams;\n\n/**\n * @const {?RTCRtpTransceiver}\n */\nRTCTrackEvent.prototype.transceiver;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaDeviceKind\n * In WebIDL this is an enum with values \'audioinput\', \'audiooutput\', and\n * \'videoinput\', but there is no mechanism in Closure for describing a\n * specialization of the string type.\n */\nvar MediaDeviceKind;\n\n/**\n * Possible values are "sendrecv", "sendonly", "recvonly", and "inactive".\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcrtptransceiverdirection\n */\nvar RTCRtpTransceiverDirection;\n\n/**\n * @interface\n */\nfunction MediaDeviceInfo() {}\n\n/** @const {string} */\nMediaDeviceInfo.prototype.deviceId;\n\n/** @const {!MediaDeviceKind} */\nMediaDeviceInfo.prototype.kind;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.label;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.groupId;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediadevices\n */\nfunction MediaDevices() {}\n\n/**\n * @return {!Promise>}\n */\nMediaDevices.prototype.enumerateDevices = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/MediaDevices/getUserMedia\n * @param {!MediaStreamConstraints} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getUserMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia\n * @param {!MediaStreamConstraints=} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getDisplayMedia = function(constraints) {}\n\n/**\n * @see https://w3c.github.io/mediacapture-main/#dom-mediadevices-getsupportedconstraints\n * @return {!MediaTrackSupportedConstraints}\n */\nMediaDevices.prototype.getSupportedConstraints = function() {}\n\n/** @const {!MediaDevices} */\nNavigator.prototype.mediaDevices;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/webrtc/#rtcsdptype\n * In WebIDL this is an enum with values \'offer\', \'pranswer\', and \'answer\',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar RTCSdpType;\n\n/**\n * @param {!Object=} descriptionInitDict The RTCSessionDescriptionInit\n * dictionary. This optional argument may have type\n * {type:RTCSdpType, sdp:string}, but neither of these keys are required to be\n * present, and other keys are ignored, so the closest Closure type is Object.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcsessiondescription-class\n */\nfunction RTCSessionDescription(descriptionInitDict) {}\n\n/**\n * @type {?RTCSdpType}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-type\n */\nRTCSessionDescription.prototype.type;\n\n/**\n * @type {?string}\n * @see https://www.w3.org/TR/webrtc/#dom-rtcsessiondescription-sdp\n */\nRTCSessionDescription.prototype.sdp;\n\n/**\n * TODO(bemasc): Remove this definition once it is removed from the browser.\n * @param {string} label The label index (audio/video/data -> 0,1,2)\n * @param {string} sdp The ICE candidate in SDP text form\n * @constructor\n */\nfunction IceCandidate(label, sdp) {}\n\n/**\n * @return {string}\n */\nIceCandidate.prototype.toSdp = function() {};\n\n/**\n * @type {?string}\n */\nIceCandidate.prototype.label;\n\n/** @record */\nfunction RTCIceCandidateInit() {};\n\n/** @type {?string|undefined} */\nRTCIceCandidateInit.prototype.candidate;\n\n/** @type {(?string|undefined)} */\nRTCIceCandidateInit.prototype.sdpMid;\n\n/** @type {(?number|undefined)} */\nRTCIceCandidateInit.prototype.sdpMLineIndex;\n\n/** @type {(string|undefined)} */\nRTCIceCandidateInit.prototype.usernameFragment;\n\n/**\n * @param {!RTCIceCandidateInit=} candidateInitDict The RTCIceCandidateInit dictionary.\n * @constructor\n * @see https://www.w3.org/TR/webrtc/#rtcicecandidate-interface\n */\nfunction RTCIceCandidate(candidateInitDict) {}\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.candidate;\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.sdpMid;\n\n/**\n * @type {?number}\n */\nRTCIceCandidate.prototype.sdpMLineIndex;\n\n/**\n * @typedef {{urls: string}|{urls: !Array}}\n * @private\n * @see https://www.w3.org/TR/webrtc/#rtciceserver-dictionary\n * This dictionary type also has an optional key {credential: ?string}.\n */\nvar RTCIceServerRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCIceServerInterface_() {}\n\n/**\n * @type {string|!Array}\n */\nRTCIceServerInterface_.prototype.urls;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.username;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.credential;\n\n/**\n * This type, and several below it, are constructed as unions between records\n *\n * @typedef {RTCIceServerRecord_|RTCIceServerInterface_}\n * @private\n */\nvar RTCIceServer;\n\n/**\n * @typedef {{\n * iceServers: !Array,\n * sdpSemantics: (string|undefined)\n * }}\n * @private\n */\nvar RTCConfigurationRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCConfigurationInterface_() {}\n\n/**\n * @type {!Array}\n */\nRTCConfigurationInterface_.prototype.iceServers;\n\n/**\n * Allows specifying the SDP semantics. Valid values are "plan-b" and\n * "unified-plan".\n *\n * @see {@link https://webrtc.org/web-apis/chrome/unified-plan/}\n * @type {string|undefined}\n */\nRTCConfigurationInterface_.prototype.sdpSemantics;\n\n/**\n * @typedef {RTCConfigurationRecord_|RTCConfigurationInterface_}\n */\nvar RTCConfiguration;\n\n/**\n * @typedef {function(!RTCSessionDescription)}\n */\nvar RTCSessionDescriptionCallback;\n\n/**\n * @typedef {function(string)}\n */\nvar RTCPeerConnectionErrorCallback;\n\n/**\n * @typedef {function()}\n */\nvar RTCVoidCallback;\n\n/**\n * @typedef {string}\n */\nvar RTCSignalingState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceConnectionState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceGatheringState;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCPeerConnectionIceEvent(type, eventInitDict) {}\n\n/**\n * @const {RTCIceCandidate}\n */\nRTCPeerConnectionIceEvent.prototype.candidate;\n\n// Note: The specification of RTCStats types is still under development.\n// Declarations here will be updated and removed to follow the development of\n// modern browsers, breaking compatibility with older versions as they become\n// obsolete.\n/**\n * @see https://www.w3.org/TR/webrtc/#dom-rtcstats\n * @interface\n */\nfunction RTCStats() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStats.prototype.timestamp;\n\n/**\n * https://www.w3.org/TR/webrtc-stats/#rtcstatstype-str*\n * @const {string}\n */\nRTCStats.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStats.prototype.id;\n\n/**\n * @see https://www.w3.org/TR/webrtc-stats/#dom-rtcrtpstreamstats\n * @interface\n * @extends {RTCStats}\n */\nfunction RTCStreamStats() {}\n\n/** @const {number} */\nRTCStreamStats.prototype.ssrc;\n\n/** @const {string} */\nRTCStreamStats.prototype.kind;\n\n/** @const {string} */\nRTCStreamStats.prototype.transportId;\n\n/** @const {string} */\nRTCStreamStats.prototype.codecId;\n\n/** @const {number} */\nRTCStreamStats.prototype.firCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.pliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.nackCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.sliCount;\n\n/** @const {number} */\nRTCStreamStats.prototype.qpSum;\n\n/**\n * @interface\n */\nfunction RTCStatsReport() {}\n\n/**\n * @const {?Date|number}\n */\nRTCStatsReport.prototype.timestamp;\n\n/**\n * @return {!Array}\n */\nRTCStatsReport.prototype.names = function() {};\n\n/**\n * @param {string} name\n * @return {string}\n */\nRTCStatsReport.prototype.stat = function(name) {};\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.local;\n\n/**\n * @deprecated\n * @const {RTCStatsReport}\n */\nRTCStatsReport.prototype.remote;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.type;\n\n/**\n * @const {string}\n */\nRTCStatsReport.prototype.id;\n\n// Note: Below are Map like methods supported by WebRTC statistics\n// specification-compliant RTCStatsReport. Currently only implemented by\n// Mozilla.\n// See https://www.w3.org/TR/webrtc/#rtcstatsreport-object for definition.\n/**\n * @param {function(this:SCOPE, !RTCStats, string, MAP)} callback\n * @param {SCOPE=} opt_thisObj The value of "this" inside callback function.\n * @this {MAP}\n * @template MAP,SCOPE\n */\nRTCStatsReport.prototype.forEach = function(callback, opt_thisObj) {};\n\n/**\n * @param {string} key\n * @return {!IteratorIterable>}\n */\nRTCStatsReport.prototype.entries = function(key) {};\n\n/**\n * @param {string} key\n * @return {!RTCStats}\n */\nRTCStatsReport.prototype.get = function(key) {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.keys = function() {};\n\n/**\n * @return {!IteratorIterable}\n */\nRTCStatsReport.prototype.values = function() {};\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nRTCStatsReport.prototype.has = function(key) {};\n\n/**\n * @const {number}\n */\nRTCStatsReport.prototype.size;\n\n/**\n * @return {!Iterator>}\n */\nRTCStatsReport.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * TODO(bemasc): Remove this type once it is no longer in use. It has already\n * been removed from the specification.\n * @typedef {RTCStatsReport}\n * @deprecated\n */\nvar RTCStatsElement;\n\n/**\n * @interface\n */\nfunction RTCStatsResponse() {}\n\n/**\n * @return {!Array}\n */\nRTCStatsResponse.prototype.result = function() {};\n\n/**\n * @typedef {function(!RTCStatsResponse, MediaStreamTrack=)}\n */\nvar RTCStatsCallback;\n\n/**\n * This type is not yet standardized, so the properties here only represent\n * the current capabilities of libjingle (and hence Chromium).\n * TODO(bemasc): Add a link to the relevant standard once MediaConstraint has a\n * standard definition.\n *\n * @interface\n * @private\n */\nfunction MediaConstraintSetInterface_() {}\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveAudio;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveVideo;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.DtlsSrtpKeyAgreement;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.RtpDataChannels;\n\n/**\n * TODO(bemasc): Make this type public once it is defined in a standard.\n *\n * @typedef {Object|MediaConstraintSetInterface_}\n * @private\n */\nvar MediaConstraintSet_;\n\n/**\n * @interface\n * @private\n */\nfunction MediaConstraintsInterface_() {}\n\n/**\n * @type {?MediaConstraintSet_}\n */\nMediaConstraintsInterface_.prototype.mandatory;\n\n/**\n * @type {?Array}\n */\nMediaConstraintsInterface_.prototype.optional;\n\n/**\n * This type is used extensively in\n * {@see http://dev.w3.org/2011/webrtc/editor/webrtc.html} but is not yet\n * defined.\n *\n * @typedef {Object|MediaConstraintsInterface_}\n */\nvar MediaConstraints;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/webrtc-pc/#dom-rtcdatachannel\n */\nfunction RTCDataChannel() {}\n\n/**\n * @const {string}\n */\nRTCDataChannel.prototype.label;\n\n/**\n * @const {boolean}\n */\nRTCDataChannel.prototype.reliable;\n\n/**\n * An enumerated string type (RTCDataChannelState) with values:\n * "connecting", "open", "closing", and "closed".\n * @type {string}\n * Read only.\n */\nRTCDataChannel.prototype.readyState;\n\n/**\n * @type {number}\n * Read only.\n */\nRTCDataChannel.prototype.bufferedAmount;\n\n/**\n * @type {number}\n */\nRTCDataChannel.prototype.bufferedAmountLowThreshold;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onopen;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onerror;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onclose;\n\nRTCDataChannel.prototype.close = function() {};\n\n/**\n * @type {?function(!MessageEvent<*>)}\n */\nRTCDataChannel.prototype.onmessage;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onbufferedamountlow;\n\n/**\n * @type {string}\n */\nRTCDataChannel.prototype.binaryType;\n\n/**\n * @param {string|!Blob|!ArrayBuffer|!ArrayBufferView} data\n * @return {undefined}\n */\nRTCDataChannel.prototype.send = function(data) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @private\n */\nfunction RTCDataChannelEvent() {}\n\n/**\n * @type {!RTCDataChannel}\n * Read only.\n */\nRTCDataChannelEvent.prototype.channel;\n\n/**\n * @typedef {{reliable: boolean}}\n */\nvar RTCDataChannelInitRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCDataChannelInitInterface_() {}\n\n/**\n * @type {boolean}\n */\nRTCDataChannelInitInterface_.prototype.reliable;\n\n/**\n * @typedef {{\n * ordered: (boolean|undefined),\n * maxPacketLifeTime: (number|undefined),\n * maxRetransmits: (number|undefined),\n * protocol: (string|undefined),\n * negotiated: (boolean|undefined),\n * id: (number|undefined),\n * priority: (string|undefined),\n * }}\n * see https://www.w3.org/TR/webrtc/#dom-rtcdatachannelinit for documentation\n * Type inconsistencies due to Closure limitations:\n * maxPacketLifeTime should be UnsignedShort\n * maxRetransmits should be UnsignedShort\n * protocol should be USVString\n * id should be UnsignedShort\n * In WebIDL priority is an enum with values \'very-low\', \'low\',\n * \'medium\' and \'high\', but there is no mechanism in Closure for describing\n * a specialization of the string type.\n */\nvar RTCDataChannelInitDictionary_;\n\n/**\n * @typedef {RTCDataChannelInitInterface_|RTCDataChannelInitRecord_|RTCDataChannelInitDictionary_}\n */\nvar RTCDataChannelInit;\n\n/**\n * @typedef {{expires: number}}\n */\nvar RTCCertificate;\n\n/**\n * @param {RTCConfiguration} configuration\n * @param {!MediaConstraints=} constraints\n * @constructor\n * @implements {EventTarget}\n * @see https://www.w3.org/TR/webrtc/#interface-definition\n */\nfunction RTCPeerConnection(configuration, constraints) {}\n\n/**\n * @param {Object} keygenAlgorithm\n * @return {Promise}\n */\nRTCPeerConnection.generateCertificate = function (keygenAlgorithm) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.addEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n */\nRTCPeerConnection.prototype.removeEventListener = function(\n type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nRTCPeerConnection.prototype.dispatchEvent = function(evt) {};\n\n\n// NB: Until closure annotations support overloading, many of the following\n// functions take odd unions of parameter types. This is to support the various\n// api differences between browsers. Generally, returning a promise means you\n// don\'t take callback function parameters and draw any further parameters\n// forward, and vice versa.\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createOffer = function(successCallbackOrConstraints,\n errorCallback, constraints) {};\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n * successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createAnswer =\n function(successCallbackOrConstraints, errorCallback, constraints) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setLocalDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} errorCallback\n * @return {!Promise}\n */\nRTCPeerConnection.prototype.setRemoteDescription = function(description,\n successCallback, errorCallback) {};\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.localDescription;\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.remoteDescription;\n\n/**\n * @type {RTCSignalingState}\n * Read only.\n */\nRTCPeerConnection.prototype.signalingState;\n\n/**\n * @param {?RTCConfiguration=} configuration\n * @param {?MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.updateIce = function(configuration, constraints) {};\n\n/**\n * Void in Chrome for now, a promise that you can then/catch in Firefox.\n * @param {!RTCIceCandidate} candidate\n * @param {!RTCVoidCallback=} successCallback\n * @param {function(DOMException)=} errorCallback\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.addIceCandidate = function(candidate, successCallback, errorCallback) {};\n\n/**\n * @type {!RTCIceGatheringState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceGatheringState;\n\n/**\n * @type {!RTCIceConnectionState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceConnectionState;\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getLocalStreams = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getRemoteStreams = function() {};\n\n/**\n * @param {string} streamId\n * @return {MediaStream}\n */\nRTCPeerConnection.prototype.getStreamById = function(streamId) {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getSenders = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getReceivers = function() {};\n\n/**\n * @param {?string} label\n * @param {RTCDataChannelInit=} dataChannelDict\n * @return {!RTCDataChannel}\n */\nRTCPeerConnection.prototype.createDataChannel =\n function(label, dataChannelDict) {};\n/**\n * @param {!MediaStream} stream\n * @param {!MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.addStream = function(stream, constraints) {};\n\n/**\n * @param {!MediaStream} stream\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeStream = function(stream) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @param {!MediaStream} stream\n * @param {...MediaStream} var_args Additional streams.\n * @return {!RTCRtpSender}\n */\nRTCPeerConnection.prototype.addTrack = function(track, stream, var_args) {};\n\n/**\n * @param {!MediaStreamTrack|string} trackOrKind\n * @param {?RTCRtpTransceiverInit=} init\n * @return {!RTCRtpTransceiver}\n */\nRTCPeerConnection.prototype.addTransceiver = function(trackOrKind, init) {};\n\n/**\n * Returns the list of transceivers are currently attached to this peer.\n *\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getTransceivers = function() {};\n\n/**\n * @return {!RTCConfiguration}\n */\nRTCPeerConnection.prototype.getConfiguration = function() {};\n\n/**\n * @param {!RTCConfiguration} configuration\n * @return {undefined}\n */\nRTCPeerConnection.prototype.setConfiguration = function(configuration) {};\n\n/**\n * @param {!RTCRtpSender} sender\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeTrack = function(sender) {};\n\n// TODO(bemasc): Add identity provider stuff once implementations exist\n\n// TODO(rjogrady): Per w3c spec, getStats() should always return a Promise.\n// Remove RTCStatsReport from the return value once Firefox supports that.\n/**\n * Firefox\' getstats is synchronous and returns a much simpler\n * {!RTCStatsReport} Map-like object.\n * @param {!RTCStatsCallback=} successCallback\n * @param {MediaStreamTrack=} selector\n * @return {undefined|!RTCStatsReport|!Promise}\n */\nRTCPeerConnection.prototype.getStats = function(successCallback, selector) {};\n\nRTCPeerConnection.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onnegotiationneeded;\n\n/**\n * @type {?function(!RTCPeerConnectionIceEvent)}\n */\nRTCPeerConnection.prototype.onicecandidate;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onicegatheringstatechange;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onsignalingstatechange;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onaddstream;\n\n/**\n * @type {?function(!RTCTrackEvent)}\n */\nRTCPeerConnection.prototype.ontrack;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onremovestream;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.oniceconnectionstatechange;\n\n/**\n * @type {?function(!RTCDataChannelEvent)}\n */\nRTCPeerConnection.prototype.ondatachannel;\n', + "externs/nonstandard_rtc.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Nonstandard definitions for components of the WebRTC browser\n * API.\n *\n * @externs\n */\n\n/**\n * @type {function(new: MediaStream,\n * (!MediaStream|!Array)=)}\n */\nvar webkitMediaStream;\n\n/**\n * @param {MediaStreamConstraints} constraints A MediaStreamConstraints object.\n * @param {function(!MediaStream)} successCallback\n * A NavigatorUserMediaSuccessCallback function.\n * @param {function(!NavigatorUserMediaError)=} errorCallback A\n * NavigatorUserMediaErrorCallback function.\n * @see http://dev.w3.org/2011/webrtc/editor/getusermedia.html\n * @see https://www.w3.org/TR/mediacapture-streams/\n * @return {undefined}\n */\nNavigator.prototype.webkitGetUserMedia = function(\n constraints, successCallback, errorCallback) {};\n\n/** @const */\nvar webkitRTCPeerConnection = RTCPeerConnection;\n', + "externs/w3c_screen_orientation.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Screen Orientation API.\n * @see https://w3c.github.io/screen-orientation/\n *\n * @externs\n */\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/screen-orientation/#screenorientation-interface\n */\nvar ScreenOrientation = function() {};\n\n/**\n * @param {string} orientation\n * @return {!Promise}\n */\nScreenOrientation.prototype.lock = function(orientation) {};\n\n/** @return {void} */\nScreenOrientation.prototype.unlock = function() {};\n\n/** @const {string} */\nScreenOrientation.prototype.type;\n\n/** @const {number} */\nScreenOrientation.prototype.angle;\n\n/** @type {?function(!Event)} */\nScreenOrientation.prototype.onchange;\n\n/**\n * @type {?ScreenOrientation}\n * @see https://w3c.github.io/screen-orientation/#extensions-to-the-screen-interface\n */\nScreen.prototype.orientation;\n', +-"externs/w3c_selectors.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Selectors API.\n * This file depends on w3c_dom1.js.\n * @see http://www.w3.org/TR/selectors-api2/\n *\n * @externs\n * @author mihaip@google.com (Mihai Parparita)\n */\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-closest\n * https://developer.mozilla.org/en-US/docs/Web/API/Element.closest\n * @param {string} selectors\n * @return {?Element}\n * @nosideeffects\n */\nElement.prototype.closest = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-matches\n * https://developer.mozilla.org/en-US/docs/Web/API/Element.matches\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matches = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @param {(Node|NodeList)=} refNodes\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matchesSelector = function(selectors, refNodes) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Node.mozMatchesSelector\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.mozMatchesSelector = function(selectors) {};\n\n/**\n * @see http://developer.apple.com/library/safari/documentation/WebKit/Reference/ElementClassRef/Element/Element.html\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.webkitMatchesSelector = function(selectors) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ff975201.aspx\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.msMatchesSelector = function(selectors) {};\n\n/**\n * @see http://www.opera.com/docs/changelogs/windows/1150/\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.oMatchesSelector = function(selectors) {};\n', +-"externs/w3c_serviceworker.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for service worker.\n *\n * @see http://www.w3.org/TR/service-workers/\n * @externs\n */\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-interface\n * @constructor\n * @extends {Worker}\n */\nfunction ServiceWorker() {}\n\n/** @type {string} */\nServiceWorker.prototype.scriptURL;\n\n/** @type {ServiceWorkerState} */\nServiceWorker.prototype.state;\n\n/** @type {?function(!Event)} */\nServiceWorker.prototype.onstatechange;\n\n/**\n * Set of possible string values: 'installing', 'installed', 'activating',\n * 'activated', 'redundant'.\n * @typedef {string}\n */\nvar ServiceWorkerState;\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#navigationpreloadmanager\n * @constructor\n */\nfunction NavigationPreloadManager() {}\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.enable = function() {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.disable = function() {};\n\n/**\n * @param {string=} value\n * @return {!Promise}\n */\nNavigationPreloadManager.prototype.setHeaderValue = function(value) {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.getState = function() {};\n\n/**\n * @typedef {{\n * enabled: (boolean|undefined),\n * headerValue: (string|undefined)\n * }}\n */\nvar NavigationPreloadState;\n\n/** @record */\nfunction PushSubscriptionOptions() {}\n\n/** @type {ArrayBuffer|undefined} */\nPushSubscriptionOptions.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptions.prototype.userVisibleOnly;\n\n/** @record */\nfunction PushSubscriptionOptionsInit() {}\n\n/** @type {BufferSource|string|undefined} */\nPushSubscriptionOptionsInit.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptionsInit.prototype.userVisibleOnly;\n\n\n/**\n * @see https://w3c.github.io/push-api/\n * @constructor\n */\nfunction PushSubscription() {}\n\n/** @type {string} */\nPushSubscription.prototype.endpoint;\n\n/**\n * Please note there is an intent to deprecate this field in Chrome 43 or 44.\n * See https://www.chromestatus.com/feature/5283829761703936.\n * @type {string}\n */\nPushSubscription.prototype.subscriptionId;\n\n/** @type {!PushSubscriptionOptions} */\nPushSubscription.prototype.options;\n\n/** @return {!Promise} */\nPushSubscription.prototype.unsubscribe = function() {};\n\n/** @enum {string} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// var PushPermissionStatus = {\n// GRANTED: 'granted',\n// DENIED: 'denied',\n// DEFAULT: 'default'\n//};\n\n/**\n * @see https://w3c.github.io/push-api/#idl-def-PushManager\n * @constructor\n */\nfunction PushManager() {}\n\n/**\n * @param {PushSubscriptionOptionsInit=} opt_options\n * @return {!Promise}\n */\nPushManager.prototype.subscribe = function(opt_options) {};\n\n/** @return {!Promise} */\nPushManager.prototype.getSubscription = function() {};\n\n/** @return {!Promise} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// PushManager.prototype.hasPermission = function() {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-manager-interface\n * @constructor\n */\nfunction SyncManager() {}\n\n/**\n * @param {string} tag\n * @return {!Promise}\n */\nSyncManager.prototype.register = function(tag) {}\n\n/**\n * @return {!Promise>}\n */\nSyncManager.prototype.getTags = function() {}\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-event\n * @constructor\n * @extends{ExtendableEvent}\n */\nfunction SyncEvent() {}\n\n/** @type {string} */\nSyncEvent.prototype.tag;\n\n/** @type {boolean} */\nSyncEvent.prototype.lastChance;\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushMessageData\n * @constructor\n */\nfunction PushMessageData() {}\n\n/** @return {!ArrayBuffer} */\nPushMessageData.prototype.arrayBuffer = function() {};\n\n/** @return {!Blob} */\nPushMessageData.prototype.blob = function() {};\n\n/** @return {*} */\nPushMessageData.prototype.json = function() {};\n\n/** @return {string} */\nPushMessageData.prototype.text = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushEvent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction PushEvent(type, opt_eventInitDict) {}\n\n/** @type {?PushMessageData} */\nPushEvent.prototype.data;\n\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-registration-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerRegistration() {}\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.installing;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.waiting;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.active;\n\n/** @type {NavigationPreloadManager} */\nServiceWorkerRegistration.prototype.navigationPreload;\n\n/** @type {string} */\nServiceWorkerRegistration.prototype.scope;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.unregister = function() {};\n\n/** @type {?function(!Event)} */\nServiceWorkerRegistration.prototype.onupdatefound;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.update = function() {};\n\n/**\n * @see https://w3c.github.io/push-api/\n * @type {!PushManager}\n */\nServiceWorkerRegistration.prototype.pushManager;\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerRegistration.prototype.showNotification =\n function(title, opt_options) {};\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {!GetNotificationOptions=} opt_filter\n * @return {!Promise>}\n */\nServiceWorkerRegistration.prototype.getNotifications = function(opt_filter) {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#service-worker-registration-extensions\n * @type {!SyncManager}\n */\nServiceWorkerRegistration.prototype.sync;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-container-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerContainer() {}\n\n/** @type {?ServiceWorker} */\nServiceWorkerContainer.prototype.controller;\n\n/** @type {!Promise} */\nServiceWorkerContainer.prototype.ready;\n\n/**\n * @param {string} scriptURL\n * @param {RegistrationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.register = function(scriptURL, opt_options) {};\n\n/**\n * @param {string=} opt_documentURL\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.getRegistration = function(opt_documentURL) {};\n\n/**\n * @return {!Promise>}\n */\nServiceWorkerContainer.prototype.getRegistrations = function() {};\n\n/** @type {?function(!Event): void} */\nServiceWorkerContainer.prototype.oncontrollerchange;\n\n/** @type {?function(!ExtendableMessageEvent): void} */\nServiceWorkerContainer.prototype.onmessage;\n\n/** @type {?function(!ErrorEvent): void} */\nServiceWorkerContainer.prototype.onerror;\n\n/**\n * @typedef {{scope: (string|undefined), useCache: (boolean|undefined), updateViaCache: (string|undefined)}}\n */\nvar RegistrationOptions;\n\n/** @type {!ServiceWorkerContainer} */\nNavigator.prototype.serviceWorker;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-global-scope-interface\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction ServiceWorkerGlobalScope() {}\n\n/** @type {!Cache} */\nServiceWorkerGlobalScope.prototype.scriptCache;\n\n/** @type {!CacheStorage} */\nServiceWorkerGlobalScope.prototype.caches;\n\n/** @type {!ServiceWorkerClients} */\nServiceWorkerGlobalScope.prototype.clients;\n\n/** @type {string} */\nServiceWorkerGlobalScope.prototype.scope;\n\n/** @type {!ServiceWorkerRegistration} */\nServiceWorkerGlobalScope.prototype.registration;\n\n/** @return {!Promise} */\nServiceWorkerGlobalScope.prototype.skipWaiting = function() {};\n\n/** @type {!Console} */\nServiceWorkerGlobalScope.prototype.console;\n\n/** @type {?function(!InstallEvent)} */\nServiceWorkerGlobalScope.prototype.oninstall;\n\n/** @type {?function(!ExtendableEvent)} */\nServiceWorkerGlobalScope.prototype.onactivate;\n\n/** @type {?function(!FetchEvent)} */\nServiceWorkerGlobalScope.prototype.onfetch;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onbeforeevicted;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onevicted;\n\n/** @type {?function(!MessageEvent)} */\nServiceWorkerGlobalScope.prototype.onmessage;\n\n/**\n * While not strictly correct, this should be effectively correct. Notification\n * is the Notification constructor but calling it from the Service Worker throws\n * (https://notifications.spec.whatwg.org/#constructors) so its only use is as\n * an object holding some static properties (note that requestPermission is only\n * exposed to window context - https://notifications.spec.whatwg.org/#api).\n *\n * @type {{\n * permission: string,\n * maxActions: number,\n * }}\n */\nServiceWorkerGlobalScope.prototype.Notification;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-client-interface\n * @constructor\n */\nfunction ServiceWorkerClient() {}\n\n/** @type {!Promise} */\nServiceWorkerClient.prototype.ready;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.hidden;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.focused;\n\n/** @type {VisibilityState} */\nServiceWorkerClient.prototype.visibilityState;\n\n/** @type {string} */\nServiceWorkerClient.prototype.url;\n\n/** @type {string} */\nServiceWorkerClient.prototype.id;\n\n/**\n * // TODO(mtragut): Possibly replace the type with enum ContextFrameType once\n * the enum is defined.\n * @type {string}\n */\nServiceWorkerClient.prototype.frameType;\n\n/**\n * @param {*} message\n * @param {(!Array|undefined)=} opt_transfer\n * @return {undefined}\n */\nServiceWorkerClient.prototype.postMessage = function(message, opt_transfer) {};\n\n/** @return {!Promise} */\nServiceWorkerClient.prototype.focus = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClient.prototype.navigate = function(url) {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-clients-interface\n * @interface\n */\nfunction ServiceWorkerClients() {}\n\n/**\n * Deprecated in Chrome M43+, use matchAll instead. Reference:\n * https://github.com/slightlyoff/ServiceWorker/issues/610.\n * TODO(joeltine): Remove when getAll is fully deprecated.\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.getAll = function(opt_options) {};\n\n/**\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.matchAll = function(opt_options) {};\n\n/**\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.claim = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.openWindow = function(url) {};\n\n/**\n * @param {string} id\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.get = function(id) {};\n\n/** @typedef {{includeUncontrolled: (boolean|undefined)}} */\nvar ServiceWorkerClientQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-interface\n * @interface\n */\nfunction Cache() {}\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.matchAll = function(opt_request, opt_options) {};\n\n/**\n * @param {!RequestInfo} request\n * @return {!Promise}\n */\nCache.prototype.add = function(request) {};\n\n/**\n * @param {!Array} requests\n * @return {!Promise}\n */\nCache.prototype.addAll = function(requests) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {!Response} response\n * @return {!Promise}\n */\nCache.prototype.put = function(request, response) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.delete = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.keys = function(opt_request, opt_options) {};\n\n/**\n * @typedef {{\n * ignoreSearch: (boolean|undefined),\n * ignoreMethod: (boolean|undefined),\n * ignoreVary: (boolean|undefined),\n * prefixMatch: (boolean|undefined),\n * cacheName: (string|undefined)\n * }}\n */\nvar CacheQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-storage-interface\n * @interface\n */\nfunction CacheStorage() {}\n\n/**\n * Window instances have a property called caches which implements CacheStorage\n * @see https://www.w3.org/TR/service-workers/#cache-objects\n * @type {!CacheStorage}\n */\nWindow.prototype.caches;\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCacheStorage.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.has = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.open = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.delete = function(cacheName) {};\n\n/** @return {!Promise>} */\nCacheStorage.prototype.keys = function() {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#extendable-event-interface\n * @constructor\n * @param {string} type\n * @param {ExtendableEventInit=} opt_eventInitDict\n * @extends {Event}\n */\nfunction ExtendableEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {IThenable} f\n * @return {undefined}\n */\nExtendableEvent.prototype.waitUntil = function(f) {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined)\n * }}\n */\nvar ExtendableEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#install-event-interface\n * @constructor\n * @param {string} type\n * @param {InstallEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction InstallEvent(type, opt_eventInitDict) {}\n\n/** @type {ServiceWorker} */\nExtendableEvent.prototype.activeWorker;\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * activeWorker: (!ServiceWorker|undefined)\n * }}\n */\nvar InstallEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#fetch-event-interface\n * @constructor\n * @param {string} type\n * @param {FetchEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction FetchEvent(type, opt_eventInitDict) {}\n\n/** @type {!Request} */\nFetchEvent.prototype.request;\n\n/**\n * @type {!Promise}\n */\nFetchEvent.prototype.preloadResponse;\n\n/**\n * @type {!ServiceWorkerClient}\n * @deprecated\n */\nFetchEvent.prototype.client;\n\n/** @type {?string} */\nFetchEvent.prototype.clientId;\n\n/** @type {boolean} */\nFetchEvent.prototype.isReload;\n\n/** @type {?string} */\nFetchEvent.prototype.resultingClientId;\n\n/**\n * @param {(Response|IThenable)} r\n * @return {undefined}\n */\nFetchEvent.prototype.respondWith = function(r) {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nFetchEvent.prototype.forwardTo = function(url) {};\n\n/**\n * @return {!Promise}\n */\nFetchEvent.prototype.default = function() {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * request: (!Request|undefined),\n * preloadResponse: (!Promise),\n * client: (!ServiceWorkerClient|undefined),\n * isReload: (boolean|undefined)\n * }}\n */\nvar FetchEventInit;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-interface\n * @param {string} type\n * @param {!ExtendableMessageEventInit=} opt_eventInitDict\n * @constructor\n * @extends {ExtendableEvent}\n * @template T\n */\nfunction ExtendableMessageEvent(type, opt_eventInitDict) {};\n\n/** @type {T} */\nExtendableMessageEvent.prototype.data;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.origin;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.lastEventId;\n\n/** @type {?ServiceWorkerClient|?ServiceWorker|?MessagePort} */\nExtendableMessageEvent.prototype.source;\n\n/** @type {?Array} */\nExtendableMessageEvent.prototype.ports;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-init-dictionary\n * @record\n * @extends {ExtendableEventInit}\n * @template T\n */\nfunction ExtendableMessageEventInit() {};\n\n/** @type {T} */\nExtendableMessageEventInit.prototype.data;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.origin;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.lastEventId;\n\n/** @type {!ServiceWorkerClient|!ServiceWorker|!MessagePort|undefined} */\nExtendableMessageEventInit.prototype.source;\n\n/** @type {!Array|undefined} */\nExtendableMessageEventInit.prototype.ports;\n", +-"externs/w3c_speech.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Speech Input 2010 draft API and the\n * 2012 Web Speech draft API (in progress).\n * 2010 Speech Input API:\n * http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html\n * 2012 Web Speech API:\n * http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html\n * This file contains only those functions/properties that are actively\n * used in the Voice Search experiment. Because the draft is under discussion\n * and constantly evolving, this file does not attempt to stay in sync with it.\n *\n * @externs\n * @author manas@google.com (Manas Tungare)\n */\n\n// W3C Speech Input API implemented in Chrome M12\n/**\n * @constructor\n * @extends {UIEvent}\n */\nfunction SpeechInputEvent() {}\n\n/** @type {SpeechInputResultList} */\nSpeechInputEvent.prototype.results;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResultList() {}\n\n/** @type {number} */\nSpeechInputResultList.prototype.length;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResult() {}\n\n/** @type {string} */\nSpeechInputResult.prototype.utterance;\n\n/** @type {number} */\nSpeechInputResult.prototype.confidence;\n\n\n// HTMLInputElement\n/** @type {boolean} */\nHTMLInputElement.prototype.webkitspeech;\n\n/** @type {?function (Event)} */\nHTMLInputElement.prototype.onwebkitspeechchange;\n\n\n\n// W3C Web Speech API implemented in Chrome M23\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SpeechRecognition() {}\n\n/** @override */\nSpeechRecognition.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.dispatchEvent = function(evt) {};\n\n/** @type {SpeechGrammarList} */\nSpeechRecognition.prototype.grammars;\n\n/** @type {string} */\nSpeechRecognition.prototype.lang;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.continuous;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.interimResults;\n\n/** @type {number} */\nSpeechRecognition.prototype.maxAlternatives;\n\n/** @type {string} */\nSpeechRecognition.prototype.serviceURI;\n\n/** @type {function()} */\nSpeechRecognition.prototype.start;\n\n/** @type {function()} */\nSpeechRecognition.prototype.stop;\n\n/** @type {function()} */\nSpeechRecognition.prototype.abort;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudiostart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudioend;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onresult;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onnomatch;\n\n/** @type {?function(!SpeechRecognitionError)} */\nSpeechRecognition.prototype.onerror;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onend;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionError() {}\n\n/** @type {string} */\nSpeechRecognitionError.prototype.error;\n\n/** @type {string} */\nSpeechRecognitionError.prototype.message;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionAlternative() {}\n\n/** @type {string} */\nSpeechRecognitionAlternative.prototype.transcript;\n\n/** @type {number} */\nSpeechRecognitionAlternative.prototype.confidence;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResult() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResult.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionAlternative}\n */\nSpeechRecognitionResult.prototype.item = function(index) {};\n\n/**\n * @type {boolean}\n */\nSpeechRecognitionResult.prototype.isFinal;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResultList() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResultList.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionResult}\n */\nSpeechRecognitionResultList.prototype.item = function(index) {};\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionEvent() {}\n\n/** @type {number} */\nSpeechRecognitionEvent.prototype.resultIndex;\n\n/** @type {SpeechRecognitionResultList} */\nSpeechRecognitionEvent.prototype.results;\n\n/** @type {*} */\nSpeechRecognitionEvent.prototype.interpretation;\n\n/** @type {Document} */\nSpeechRecognitionEvent.prototype.emma;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammar() {}\n\n/** @type {string} */\nSpeechGrammar.prototype.src;\n\n/** @type {number} */\nSpeechGrammar.prototype.weight;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammarList() {}\n\n/**\n * @type {number}\n */\nSpeechGrammarList.prototype.length;\n\n/**\n * @type {function(number): SpeechGrammar}\n */\nSpeechGrammarList.prototype.item = function(index) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromUri = function(src, weight) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromString = function(str, weight) {};\n\n\n// Webkit implementations of Web Speech API\n/**\n * @constructor\n * @extends {SpeechGrammarList}\n */\nfunction webkitSpeechGrammarList() {}\n\n\n/**\n * @constructor\n * @extends {SpeechGrammar}\n */\nfunction webkitSpeechGrammar() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionEvent}\n */\nfunction webkitSpeechRecognitionEvent() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionError}\n */\nfunction webkitSpeechRecognitionError() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognition}\n */\nfunction webkitSpeechRecognition() {}\n\n\n\n// W3C Web Speech Synthesis API is implemented in Chrome M33\n/**\n * @type {SpeechSynthesis}\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section\n */\nvar speechSynthesis;\n\n\n/**\n * @constructor\n * @param {string} text\n */\nfunction SpeechSynthesisUtterance(text) {}\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.text;\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.lang;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.pitch;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.rate;\n\n/** @type {SpeechSynthesisVoice} */\nSpeechSynthesisUtterance.prototype.voice;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.volume;\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onstart = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onend = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onerror = function(event) {};\n\n/**\n * @constructor\n */\nfunction SpeechSynthesisVoice() {}\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.voiceURI;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.name;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.lang;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.localService;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.default;\n\n\n/**\n * @constructor\n * @extends {Array}\n */\nfunction SpeechSynthesisVoiceList() {}\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction SpeechSynthesis() {}\n\n/**\n * @param {SpeechSynthesisUtterance} utterance\n * @return {undefined}\n */\nSpeechSynthesis.prototype.speak = function(utterance) {};\n\n/** @type {function()} */\nSpeechSynthesis.prototype.cancel;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.pause;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.resume;\n\n/**\n * @return {SpeechSynthesisVoiceList}\n */\nSpeechSynthesis.prototype.getVoices = function() {};\n\n/**\n * @param {Event} event\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi-errata.html\n */\nSpeechSynthesis.prototype.onvoiceschanged = function(event) {};\n', ++"externs/w3c_selectors.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Selectors API.\n * This file depends on w3c_dom1.js.\n * @see http://www.w3.org/TR/selectors-api2/\n *\n * @externs\n * @author mihaip@9oo91e.qjz9zk (Mihai Parparita)\n */\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-closest\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element.closest\n * @param {string} selectors\n * @return {?Element}\n * @nosideeffects\n */\nElement.prototype.closest = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-matches\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Element.matches\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matches = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @param {(Node|NodeList)=} refNodes\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matchesSelector = function(selectors, refNodes) {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/Node.mozMatchesSelector\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.mozMatchesSelector = function(selectors) {};\n\n/**\n * @see http://developer.apple.com/library/safari/documentation/WebKit/Reference/ElementClassRef/Element/Element.html\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.webkitMatchesSelector = function(selectors) {};\n\n/**\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ff975201.aspx\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.msMatchesSelector = function(selectors) {};\n\n/**\n * @see http://www.opera.com/docs/changelogs/windows/1150/\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.oMatchesSelector = function(selectors) {};\n', ++"externs/w3c_serviceworker.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for service worker.\n *\n * @see http://www.w3.org/TR/service-workers/\n * @externs\n */\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-interface\n * @constructor\n * @extends {Worker}\n */\nfunction ServiceWorker() {}\n\n/** @type {string} */\nServiceWorker.prototype.scriptURL;\n\n/** @type {ServiceWorkerState} */\nServiceWorker.prototype.state;\n\n/** @type {?function(!Event)} */\nServiceWorker.prototype.onstatechange;\n\n/**\n * Set of possible string values: 'installing', 'installed', 'activating',\n * 'activated', 'redundant'.\n * @typedef {string}\n */\nvar ServiceWorkerState;\n\n/**\n * @see https://w3c.github.io/ServiceWorker/#navigationpreloadmanager\n * @constructor\n */\nfunction NavigationPreloadManager() {}\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.enable = function() {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.disable = function() {};\n\n/**\n * @param {string=} value\n * @return {!Promise}\n */\nNavigationPreloadManager.prototype.setHeaderValue = function(value) {};\n\n/** @return {!Promise} */\nNavigationPreloadManager.prototype.getState = function() {};\n\n/**\n * @typedef {{\n * enabled: (boolean|undefined),\n * headerValue: (string|undefined)\n * }}\n */\nvar NavigationPreloadState;\n\n/** @record */\nfunction PushSubscriptionOptions() {}\n\n/** @type {ArrayBuffer|undefined} */\nPushSubscriptionOptions.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptions.prototype.userVisibleOnly;\n\n/** @record */\nfunction PushSubscriptionOptionsInit() {}\n\n/** @type {BufferSource|string|undefined} */\nPushSubscriptionOptionsInit.prototype.applicationServerKey;\n\n/** @type {boolean|undefined} */\nPushSubscriptionOptionsInit.prototype.userVisibleOnly;\n\n\n/**\n * @see https://w3c.github.io/push-api/\n * @constructor\n */\nfunction PushSubscription() {}\n\n/** @type {string} */\nPushSubscription.prototype.endpoint;\n\n/**\n * Please note there is an intent to deprecate this field in Chrome 43 or 44.\n * See https://www.ch40mestatus.qjz9zk/feature/5283829761703936.\n * @type {string}\n */\nPushSubscription.prototype.subscriptionId;\n\n/** @type {!PushSubscriptionOptions} */\nPushSubscription.prototype.options;\n\n/** @return {!Promise} */\nPushSubscription.prototype.unsubscribe = function() {};\n\n/** @enum {string} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// var PushPermissionStatus = {\n// GRANTED: 'granted',\n// DENIED: 'denied',\n// DEFAULT: 'default'\n//};\n\n/**\n * @see https://w3c.github.io/push-api/#idl-def-PushManager\n * @constructor\n */\nfunction PushManager() {}\n\n/**\n * @param {PushSubscriptionOptionsInit=} opt_options\n * @return {!Promise}\n */\nPushManager.prototype.subscribe = function(opt_options) {};\n\n/** @return {!Promise} */\nPushManager.prototype.getSubscription = function() {};\n\n/** @return {!Promise} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// PushManager.prototype.hasPermission = function() {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-manager-interface\n * @constructor\n */\nfunction SyncManager() {}\n\n/**\n * @param {string} tag\n * @return {!Promise}\n */\nSyncManager.prototype.register = function(tag) {}\n\n/**\n * @return {!Promise>}\n */\nSyncManager.prototype.getTags = function() {}\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#sync-event\n * @constructor\n * @extends{ExtendableEvent}\n */\nfunction SyncEvent() {}\n\n/** @type {string} */\nSyncEvent.prototype.tag;\n\n/** @type {boolean} */\nSyncEvent.prototype.lastChance;\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushMessageData\n * @constructor\n */\nfunction PushMessageData() {}\n\n/** @return {!ArrayBuffer} */\nPushMessageData.prototype.arrayBuffer = function() {};\n\n/** @return {!Blob} */\nPushMessageData.prototype.blob = function() {};\n\n/** @return {*} */\nPushMessageData.prototype.json = function() {};\n\n/** @return {string} */\nPushMessageData.prototype.text = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushEvent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction PushEvent(type, opt_eventInitDict) {}\n\n/** @type {?PushMessageData} */\nPushEvent.prototype.data;\n\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-registration-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerRegistration() {}\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.installing;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.waiting;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.active;\n\n/** @type {NavigationPreloadManager} */\nServiceWorkerRegistration.prototype.navigationPreload;\n\n/** @type {string} */\nServiceWorkerRegistration.prototype.scope;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.unregister = function() {};\n\n/** @type {?function(!Event)} */\nServiceWorkerRegistration.prototype.onupdatefound;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.update = function() {};\n\n/**\n * @see https://w3c.github.io/push-api/\n * @type {!PushManager}\n */\nServiceWorkerRegistration.prototype.pushManager;\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerRegistration.prototype.showNotification =\n function(title, opt_options) {};\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {!GetNotificationOptions=} opt_filter\n * @return {!Promise>}\n */\nServiceWorkerRegistration.prototype.getNotifications = function(opt_filter) {};\n\n/**\n * @see https://wicg.github.io/BackgroundSync/spec/#service-worker-registration-extensions\n * @type {!SyncManager}\n */\nServiceWorkerRegistration.prototype.sync;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-container-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerContainer() {}\n\n/** @type {?ServiceWorker} */\nServiceWorkerContainer.prototype.controller;\n\n/** @type {!Promise} */\nServiceWorkerContainer.prototype.ready;\n\n/**\n * @param {string} scriptURL\n * @param {RegistrationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.register = function(scriptURL, opt_options) {};\n\n/**\n * @param {string=} opt_documentURL\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.getRegistration = function(opt_documentURL) {};\n\n/**\n * @return {!Promise>}\n */\nServiceWorkerContainer.prototype.getRegistrations = function() {};\n\n/** @type {?function(!Event): void} */\nServiceWorkerContainer.prototype.oncontrollerchange;\n\n/** @type {?function(!ExtendableMessageEvent): void} */\nServiceWorkerContainer.prototype.onmessage;\n\n/** @type {?function(!ErrorEvent): void} */\nServiceWorkerContainer.prototype.onerror;\n\n/**\n * @typedef {{scope: (string|undefined), useCache: (boolean|undefined), updateViaCache: (string|undefined)}}\n */\nvar RegistrationOptions;\n\n/** @type {!ServiceWorkerContainer} */\nNavigator.prototype.serviceWorker;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-global-scope-interface\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction ServiceWorkerGlobalScope() {}\n\n/** @type {!Cache} */\nServiceWorkerGlobalScope.prototype.scriptCache;\n\n/** @type {!CacheStorage} */\nServiceWorkerGlobalScope.prototype.caches;\n\n/** @type {!ServiceWorkerClients} */\nServiceWorkerGlobalScope.prototype.clients;\n\n/** @type {string} */\nServiceWorkerGlobalScope.prototype.scope;\n\n/** @type {!ServiceWorkerRegistration} */\nServiceWorkerGlobalScope.prototype.registration;\n\n/** @return {!Promise} */\nServiceWorkerGlobalScope.prototype.skipWaiting = function() {};\n\n/** @type {!Console} */\nServiceWorkerGlobalScope.prototype.console;\n\n/** @type {?function(!InstallEvent)} */\nServiceWorkerGlobalScope.prototype.oninstall;\n\n/** @type {?function(!ExtendableEvent)} */\nServiceWorkerGlobalScope.prototype.onactivate;\n\n/** @type {?function(!FetchEvent)} */\nServiceWorkerGlobalScope.prototype.onfetch;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onbeforeevicted;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onevicted;\n\n/** @type {?function(!MessageEvent)} */\nServiceWorkerGlobalScope.prototype.onmessage;\n\n/**\n * While not strictly correct, this should be effectively correct. Notification\n * is the Notification constructor but calling it from the Service Worker throws\n * (https://notifications.spec.whatwg.org/#constructors) so its only use is as\n * an object holding some static properties (note that requestPermission is only\n * exposed to window context - https://notifications.spec.whatwg.org/#api).\n *\n * @type {{\n * permission: string,\n * maxActions: number,\n * }}\n */\nServiceWorkerGlobalScope.prototype.Notification;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-client-interface\n * @constructor\n */\nfunction ServiceWorkerClient() {}\n\n/** @type {!Promise} */\nServiceWorkerClient.prototype.ready;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.hidden;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.focused;\n\n/** @type {VisibilityState} */\nServiceWorkerClient.prototype.visibilityState;\n\n/** @type {string} */\nServiceWorkerClient.prototype.url;\n\n/** @type {string} */\nServiceWorkerClient.prototype.id;\n\n/**\n * // TODO(mtragut): Possibly replace the type with enum ContextFrameType once\n * the enum is defined.\n * @type {string}\n */\nServiceWorkerClient.prototype.frameType;\n\n/**\n * @param {*} message\n * @param {(!Array|undefined)=} opt_transfer\n * @return {undefined}\n */\nServiceWorkerClient.prototype.postMessage = function(message, opt_transfer) {};\n\n/** @return {!Promise} */\nServiceWorkerClient.prototype.focus = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClient.prototype.navigate = function(url) {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-clients-interface\n * @interface\n */\nfunction ServiceWorkerClients() {}\n\n/**\n * Deprecated in Chrome M43+, use matchAll instead. Reference:\n * https://github.com/slightlyoff/ServiceWorker/issues/610.\n * TODO(joeltine): Remove when getAll is fully deprecated.\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.getAll = function(opt_options) {};\n\n/**\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.matchAll = function(opt_options) {};\n\n/**\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.claim = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.openWindow = function(url) {};\n\n/**\n * @param {string} id\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.get = function(id) {};\n\n/** @typedef {{includeUncontrolled: (boolean|undefined)}} */\nvar ServiceWorkerClientQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-interface\n * @interface\n */\nfunction Cache() {}\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.matchAll = function(opt_request, opt_options) {};\n\n/**\n * @param {!RequestInfo} request\n * @return {!Promise}\n */\nCache.prototype.add = function(request) {};\n\n/**\n * @param {!Array} requests\n * @return {!Promise}\n */\nCache.prototype.addAll = function(requests) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {!Response} response\n * @return {!Promise}\n */\nCache.prototype.put = function(request, response) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.delete = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.keys = function(opt_request, opt_options) {};\n\n/**\n * @typedef {{\n * ignoreSearch: (boolean|undefined),\n * ignoreMethod: (boolean|undefined),\n * ignoreVary: (boolean|undefined),\n * prefixMatch: (boolean|undefined),\n * cacheName: (string|undefined)\n * }}\n */\nvar CacheQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-storage-interface\n * @interface\n */\nfunction CacheStorage() {}\n\n/**\n * Window instances have a property called caches which implements CacheStorage\n * @see https://www.w3.org/TR/service-workers/#cache-objects\n * @type {!CacheStorage}\n */\nWindow.prototype.caches;\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCacheStorage.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.has = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.open = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.delete = function(cacheName) {};\n\n/** @return {!Promise>} */\nCacheStorage.prototype.keys = function() {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#extendable-event-interface\n * @constructor\n * @param {string} type\n * @param {ExtendableEventInit=} opt_eventInitDict\n * @extends {Event}\n */\nfunction ExtendableEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {IThenable} f\n * @return {undefined}\n */\nExtendableEvent.prototype.waitUntil = function(f) {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined)\n * }}\n */\nvar ExtendableEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#install-event-interface\n * @constructor\n * @param {string} type\n * @param {InstallEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction InstallEvent(type, opt_eventInitDict) {}\n\n/** @type {ServiceWorker} */\nExtendableEvent.prototype.activeWorker;\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * activeWorker: (!ServiceWorker|undefined)\n * }}\n */\nvar InstallEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#fetch-event-interface\n * @constructor\n * @param {string} type\n * @param {FetchEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction FetchEvent(type, opt_eventInitDict) {}\n\n/** @type {!Request} */\nFetchEvent.prototype.request;\n\n/**\n * @type {!Promise}\n */\nFetchEvent.prototype.preloadResponse;\n\n/**\n * @type {!ServiceWorkerClient}\n * @deprecated\n */\nFetchEvent.prototype.client;\n\n/** @type {?string} */\nFetchEvent.prototype.clientId;\n\n/** @type {boolean} */\nFetchEvent.prototype.isReload;\n\n/** @type {?string} */\nFetchEvent.prototype.resultingClientId;\n\n/**\n * @param {(Response|IThenable)} r\n * @return {undefined}\n */\nFetchEvent.prototype.respondWith = function(r) {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nFetchEvent.prototype.forwardTo = function(url) {};\n\n/**\n * @return {!Promise}\n */\nFetchEvent.prototype.default = function() {};\n\n/**\n * @typedef {{\n * bubbles: (boolean|undefined),\n * cancelable: (boolean|undefined),\n * request: (!Request|undefined),\n * preloadResponse: (!Promise),\n * client: (!ServiceWorkerClient|undefined),\n * isReload: (boolean|undefined)\n * }}\n */\nvar FetchEventInit;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-interface\n * @param {string} type\n * @param {!ExtendableMessageEventInit=} opt_eventInitDict\n * @constructor\n * @extends {ExtendableEvent}\n * @template T\n */\nfunction ExtendableMessageEvent(type, opt_eventInitDict) {};\n\n/** @type {T} */\nExtendableMessageEvent.prototype.data;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.origin;\n\n/** @type {string} */\nExtendableMessageEvent.prototype.lastEventId;\n\n/** @type {?ServiceWorkerClient|?ServiceWorker|?MessagePort} */\nExtendableMessageEvent.prototype.source;\n\n/** @type {?Array} */\nExtendableMessageEvent.prototype.ports;\n\n\n/**\n * @see https://www.w3.org/TR/service-workers/#extendablemessage-event-init-dictionary\n * @record\n * @extends {ExtendableEventInit}\n * @template T\n */\nfunction ExtendableMessageEventInit() {};\n\n/** @type {T} */\nExtendableMessageEventInit.prototype.data;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.origin;\n\n/** @type {string|undefined} */\nExtendableMessageEventInit.prototype.lastEventId;\n\n/** @type {!ServiceWorkerClient|!ServiceWorker|!MessagePort|undefined} */\nExtendableMessageEventInit.prototype.source;\n\n/** @type {!Array|undefined} */\nExtendableMessageEventInit.prototype.ports;\n", ++"externs/w3c_speech.js":'/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s Speech Input 2010 draft API and the\n * 2012 Web Speech draft API (in progress).\n * 2010 Speech Input API:\n * http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html\n * 2012 Web Speech API:\n * http://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html\n * This file contains only those functions/properties that are actively\n * used in the Voice Search experiment. Because the draft is under discussion\n * and constantly evolving, this file does not attempt to stay in sync with it.\n *\n * @externs\n * @author manas@9oo91e.qjz9zk (Manas Tungare)\n */\n\n// W3C Speech Input API implemented in Chrome M12\n/**\n * @constructor\n * @extends {UIEvent}\n */\nfunction SpeechInputEvent() {}\n\n/** @type {SpeechInputResultList} */\nSpeechInputEvent.prototype.results;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResultList() {}\n\n/** @type {number} */\nSpeechInputResultList.prototype.length;\n\n\n/**\n * @constructor\n */\nfunction SpeechInputResult() {}\n\n/** @type {string} */\nSpeechInputResult.prototype.utterance;\n\n/** @type {number} */\nSpeechInputResult.prototype.confidence;\n\n\n// HTMLInputElement\n/** @type {boolean} */\nHTMLInputElement.prototype.webkitspeech;\n\n/** @type {?function (Event)} */\nHTMLInputElement.prototype.onwebkitspeechchange;\n\n\n\n// W3C Web Speech API implemented in Chrome M23\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SpeechRecognition() {}\n\n/** @override */\nSpeechRecognition.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nSpeechRecognition.prototype.dispatchEvent = function(evt) {};\n\n/** @type {SpeechGrammarList} */\nSpeechRecognition.prototype.grammars;\n\n/** @type {string} */\nSpeechRecognition.prototype.lang;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.continuous;\n\n/** @type {boolean} */\nSpeechRecognition.prototype.interimResults;\n\n/** @type {number} */\nSpeechRecognition.prototype.maxAlternatives;\n\n/** @type {string} */\nSpeechRecognition.prototype.serviceURI;\n\n/** @type {function()} */\nSpeechRecognition.prototype.start;\n\n/** @type {function()} */\nSpeechRecognition.prototype.stop;\n\n/** @type {function()} */\nSpeechRecognition.prototype.abort;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudiostart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onspeechend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onsoundend;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onaudioend;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onresult;\n\n/** @type {?function(!SpeechRecognitionEvent)} */\nSpeechRecognition.prototype.onnomatch;\n\n/** @type {?function(!SpeechRecognitionError)} */\nSpeechRecognition.prototype.onerror;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onstart;\n\n/** @type {?function(!Event)} */\nSpeechRecognition.prototype.onend;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionError() {}\n\n/** @type {string} */\nSpeechRecognitionError.prototype.error;\n\n/** @type {string} */\nSpeechRecognitionError.prototype.message;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionAlternative() {}\n\n/** @type {string} */\nSpeechRecognitionAlternative.prototype.transcript;\n\n/** @type {number} */\nSpeechRecognitionAlternative.prototype.confidence;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResult() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResult.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionAlternative}\n */\nSpeechRecognitionResult.prototype.item = function(index) {};\n\n/**\n * @type {boolean}\n */\nSpeechRecognitionResult.prototype.isFinal;\n\n\n/**\n * @constructor\n */\nfunction SpeechRecognitionResultList() {}\n\n/**\n * @type {number}\n */\nSpeechRecognitionResultList.prototype.length;\n\n/**\n * @type {function(number): SpeechRecognitionResult}\n */\nSpeechRecognitionResultList.prototype.item = function(index) {};\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction SpeechRecognitionEvent() {}\n\n/** @type {number} */\nSpeechRecognitionEvent.prototype.resultIndex;\n\n/** @type {SpeechRecognitionResultList} */\nSpeechRecognitionEvent.prototype.results;\n\n/** @type {*} */\nSpeechRecognitionEvent.prototype.interpretation;\n\n/** @type {Document} */\nSpeechRecognitionEvent.prototype.emma;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammar() {}\n\n/** @type {string} */\nSpeechGrammar.prototype.src;\n\n/** @type {number} */\nSpeechGrammar.prototype.weight;\n\n\n/**\n * @constructor\n */\nfunction SpeechGrammarList() {}\n\n/**\n * @type {number}\n */\nSpeechGrammarList.prototype.length;\n\n/**\n * @type {function(number): SpeechGrammar}\n */\nSpeechGrammarList.prototype.item = function(index) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromUri = function(src, weight) {};\n\n/**\n * @type {function(string, number)}\n */\nSpeechGrammarList.prototype.addFromString = function(str, weight) {};\n\n\n// Webkit implementations of Web Speech API\n/**\n * @constructor\n * @extends {SpeechGrammarList}\n */\nfunction webkitSpeechGrammarList() {}\n\n\n/**\n * @constructor\n * @extends {SpeechGrammar}\n */\nfunction webkitSpeechGrammar() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionEvent}\n */\nfunction webkitSpeechRecognitionEvent() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognitionError}\n */\nfunction webkitSpeechRecognitionError() {}\n\n\n/**\n * @constructor\n * @extends {SpeechRecognition}\n */\nfunction webkitSpeechRecognition() {}\n\n\n\n// W3C Web Speech Synthesis API is implemented in Chrome M33\n/**\n * @type {SpeechSynthesis}\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section\n */\nvar speechSynthesis;\n\n\n/**\n * @constructor\n * @param {string} text\n */\nfunction SpeechSynthesisUtterance(text) {}\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.text;\n\n/** @type {string} */\nSpeechSynthesisUtterance.prototype.lang;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.pitch;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.rate;\n\n/** @type {SpeechSynthesisVoice} */\nSpeechSynthesisUtterance.prototype.voice;\n\n/** @type {number} */\nSpeechSynthesisUtterance.prototype.volume;\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onstart = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onend = function(event) {};\n\n/**\n * @param {Event} event\n */\nSpeechSynthesisUtterance.prototype.onerror = function(event) {};\n\n/**\n * @constructor\n */\nfunction SpeechSynthesisVoice() {}\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.voiceURI;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.name;\n\n/** @type {string} */\nSpeechSynthesisVoice.prototype.lang;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.localService;\n\n/** @type {boolean} */\nSpeechSynthesisVoice.prototype.default;\n\n\n/**\n * @constructor\n * @extends {Array}\n */\nfunction SpeechSynthesisVoiceList() {}\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction SpeechSynthesis() {}\n\n/**\n * @param {SpeechSynthesisUtterance} utterance\n * @return {undefined}\n */\nSpeechSynthesis.prototype.speak = function(utterance) {};\n\n/** @type {function()} */\nSpeechSynthesis.prototype.cancel;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.pause;\n\n/** @type {function()} */\nSpeechSynthesis.prototype.resume;\n\n/**\n * @return {SpeechSynthesisVoiceList}\n */\nSpeechSynthesis.prototype.getVoices = function() {};\n\n/**\n * @param {Event} event\n * @see https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi-errata.html\n */\nSpeechSynthesis.prototype.onvoiceschanged = function(event) {};\n', + "externs/w3c_touch_event.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Touch Events specification.\n * @see http://www.w3.org/TR/touch-events/\n * @externs\n */\n\n/**\n * @typedef {{\n * identifier: number,\n * target: !EventTarget,\n * clientX: (number|undefined),\n * clientY: (number|undefined),\n * screenX: (number|undefined),\n * screenY: (number|undefined),\n * pageX: (number|undefined),\n * pageY: (number|undefined),\n * radiusX: (number|undefined),\n * radiusY: (number|undefined),\n * rotationAngle: (number|undefined),\n * force: (number|undefined)\n * }}\n */\nvar TouchInitDict;\n\n/**\n * The Touch class represents a single touch on the surface. A touch is the\n * presence or movement of a finger that is part of a unique multi-touch\n * sequence.\n * @see http://www.w3.org/TR/touch-events/#touch-interface\n * @param {!TouchInitDict} touchInitDict\n * @constructor\n */\nfunction Touch(touchInitDict) {}\n\n/**\n * The x-coordinate of the touch's location relative to the window's viewport.\n * @type {number}\n */\nTouch.prototype.clientX;\n\n/**\n * The y-coordinate of the touch's location relative to the window's viewport.\n * @type {number}\n */\nTouch.prototype.clientY;\n\n/**\n * The unique identifier for this touch object.\n * @type {number}\n */\nTouch.prototype.identifier;\n\n/**\n * The x-coordinate of the touch's location in page coordinates.\n * @type {number}\n */\nTouch.prototype.pageX;\n\n/**\n * The y-coordinate of the touch's location in page coordinates.\n * @type {number}\n */\nTouch.prototype.pageY;\n\n/**\n * The x-coordinate of the touch's location in screen coordinates.\n * @type {number}\n */\nTouch.prototype.screenX;\n\n/**\n * The y-coordinate of the touch's location in screen coordinates.\n * @type {number}\n */\nTouch.prototype.screenY;\n\n/**\n * The target of this touch.\n * @type {EventTarget}\n */\nTouch.prototype.target;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-force\n */\nTouch.prototype.force;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-radiusX\n */\nTouch.prototype.radiusX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-radiusY\n */\nTouch.prototype.radiusY;\n\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2011/WD-touch-events-20110505/#widl-Touch-rotationAngle\n */\nTouch.prototype.rotationAngle;\n\n\n/**\n * Creates a new Touch object.\n * @see http://www.w3.org/TR/touch-events/#widl-Document-createTouch-Touch-WindowProxy-view-EventTarget-target-long-identifier-long-pageX-long-pageY-long-screenX-long-screenY\n * @param {Window} view\n * @param {EventTarget} target\n * @param {number} identifier\n * @param {number} pageX\n * @param {number} pageY\n * @param {number} screenX\n * @param {number} screenY\n * @return {Touch}\n */\nDocument.prototype.createTouch = function(view, target, identifier, pageX,\n pageY, screenX, screenY) {};\n\n\n/**\n * The TouchList class is used to represent a collection of Touch objects.\n * @see http://www.w3.org/TR/touch-events/#touchlist-interface\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TouchList() {}\n\n/**\n * The number of Touch objects in this TouchList object.\n * @type {number}\n */\nTouchList.prototype.length;\n\n/**\n * Returns the Touch object at the given index.\n * @param {number} index\n * @return {?Touch}\n */\nTouchList.prototype.item = function(index) {};\n\n/**\n * @param {number} identifier\n * @return {?Touch}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-TouchList-identifiedTouch-Touch-long-identifier\n */\nTouchList.prototype.identifiedTouch = function(identifier) {};\n\n/**\n * Creates a new TouchList object.\n * @see http://www.w3.org/TR/touch-events/#widl-Document-createTouchList-TouchList-Touch-touches\n * @param {Array} touches\n * @return {TouchList}\n */\nDocument.prototype.createTouchList = function(touches) {};\n\n/**\n * @record\n * @extends {UIEventInit}\n */\nfunction TouchEventInit() {}\n\n/** @type {undefined|?EventTarget} */\nTouchEventInit.prototype.relatedTarget;\n\n/** @type {undefined|!Array} */\nTouchEventInit.prototype.touches;\n\n/** @type {undefined|!Array} */\nTouchEventInit.prototype.targetTouches;\n\n/** @type {undefined|!Array} */\nTouchEventInit.prototype.changedTouches;\n\n/**\n * The TouchEvent class encapsulates information about a touch event.\n *\n *

The system continually sends TouchEvent objects to an application as\n * fingers touch and move across a surface. A touch event provides a snapshot of\n * all touches during a multi-touch sequence, most importantly the touches that\n * are new or have changed for a particular target. A multi-touch sequence\n * begins when a finger first touches the surface. Other fingers may\n * subsequently touch the surface, and all fingers may move across the surface.\n * The sequence ends when the last of these fingers is lifted from the surface.\n * An application receives touch event objects during each phase of any touch.\n *

\n *\n *

The different types of TouchEvent objects that can occur are:\n *

    \n *
  • touchstart - Sent when a finger for a given event touches the surface.\n *
  • touchmove - Sent when a given event moves on the surface.\n *
  • touchend - Sent when a given event lifts from the surface.\n *
  • touchcancel - Sent when the system cancels tracking for the touch.\n *
\n * TouchEvent objects are combined together to form high-level GestureEvent\n * objects that are also sent during a multi-touch sequence.

\n *\n * @see http://www.w3.org/TR/touch-events/#touchevent-interface\n * @param {string} type\n * @param {!TouchEventInit=} opt_eventInitDict\n * @extends {UIEvent}\n * @constructor\n */\nfunction TouchEvent(type, opt_eventInitDict) {}\n\n/**\n * A collection of Touch objects representing all touches associated with this\n * target.\n * @type {TouchList}\n */\nTouchEvent.prototype.touches;\n\n/**\n * A collection of Touch objects representing all touches associated with this\n * target.\n * @type {TouchList}\n */\nTouchEvent.prototype.targetTouches;\n\n/**\n * A collection of Touch objects representing all touches that changed in this event.\n * @type {TouchList}\n */\nTouchEvent.prototype.changedTouches;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.altKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.metaKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.ctrlKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.shiftKey;\n\n\n/**\n * Specifies the JavaScript method to invoke when the system cancels tracking\n * for the touch.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchcancel;\n\n/**\n * Specifies the JavaScript method to invoke when a given event lifts from the\n * surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchend;\n\n/**\n * Specifies the JavaScript method to invoke when a finger for a given event\n * moves on the surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchmove;\n\n/**\n * Specifies the JavaScript method to invoke when a finger for a given event\n * touches the surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchstart;\n", +-"externs/w3c_vibration.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Vibration API based on "W3C Recommendation 18 October 2016"\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/\n *\n * @externs\n * @author vobruba.martin@gmail.com (Martin Vobruba)\n */\n\n\n/**\n * @typedef {number|!Array}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-vibratepattern\n */\nvar VibratePattern;\n\n\n/**\n * @param {!VibratePattern} pattern\n * @return {boolean}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-navigator-vibrate(vibratepattern)\n */\nNavigator.prototype.vibrate = function(pattern) {};\n', +-"externs/w3c_webcrypto.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Definitions for W3C\'s Web Cryptography specification\n * http://www.w3.org/TR/webCryptoAPI\n * @externs\n * @author chrismoon@google.com (Chris Moon)\n * This file was created using the best practices as described in:\n * chrome_extensions.js\n */\n\n\n/**\n * @const\n * @see http://www.w3.org/TR/webCryptoAPI\n */\nvar webCrypto = {};\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#algorithm-dictionary\n */\nwebCrypto.Algorithm;\n\n\n/**\n * @typedef {string|!webCrypto.Algorithm}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-AlgorithmIdentifier\n */\nwebCrypto.AlgorithmIdentifier;\n\n/**\n * @typedef {webCrypto.AlgorithmIdentifier}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-HashAlgorithmIdentifier\n */\nwebCrypto.HashAlgorithmIdentifier;\n\n\n/**\n * @typedef {Uint8Array}\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-BigInteger\n */\nwebCrypto.BigInteger;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/webCryptoAPI/#dfn-CryptoKey\n */\nwebCrypto.CryptoKey = function() {};\n\n\n/**\n * @type {string} An enumerated value representing the type of the key, a secret\n * key (for symmetric algorithm), a public or a private key\n * (for an asymmetric algorithm).\n */\nwebCrypto.CryptoKey.prototype.type;\n\n\n/**\n * @type {boolean} Determines whether or not the raw keying material may be\n * exported by the application.\n */\nwebCrypto.CryptoKey.prototype.extractable;\n\n\n/**\n * @type {!Object} An opaque object representing a particular cipher the key\n * has to be used with.\n */\nwebCrypto.CryptoKey.prototype.algorithm;\n\n\n/**\n * @type {!Object} Returns the cached ECMAScript object associated with the\n * usages internal slot, which indicates which cryptographic operations are\n * permissible to be used with this key.\n */\nwebCrypto.CryptoKey.prototype.usages;\n\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/WebCryptoAPI/#keypair\n */\nwebCrypto.CryptoKeyPair = function() {};\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.publicKey;\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.privateKey;\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#key-algorithm-dictionary-members\n */\nwebCrypto.KeyAlgorithm;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-JsonWebKey\n * @see Section 3.1:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n */\nwebCrypto.JsonWebKey = function() {};\n\n\n/**\n * @type {string} Identifies the cryptographic algorithm family used with\n * the key, such as "RSA" or "EC".\n */\nwebCrypto.JsonWebKey.prototype.kty;\n\n\n/**\n * @type {string} Identifies the intended use of the public key.\n */\nwebCrypto.JsonWebKey.prototype.use;\n\n\n/**\n * @type {!Array} Identifies the operation(s) that the key is\n * intended to be used for.\n */\nwebCrypto.JsonWebKey.prototype.key_ops;\n\n\n/**\n * @type {string} Identifies the algorithm intended for use with the key.\n */\nwebCrypto.JsonWebKey.prototype.alg;\n\n\n/**\n * @type {boolean} Boolean to be used with kty values.\n */\nwebCrypto.JsonWebKey.prototype.ext;\n\n\n/**\n * @type {string} Identifies the cryptographic curve used with the key.\n */\nwebCrypto.JsonWebKey.prototype.crv;\n\n\n/**\n * @type {string} Contains the x coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.x;\n\n\n/**\n * @type {string} Contains the y coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.y;\n\n\n/**\n * @type {string} Contains the Elliptic Curve private key value.\n */\nwebCrypto.JsonWebKey.prototype.d;\n\n\n/**\n * @type {string} Contains the modulus value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.n;\n\n\n/**\n * @type {string} Contains the exponent value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.e;\n\n\n/**\n * @type {string} Contains the first prime factor.\n */\nwebCrypto.JsonWebKey.prototype.p;\n\n\n/**\n * @type {string} Contains the second prime factor.\n */\nwebCrypto.JsonWebKey.prototype.q;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the first factor.\n */\nwebCrypto.JsonWebKey.prototype.dp;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the second factor.\n */\nwebCrypto.JsonWebKey.prototype.dq;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) coefficient\n * of the second factor.\n */\nwebCrypto.JsonWebKey.prototype.qi;\n\n\n/**\n * @type {!Array} Contains an array of\n * information about any third and subsequent primes, should they exist.\n */\nwebCrypto.JsonWebKey.prototype.oth;\n\n\n/**\n * @type {string} Contains the value of the symmetric (or other\n * single-valued) key.\n */\nwebCrypto.JsonWebKey.prototype.k;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-RsaOtherPrimesInfo\n * @see Section-6.3.2.7:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n */\nwebCrypto.RsaOtherPrimesInfo = function() {};\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the value\n * of a subsequent prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.r;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * exponent of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.d;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * coefficient of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.t;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyGenParams\n */\nwebCrypto.RsaKeyGenParams;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyGenParams.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyGenParams.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyGenParams\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyGenParams\n */\nwebCrypto.RsaHashedKeyGenParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedKeyGenParams.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.KeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyAlgorithm\n */\nwebCrypto.RsaKeyAlgorithm;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyAlgorithm\n */\nwebCrypto.RsaHashedKeyAlgorithm;\n/**\n * @type {webCrypto.KeyAlgorithm}\n */\nwebCrypto.RsaHashedKeyAlgorithm.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedImportParams\n */\nwebCrypto.RsaHashedImportParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedImportParams.prototype.hash;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface\n */\nwebCrypto.SubtleCrypto = function() {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be encrypted (cleartext).\n * @return {!Promise} Ciphertext generated by the encryption of\n * the cleartext.\n */\nwebCrypto.SubtleCrypto.prototype.encrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be decrypted (ciphertext).\n * @return {!Promise} Cleartext generated by the decryption of the\n * ciphertext.\n */\nwebCrypto.SubtleCrypto.prototype.decrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} data Data to be signed.\n * @return {!Promise} Returns the signature on success.\n */\nwebCrypto.SubtleCrypto.prototype.sign = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} signature Signature to verify.\n * @param {!BufferSource} data Data whose signature needs to be verified.\n * @return {!Promise} Returns if the signature operating has been\n * successful.\n */\nwebCrypto.SubtleCrypto.prototype.verify = function(algorithm, key,\n signature, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {!BufferSource} data Data to be hashed using the hashing algorithm.\n * @return {!Promise} returns the hash on success.\n */\nwebCrypto.SubtleCrypto.prototype.digest = function(algorithm, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedKeyGenParams}\n * algorithm Supported values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.generateKey = function(algorithm,\n extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use. Supported values are: ECDH, DH, PBKDF2, and HKDF-CTR.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {!webCrypto.AlgorithmIdentifier} derivedKeyAlgo Defines the key\n * derivation algorithm to use.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.deriveKey = function(algorithm,\n baseKey, derivedKeyAlgo, extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {number} length\n * @return {!Promise} returns the generated bits.\n */\nwebCrypto.SubtleCrypto.prototype.deriveBits = function(algorithm,\n baseKey, length) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!BufferSource|!webCrypto.JsonWebKey} keyData The key\n * in the given format.\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedImportParams}\n * algorithm Supported values are: AES-CTR, AES-CBC, AES-GCM, RSA-OAEP,\n * AES-KW, HMAC, RSASSA-PKCS1-v1_5, ECDSA, ECDH, DH.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the generated key.\n */\nwebCrypto.SubtleCrypto.prototype.importKey = function(format, keyData,\n algorithm, extractable, keyUsages) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!webCrypto.CryptoKey} key CryptoKey to export.\n * @return {!Promise} returns the key in the\n * requested format.\n */\nwebCrypto.SubtleCrypto.prototype.exportKey = function(format, key) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!webCrypto.CryptoKey} key CryptoKey to wrap.\n * @param {!webCrypto.CryptoKey} wrappingKey CryptoKey used to perform\n * the wrapping.\n * @param {!webCrypto.AlgorithmIdentifier} wrapAlgorithm algorithm used\n * to perform the wrapping. It is one of the following: AES-CBC, AES-CTR,\n * AES-GCM, RSA-OAEP, and AES-KW.\n * @return {!Promise} returns the wrapped key in the requested\n * format.\n */\nwebCrypto.SubtleCrypto.prototype.wrapKey = function(format,\n key, wrappingKey, wrapAlgorithm) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!BufferSource} wrappedKey Contains the wrapped key in the given\n * format.\n * @param {!webCrypto.CryptoKey} unwrappingKey CryptoKey used to perform\n * the unwrapping.\n * @param {!webCrypto.AlgorithmIdentifier} unwrapAlgorithm Algorithm\n * used to perform the unwrapping. It is one of the following: AES-CBC,\n * AES-CTR, AES-GCM, RSA-OAEP, and AES-KW.\n * @param {!webCrypto.AlgorithmIdentifier} unwrappedKeyAlgorithm\n * Represents the algorithm of the wrapped key.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the unwrapped key.\n */\nwebCrypto.SubtleCrypto.prototype.unwrapKey = function(format, wrappedKey,\n unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable,\n keyUsages) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto\n * @interface\n */\nwebCrypto.Crypto = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.crypto.getRandomValues\n * @param {!ArrayBufferView} typedArray\n * @return {!ArrayBufferView}\n * @throws {Error}\n */\nwebCrypto.Crypto.prototype.getRandomValues = function(typedArray) {};\n\n/**\n * @type {?webCrypto.SubtleCrypto}\n * @see http://www.w3.org/TR/WebCryptoAPI/#Crypto-attribute-subtle\n */\nwebCrypto.Crypto.prototype.subtle;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.crypto\n * @type {!webCrypto.Crypto|undefined}\n */\nvar crypto;\n', +-"externs/w3c_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s XML related specifications.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n *\n * Provides the XML standards from W3C.\n * Includes:\n * XPath - Fully type annotated\n * XMLHttpRequest - Fully type annotated\n *\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html\n * @see https://xhr.spec.whatwg.org/\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException\n */\nfunction XPathException() {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#INVALID_EXPRESSION_ERR\n */\nXPathException.INVALID_EXPRESSION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#TYPE_ERR\n */\nXPathException.TYPE_ERR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#\n */\nXPathException.prototype.code;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator\n */\nfunction XPathEvaluator() {}\n\n/**\n * @param {string} expr\n * @param {?XPathNSResolver=} opt_resolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createExpression\n * @throws XPathException\n * @throws DOMException\n * @return {undefined}\n */\nXPathEvaluator.prototype.createExpression = function(expr, opt_resolver) {};\n\n/**\n * @param {Node} nodeResolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createNSResolver\n * @return {undefined}\n */\nXPathEvaluator.prototype.createNSResolver = function(nodeResolver) {};\n\n/**\n * @param {string} expr\n * @param {Node} contextNode\n * @param {?XPathNSResolver=} opt_resolver\n * @param {?number=} opt_type\n * @param {*=} opt_result\n * @return {XPathResult}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate\n */\nXPathEvaluator.prototype.evaluate = function(expr, contextNode, opt_resolver,\n opt_type, opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression\n */\nfunction XPathExpression() {}\n\n/**\n * @param {Node} contextNode\n * @param {number=} opt_type\n * @param {*=} opt_result\n * @return {*}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression-evaluate\n */\nXPathExpression.prototype.evaluate = function(contextNode, opt_type,\n opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver\n */\nfunction XPathNSResolver() {}\n\n/**\n * @param {string} prefix\n * @return {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver-lookupNamespaceURI\n */\nXPathNSResolver.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * From http://www.w3.org/TR/xpath\n *\n * XPath is a language for addressing parts of an XML document, designed to be\n * used by both XSLT and XPointer.\n *\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult\n */\nfunction XPathResult() {}\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-booleanValue\n */\nXPathResult.prototype.booleanValue;\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-invalid-iterator-state\n */\nXPathResult.prototype.invalidInteratorState;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-numberValue\n */\nXPathResult.prototype.numberValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-resultType\n */\nXPathResult.prototype.resultType;\n\n/**\n * @type {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-singleNodeValue\n */\nXPathResult.prototype.singleNodeValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshot-length\n */\nXPathResult.prototype.snapshotLength;\n\n/**\n * @type {string}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-stringValue\n */\nXPathResult.prototype.stringValue;\n\n/**\n * @return {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @throws DOMException {@see DOMException.INVALID_STATE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-iterateNext\n */\nXPathResult.prototype.iterateNext = function() {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @throws XPathException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshotItem\n */\nXPathResult.prototype.snapshotItem = function(index) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-TYPE\n */\nXPathResult.ANY_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-NUMBER-TYPE\n */\nXPathResult.NUMBER_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-STRING-TYPE\n */\nXPathResult.STRING_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-BOOLEAN-TYPE\n */\nXPathResult.BOOLEAN_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.UNORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.ORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.ORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-UNORDERED-NODE-TYPE\n */\nXPathResult.ANY_UNORDERED_NODE_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-FIRST-ORDERED-NODE-TYPE\n */\nXPathResult.FIRST_ORDERED_NODE_TYPE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace\n */\nfunction XPathNamespace() {}\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace-ownerElement\n */\nXPathNamespace.prototype.ownerElement;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPATH_NAMESPACE_NODE\n */\nXPathNamespace.XPATH_NAMESPACE_NODE;\n\n/**\n * From https://xhr.spec.whatwg.org/#xmlhttprequest\n *\n * (Draft)\n *\n * The XMLHttpRequest Object specification defines an API that provides\n * scripted client functionality for transferring data between a client and a\n * server.\n *\n * @constructor\n * @implements {EventTarget}\n * @see https://xhr.spec.whatwg.org/#xmlhttprequest\n */\nfunction XMLHttpRequest() {}\n\n/** @override */\nXMLHttpRequest.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {string} method\n * @param {string} url\n * @param {?boolean=} opt_async\n * @param {?string=} opt_user\n * @param {?string=} opt_password\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-open()-method\n */\nXMLHttpRequest.prototype.open = function(method, url, opt_async, opt_user,\n opt_password) {};\n\n/**\n * @param {string} header\n * @param {string} value\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n */\nXMLHttpRequest.prototype.setRequestHeader = function(header, value) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|string=} opt_data\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-send()-method\n */\nXMLHttpRequest.prototype.send = function(opt_data) {};\n\n/**\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-abort()-method\n */\nXMLHttpRequest.prototype.abort = function() {};\n\n/**\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n */\nXMLHttpRequest.prototype.getAllResponseHeaders = function() {};\n\n/**\n * @param {string} header\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n */\nXMLHttpRequest.prototype.getResponseHeader = function(header) {};\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responsetext-attribute\n */\nXMLHttpRequest.prototype.responseText;\n\n/**\n * This is not supported in any IE browser (as of August 2016).\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responseurl-attribute\n */\nXMLHttpRequest.prototype.responseURL;\n\n/**\n * @type {Document}\n * @see https://xhr.spec.whatwg.org/#the-responsexml-attribute\n */\nXMLHttpRequest.prototype.responseXML;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate\n */\nXMLHttpRequest.prototype.readyState;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-status-attribute\n */\nXMLHttpRequest.prototype.status;\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-statustext-attribute\n */\nXMLHttpRequest.prototype.statusText;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-timeout-attribute\n */\nXMLHttpRequest.prototype.timeout;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onreadystatechange;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onerror;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.UNSENT;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.OPENED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.HEADERS_RECEIVED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.LOADING;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.DONE;\n\n\n/**\n * @see https://xhr.spec.whatwg.org/#formdataentryvalue\n * @typedef {!File|string}\n */\nvar FormDataEntryValue;\n\n/**\n * The FormData object represents an ordered collection of entries. Each entry\n * has a name and value.\n *\n * @param {?Element=} form An optional form to use for constructing the form\n * data set.\n * @constructor\n * @implements {Iterable>}\n * @see https://xhr.spec.whatwg.org/#interface-formdata\n */\nfunction FormData(form) {}\n\n/**\n * @param {string} name\n * @param {?Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-append\n */\nFormData.prototype.append = function(name, value, filename) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-delete\n */\nFormData.prototype.delete = function(name) {};\n\n/**\n * @param {string} name\n * @return {?FormDataEntryValue}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-get\n */\nFormData.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-getall\n */\nFormData.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-has\n */\nFormData.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {!Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-set\n */\nFormData.prototype.set = function(name, value, filename) {};\n\n', +-"externs/window.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins for windows properties.\n *\n * @externs\n * @author acleung@google.com (Alan Leung)\n * @author stevey@google.com (Steve Yegge)\n */\n\n// Window properties\n// Only common properties are here. Others such as open()\n// should be used with an explicit Window object.\n\n/**\n * @const {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.top\n */\nvar top;\n\n/**\n * @const {!Navigator}\n * @see https://developer.mozilla.org/en/DOM/window.navigator\n */\nvar navigator;\n\n/**\n * @const {!HTMLDocument}\n * @see https://developer.mozilla.org/en/DOM/window.document\n */\nvar document;\n\n/**\n * @const {!Location}\n * @see https://developer.mozilla.org/en/DOM/window.location\n * @suppress {duplicate}\n * @implicitCast\n */\nvar location;\n\n/**\n * @const {!Screen}\n * @see https://developer.mozilla.org/En/DOM/window.screen\n */\nvar screen;\n\n/**\n * @const {!Window}\n * @see https://developer.mozilla.org/En/DOM/Window.self\n */\nvar self;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window\n */\nvar window;\n\n/**\n * @const {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/isSecureContext\n */\nvar isSecureContext;\n\n/**\n * @const {!VisualViewport}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/visualViewport\n */\nvar visualViewport;\n\n/**\n * @param {*} message\n * @see https://developer.mozilla.org/en/DOM/window.alert\n * @return {undefined}\n */\nfunction alert(message) {}\n\n/**\n * @param {number=} immediateID\n * @see https://developer.mozilla.org/en-US/docs/DOM/window.clearImmediate\n * @see http://msdn.microsoft.com/en-us/library/ie/hh924825(v=vs.85).aspx\n * @return {undefined}\n */\nfunction clearImmediate(immediateID) {}\n\n/**\n * @param {?number|undefined} intervalID\n * @see https://developer.mozilla.org/en/DOM/window.clearInterval\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearInterval(intervalID) {}\n\n/**\n * @param {?number|undefined} timeoutID\n * @see https://developer.mozilla.org/en/DOM/window.clearTimeout\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearTimeout(timeoutID) {}\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.confirm\n */\nfunction confirm(message) {}\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.dump\n * @param {*} x\n * @return {undefined}\n */\nfunction dump(x) {}\n\n/**\n * @param {string} message\n * @param {string=} opt_value\n * @return {?string}\n * @see https://developer.mozilla.org/en/DOM/window.prompt\n */\nfunction prompt(message, opt_value) {}\n\n/**\n * @param {function()} callback\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.mozilla.org/en-US/docs/DOM/window.setImmediate\n * @see http://msdn.microsoft.com/en-us/library/ie/hh773176(v=vs.85).aspx\n */\nfunction setImmediate(callback, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.mozilla.org/en/DOM/window.setInterval\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setInterval(callback, opt_delay, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...*} callbackParams\n * @return {number}\n * @see https://developer.mozilla.org/en/DOM/window.setTimeout\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setTimeout(callback, opt_delay, callbackParams) {}\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nfunction hasOwnProperty (propertyName) {}\n', ++"externs/w3c_vibration.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Vibration API based on "W3C Recommendation 18 October 2016"\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/\n *\n * @externs\n * @author vobruba.martin@9ma1l.qjz9zk (Martin Vobruba)\n */\n\n\n/**\n * @typedef {number|!Array}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-vibratepattern\n */\nvar VibratePattern;\n\n\n/**\n * @param {!VibratePattern} pattern\n * @return {boolean}\n * @see https://www.w3.org/TR/2016/REC-vibration-20161018/#idl-def-navigator-vibrate(vibratepattern)\n */\nNavigator.prototype.vibrate = function(pattern) {};\n', ++"externs/w3c_webcrypto.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Definitions for W3C\'s Web Cryptography specification\n * http://www.w3.org/TR/webCryptoAPI\n * @externs\n * @author chrismoon@9oo91e.qjz9zk (Chris Moon)\n * This file was created using the best practices as described in:\n * chrome_extensions.js\n */\n\n\n/**\n * @const\n * @see http://www.w3.org/TR/webCryptoAPI\n */\nvar webCrypto = {};\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#algorithm-dictionary\n */\nwebCrypto.Algorithm;\n\n\n/**\n * @typedef {string|!webCrypto.Algorithm}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-AlgorithmIdentifier\n */\nwebCrypto.AlgorithmIdentifier;\n\n/**\n * @typedef {webCrypto.AlgorithmIdentifier}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-HashAlgorithmIdentifier\n */\nwebCrypto.HashAlgorithmIdentifier;\n\n\n/**\n * @typedef {Uint8Array}\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-BigInteger\n */\nwebCrypto.BigInteger;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/webCryptoAPI/#dfn-CryptoKey\n */\nwebCrypto.CryptoKey = function() {};\n\n\n/**\n * @type {string} An enumerated value representing the type of the key, a secret\n * key (for symmetric algorithm), a public or a private key\n * (for an asymmetric algorithm).\n */\nwebCrypto.CryptoKey.prototype.type;\n\n\n/**\n * @type {boolean} Determines whether or not the raw keying material may be\n * exported by the application.\n */\nwebCrypto.CryptoKey.prototype.extractable;\n\n\n/**\n * @type {!Object} An opaque object representing a particular cipher the key\n * has to be used with.\n */\nwebCrypto.CryptoKey.prototype.algorithm;\n\n\n/**\n * @type {!Object} Returns the cached ECMAScript object associated with the\n * usages internal slot, which indicates which cryptographic operations are\n * permissible to be used with this key.\n */\nwebCrypto.CryptoKey.prototype.usages;\n\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/WebCryptoAPI/#keypair\n */\nwebCrypto.CryptoKeyPair = function() {};\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.publicKey;\n\n\n/**\n * @type {!webCrypto.CryptoKey}\n */\nwebCrypto.CryptoKeyPair.prototype.privateKey;\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#key-algorithm-dictionary-members\n */\nwebCrypto.KeyAlgorithm;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-JsonWebKey\n * @see Section 3.1:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n */\nwebCrypto.JsonWebKey = function() {};\n\n\n/**\n * @type {string} Identifies the cryptographic algorithm family used with\n * the key, such as "RSA" or "EC".\n */\nwebCrypto.JsonWebKey.prototype.kty;\n\n\n/**\n * @type {string} Identifies the intended use of the public key.\n */\nwebCrypto.JsonWebKey.prototype.use;\n\n\n/**\n * @type {!Array} Identifies the operation(s) that the key is\n * intended to be used for.\n */\nwebCrypto.JsonWebKey.prototype.key_ops;\n\n\n/**\n * @type {string} Identifies the algorithm intended for use with the key.\n */\nwebCrypto.JsonWebKey.prototype.alg;\n\n\n/**\n * @type {boolean} Boolean to be used with kty values.\n */\nwebCrypto.JsonWebKey.prototype.ext;\n\n\n/**\n * @type {string} Identifies the cryptographic curve used with the key.\n */\nwebCrypto.JsonWebKey.prototype.crv;\n\n\n/**\n * @type {string} Contains the x coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.x;\n\n\n/**\n * @type {string} Contains the y coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.y;\n\n\n/**\n * @type {string} Contains the Elliptic Curve private key value.\n */\nwebCrypto.JsonWebKey.prototype.d;\n\n\n/**\n * @type {string} Contains the modulus value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.n;\n\n\n/**\n * @type {string} Contains the exponent value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.e;\n\n\n/**\n * @type {string} Contains the first prime factor.\n */\nwebCrypto.JsonWebKey.prototype.p;\n\n\n/**\n * @type {string} Contains the second prime factor.\n */\nwebCrypto.JsonWebKey.prototype.q;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the first factor.\n */\nwebCrypto.JsonWebKey.prototype.dp;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the second factor.\n */\nwebCrypto.JsonWebKey.prototype.dq;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) coefficient\n * of the second factor.\n */\nwebCrypto.JsonWebKey.prototype.qi;\n\n\n/**\n * @type {!Array} Contains an array of\n * information about any third and subsequent primes, should they exist.\n */\nwebCrypto.JsonWebKey.prototype.oth;\n\n\n/**\n * @type {string} Contains the value of the symmetric (or other\n * single-valued) key.\n */\nwebCrypto.JsonWebKey.prototype.k;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-RsaOtherPrimesInfo\n * @see Section-6.3.2.7:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n */\nwebCrypto.RsaOtherPrimesInfo = function() {};\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the value\n * of a subsequent prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.r;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * exponent of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.d;\n\n\n/**\n * @type {string} Parameter within an "oth" array member represents the CRT\n * coefficient of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.t;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyGenParams\n */\nwebCrypto.RsaKeyGenParams;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyGenParams.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyGenParams.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyGenParams\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyGenParams\n */\nwebCrypto.RsaHashedKeyGenParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedKeyGenParams.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.KeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaKeyAlgorithm\n */\nwebCrypto.RsaKeyAlgorithm;\n/**\n * @type {number}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.modulusLength;\n/**\n * @type {webCrypto.BigInteger}\n */\nwebCrypto.RsaKeyAlgorithm.prototype.publicExponent;\n\n\n/**\n * @record\n * @extends webCrypto.RsaKeyAlgorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedKeyAlgorithm\n */\nwebCrypto.RsaHashedKeyAlgorithm;\n/**\n * @type {webCrypto.KeyAlgorithm}\n */\nwebCrypto.RsaHashedKeyAlgorithm.prototype.hash;\n\n\n/**\n * @record\n * @extends webCrypto.Algorithm\n * @see https://www.w3.org/TR/WebCryptoAPI/#dfn-RsaHashedImportParams\n */\nwebCrypto.RsaHashedImportParams;\n/**\n * @type {webCrypto.HashAlgorithmIdentifier}\n */\nwebCrypto.RsaHashedImportParams.prototype.hash;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface\n */\nwebCrypto.SubtleCrypto = function() {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be encrypted (cleartext).\n * @return {!Promise} Ciphertext generated by the encryption of\n * the cleartext.\n */\nwebCrypto.SubtleCrypto.prototype.encrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be decrypted (ciphertext).\n * @return {!Promise} Cleartext generated by the decryption of the\n * ciphertext.\n */\nwebCrypto.SubtleCrypto.prototype.decrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} data Data to be signed.\n * @return {!Promise} Returns the signature on success.\n */\nwebCrypto.SubtleCrypto.prototype.sign = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} signature Signature to verify.\n * @param {!BufferSource} data Data whose signature needs to be verified.\n * @return {!Promise} Returns if the signature operating has been\n * successful.\n */\nwebCrypto.SubtleCrypto.prototype.verify = function(algorithm, key,\n signature, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {!BufferSource} data Data to be hashed using the hashing algorithm.\n * @return {!Promise} returns the hash on success.\n */\nwebCrypto.SubtleCrypto.prototype.digest = function(algorithm, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedKeyGenParams}\n * algorithm Supported values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.generateKey = function(algorithm,\n extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use. Supported values are: ECDH, DH, PBKDF2, and HKDF-CTR.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {!webCrypto.AlgorithmIdentifier} derivedKeyAlgo Defines the key\n * derivation algorithm to use.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the\n * generated key.\n */\nwebCrypto.SubtleCrypto.prototype.deriveKey = function(algorithm,\n baseKey, derivedKeyAlgo, extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {number} length\n * @return {!Promise} returns the generated bits.\n */\nwebCrypto.SubtleCrypto.prototype.deriveBits = function(algorithm,\n baseKey, length) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!BufferSource|!webCrypto.JsonWebKey} keyData The key\n * in the given format.\n * @param {!webCrypto.AlgorithmIdentifier|webCrypto.RsaHashedImportParams}\n * algorithm Supported values are: AES-CTR, AES-CBC, AES-GCM, RSA-OAEP,\n * AES-KW, HMAC, RSASSA-PKCS1-v1_5, ECDSA, ECDH, DH.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise} returns the generated key.\n */\nwebCrypto.SubtleCrypto.prototype.importKey = function(format, keyData,\n algorithm, extractable, keyUsages) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!webCrypto.CryptoKey} key CryptoKey to export.\n * @return {!Promise} returns the key in the\n * requested format.\n */\nwebCrypto.SubtleCrypto.prototype.exportKey = function(format, key) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!webCrypto.CryptoKey} key CryptoKey to wrap.\n * @param {!webCrypto.CryptoKey} wrappingKey CryptoKey used to perform\n * the wrapping.\n * @param {!webCrypto.AlgorithmIdentifier} wrapAlgorithm algorithm used\n * to perform the wrapping. It is one of the following: AES-CBC, AES-CTR,\n * AES-GCM, RSA-OAEP, and AES-KW.\n * @return {!Promise} returns the wrapped key in the requested\n * format.\n */\nwebCrypto.SubtleCrypto.prototype.wrapKey = function(format,\n key, wrappingKey, wrapAlgorithm) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!BufferSource} wrappedKey Contains the wrapped key in the given\n * format.\n * @param {!webCrypto.CryptoKey} unwrappingKey CryptoKey used to perform\n * the unwrapping.\n * @param {!webCrypto.AlgorithmIdentifier} unwrapAlgorithm Algorithm\n * used to perform the unwrapping. It is one of the following: AES-CBC,\n * AES-CTR, AES-GCM, RSA-OAEP, and AES-KW.\n * @param {!webCrypto.AlgorithmIdentifier} unwrappedKeyAlgorithm\n * Represents the algorithm of the wrapped key.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise} returns the unwrapped key.\n */\nwebCrypto.SubtleCrypto.prototype.unwrapKey = function(format, wrappedKey,\n unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable,\n keyUsages) {};\n\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Crypto\n * @interface\n */\nwebCrypto.Crypto = function() {};\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.crypto.getRandomValues\n * @param {!ArrayBufferView} typedArray\n * @return {!ArrayBufferView}\n * @throws {Error}\n */\nwebCrypto.Crypto.prototype.getRandomValues = function(typedArray) {};\n\n/**\n * @type {?webCrypto.SubtleCrypto}\n * @see http://www.w3.org/TR/WebCryptoAPI/#Crypto-attribute-subtle\n */\nwebCrypto.Crypto.prototype.subtle;\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.crypto\n * @type {!webCrypto.Crypto|undefined}\n */\nvar crypto;\n', ++"externs/w3c_xml.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C\'s XML related specifications.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n *\n * Provides the XML standards from W3C.\n * Includes:\n * XPath - Fully type annotated\n * XMLHttpRequest - Fully type annotated\n *\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html\n * @see https://xhr.spec.whatwg.org/\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException\n */\nfunction XPathException() {}\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#INVALID_EXPRESSION_ERR\n */\nXPathException.INVALID_EXPRESSION_ERR;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#TYPE_ERR\n */\nXPathException.TYPE_ERR;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#\n */\nXPathException.prototype.code;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator\n */\nfunction XPathEvaluator() {}\n\n/**\n * @param {string} expr\n * @param {?XPathNSResolver=} opt_resolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createExpression\n * @throws XPathException\n * @throws DOMException\n * @return {undefined}\n */\nXPathEvaluator.prototype.createExpression = function(expr, opt_resolver) {};\n\n/**\n * @param {Node} nodeResolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createNSResolver\n * @return {undefined}\n */\nXPathEvaluator.prototype.createNSResolver = function(nodeResolver) {};\n\n/**\n * @param {string} expr\n * @param {Node} contextNode\n * @param {?XPathNSResolver=} opt_resolver\n * @param {?number=} opt_type\n * @param {*=} opt_result\n * @return {XPathResult}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate\n */\nXPathEvaluator.prototype.evaluate = function(expr, contextNode, opt_resolver,\n opt_type, opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression\n */\nfunction XPathExpression() {}\n\n/**\n * @param {Node} contextNode\n * @param {number=} opt_type\n * @param {*=} opt_result\n * @return {*}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression-evaluate\n */\nXPathExpression.prototype.evaluate = function(contextNode, opt_type,\n opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver\n */\nfunction XPathNSResolver() {}\n\n/**\n * @param {string} prefix\n * @return {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver-lookupNamespaceURI\n */\nXPathNSResolver.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * From http://www.w3.org/TR/xpath\n *\n * XPath is a language for addressing parts of an XML document, designed to be\n * used by both XSLT and XPointer.\n *\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult\n */\nfunction XPathResult() {}\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-booleanValue\n */\nXPathResult.prototype.booleanValue;\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-invalid-iterator-state\n */\nXPathResult.prototype.invalidInteratorState;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-numberValue\n */\nXPathResult.prototype.numberValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-resultType\n */\nXPathResult.prototype.resultType;\n\n/**\n * @type {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-singleNodeValue\n */\nXPathResult.prototype.singleNodeValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshot-length\n */\nXPathResult.prototype.snapshotLength;\n\n/**\n * @type {string}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-stringValue\n */\nXPathResult.prototype.stringValue;\n\n/**\n * @return {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @throws DOMException {@see DOMException.INVALID_STATE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-iterateNext\n */\nXPathResult.prototype.iterateNext = function() {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @throws XPathException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshotItem\n */\nXPathResult.prototype.snapshotItem = function(index) {};\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-TYPE\n */\nXPathResult.ANY_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-NUMBER-TYPE\n */\nXPathResult.NUMBER_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-STRING-TYPE\n */\nXPathResult.STRING_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-BOOLEAN-TYPE\n */\nXPathResult.BOOLEAN_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.UNORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.ORDERED_NODE_ITERATOR_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.ORDERED_NODE_SNAPSHOT_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-UNORDERED-NODE-TYPE\n */\nXPathResult.ANY_UNORDERED_NODE_TYPE;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-FIRST-ORDERED-NODE-TYPE\n */\nXPathResult.FIRST_ORDERED_NODE_TYPE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace\n */\nfunction XPathNamespace() {}\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace-ownerElement\n */\nXPathNamespace.prototype.ownerElement;\n\n/**\n * @const {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPATH_NAMESPACE_NODE\n */\nXPathNamespace.XPATH_NAMESPACE_NODE;\n\n/**\n * From https://xhr.spec.whatwg.org/#xmlhttprequest\n *\n * (Draft)\n *\n * The XMLHttpRequest Object specification defines an API that provides\n * scripted client functionality for transferring data between a client and a\n * server.\n *\n * @constructor\n * @implements {EventTarget}\n * @see https://xhr.spec.whatwg.org/#xmlhttprequest\n */\nfunction XMLHttpRequest() {}\n\n/** @override */\nXMLHttpRequest.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nXMLHttpRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {string} method\n * @param {string} url\n * @param {?boolean=} opt_async\n * @param {?string=} opt_user\n * @param {?string=} opt_password\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-open()-method\n */\nXMLHttpRequest.prototype.open = function(method, url, opt_async, opt_user,\n opt_password) {};\n\n/**\n * @param {string} header\n * @param {string} value\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n */\nXMLHttpRequest.prototype.setRequestHeader = function(header, value) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|string=} opt_data\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-send()-method\n */\nXMLHttpRequest.prototype.send = function(opt_data) {};\n\n/**\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#the-abort()-method\n */\nXMLHttpRequest.prototype.abort = function() {};\n\n/**\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n */\nXMLHttpRequest.prototype.getAllResponseHeaders = function() {};\n\n/**\n * @param {string} header\n * @return {string}\n * @see https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n */\nXMLHttpRequest.prototype.getResponseHeader = function(header) {};\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responsetext-attribute\n */\nXMLHttpRequest.prototype.responseText;\n\n/**\n * This is not supported in any IE browser (as of August 2016).\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-responseurl-attribute\n */\nXMLHttpRequest.prototype.responseURL;\n\n/**\n * @type {Document}\n * @see https://xhr.spec.whatwg.org/#the-responsexml-attribute\n */\nXMLHttpRequest.prototype.responseXML;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate\n */\nXMLHttpRequest.prototype.readyState;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-status-attribute\n */\nXMLHttpRequest.prototype.status;\n\n/**\n * @type {string}\n * @see https://xhr.spec.whatwg.org/#the-statustext-attribute\n */\nXMLHttpRequest.prototype.statusText;\n\n/**\n * @type {number}\n * @see https://xhr.spec.whatwg.org/#the-timeout-attribute\n */\nXMLHttpRequest.prototype.timeout;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onreadystatechange;\n\n/**\n * @type {?function(!Event)}\n * @see https://xhr.spec.whatwg.org/#event-handlers\n */\nXMLHttpRequest.prototype.onerror;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.UNSENT;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.OPENED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.HEADERS_RECEIVED;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.LOADING;\n\n/**\n * @const {number}\n * @see https://xhr.spec.whatwg.org/#states\n */\nXMLHttpRequest.DONE;\n\n\n/**\n * @see https://xhr.spec.whatwg.org/#formdataentryvalue\n * @typedef {!File|string}\n */\nvar FormDataEntryValue;\n\n/**\n * The FormData object represents an ordered collection of entries. Each entry\n * has a name and value.\n *\n * @param {?Element=} form An optional form to use for constructing the form\n * data set.\n * @constructor\n * @implements {Iterable>}\n * @see https://xhr.spec.whatwg.org/#interface-formdata\n */\nfunction FormData(form) {}\n\n/**\n * @param {string} name\n * @param {?Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-append\n */\nFormData.prototype.append = function(name, value, filename) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-delete\n */\nFormData.prototype.delete = function(name) {};\n\n/**\n * @param {string} name\n * @return {?FormDataEntryValue}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-get\n */\nFormData.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-getall\n */\nFormData.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-has\n */\nFormData.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {!Blob|string} value\n * @param {string=} filename\n * @return {undefined}\n * @see https://xhr.spec.whatwg.org/#dom-formdata-set\n */\nFormData.prototype.set = function(name, value, filename) {};\n\n', ++"externs/window.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins for windows properties.\n *\n * @externs\n * @author acleung@9oo91e.qjz9zk (Alan Leung)\n * @author stevey@9oo91e.qjz9zk (Steve Yegge)\n */\n\n// Window properties\n// Only common properties are here. Others such as open()\n// should be used with an explicit Window object.\n\n/**\n * @const {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.top\n */\nvar top;\n\n/**\n * @const {!Navigator}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.navigator\n */\nvar navigator;\n\n/**\n * @const {!HTMLDocument}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.document\n */\nvar document;\n\n/**\n * @const {!Location}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.location\n * @suppress {duplicate}\n * @implicitCast\n */\nvar location;\n\n/**\n * @const {!Screen}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/window.screen\n */\nvar screen;\n\n/**\n * @const {!Window}\n * @see https://developer.m0z111a.qjz9zk/En/DOM/Window.self\n */\nvar self;\n\n/**\n * @type {!Window}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window\n */\nvar window;\n\n/**\n * @const {boolean}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/isSecureContext\n */\nvar isSecureContext;\n\n/**\n * @const {!VisualViewport}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/API/Window/visualViewport\n */\nvar visualViewport;\n\n/**\n * @param {*} message\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.alert\n * @return {undefined}\n */\nfunction alert(message) {}\n\n/**\n * @param {number=} immediateID\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/DOM/window.clearImmediate\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh924825(v=vs.85).aspx\n * @return {undefined}\n */\nfunction clearImmediate(immediateID) {}\n\n/**\n * @param {?number|undefined} intervalID\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.clearInterval\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearInterval(intervalID) {}\n\n/**\n * @param {?number|undefined} timeoutID\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.clearTimeout\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearTimeout(timeoutID) {}\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.confirm\n */\nfunction confirm(message) {}\n\n/**\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.dump\n * @param {*} x\n * @return {undefined}\n */\nfunction dump(x) {}\n\n/**\n * @param {string} message\n * @param {string=} opt_value\n * @return {?string}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.prompt\n */\nfunction prompt(message, opt_value) {}\n\n/**\n * @param {function()} callback\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/DOM/window.setImmediate\n * @see http://msdn.m1cr050ft.qjz9zk/en-us/library/ie/hh773176(v=vs.85).aspx\n */\nfunction setImmediate(callback, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...?} callbackParams\n * @return {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.setInterval\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setInterval(callback, opt_delay, callbackParams) {}\n\n/**\n * @param {Function|!TrustedScript|string} callback\n * @param {number=} opt_delay\n * @param {...*} callbackParams\n * @return {number}\n * @see https://developer.m0z111a.qjz9zk/en/DOM/window.setTimeout\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setTimeout(callback, opt_delay, callbackParams) {}\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nfunction hasOwnProperty (propertyName) {}\n', + "externs/web_animations.js":"/*\n * Copyright 2016 The Closure Compiler authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Basic externs for the Web Animations API. This is not\n * nessecarily exhaustive. For more information, see the spec-\n * https://w3c.github.io/web-animations\n * @externs\n */\n\n\n/**\n * @param {!Object} frames\n * @param {(number|KeyframeAnimationOptions)=} options\n * @return {!Animation}\n * @see https://www.w3.org/TR/web-animations/#the-animatable-interface-mixin\n */\nElement.prototype.animate = function(frames, options) {};\n\n/**\n * @return {!Array}\n */\nElement.prototype.getAnimations = function() {};\n\n\n/**\n * @constructor\n * @param {AnimationEffectReadOnly=} effect\n * @param {AnimationTimeline=} timeline\n * @implements {EventTarget}\n */\nvar Animation = function(effect, timeline) {};\n\n/** @override */\nAnimation.prototype.addEventListener = function(type, listener, options) {};\n\n/** @override */\nAnimation.prototype.removeEventListener = function(type, listener, options) {};\n\n/** @override */\nAnimation.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.cancel = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.finish = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.pause = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.play = function() {};\n\n/**\n * @return {undefined}\n */\nAnimation.prototype.reverse = function() {};\n\n/** @type {number} */\nAnimation.prototype.currentTime;\n\n/** @type {AnimationEffectReadOnly} */\nAnimation.prototype.effect;\n\n/** @type {!Promise} */\nAnimation.prototype.finished;\n\n/** @type {string} */\nAnimation.prototype.id;\n\n/** @type {?function(!Event)} */\nAnimation.prototype.oncancel;\n\n/** @type {?function(!Event)} */\nAnimation.prototype.onfinish;\n\n/** @type {number} */\nAnimation.prototype.playbackRate;\n\n/** @type {string} */\nAnimation.prototype.playState;\n\n/** @type {!Promise} */\nAnimation.prototype.ready;\n\n/** @type {number} */\nAnimation.prototype.startTime;\n\n/** @type {!AnimationTimeline} */\nAnimation.prototype.timeline;\n\n\n/**\n * @interface\n */\nvar AnimationEffectReadOnly = function() {};\n\n/**\n * @return {!ComputedTimingProperties}\n */\nAnimationEffectReadOnly.prototype.getComputedTiming = function() {};\n\n/** @type {!AnimationEffectTiming} */\nAnimationEffectReadOnly.prototype.timing;\n\n\n/**\n * @constructor\n * @param {Element} target\n * @param {(!Array>|!Object>)} frames\n * @param {(number|AnimationEffectTimingProperties)=} options\n * @implements {AnimationEffectReadOnly}\n */\nvar KeyframeEffectReadOnly = function(target, frames, options) {};\n\n/** @override */\nKeyframeEffectReadOnly.prototype.getComputedTiming = function() {};\n\n/** @override */\nKeyframeEffectReadOnly.prototype.timing;\n\n\n/**\n * @constructor\n * @param {Element} target\n * @param {(!Array>|!Object>)} frames\n * @param {(number|AnimationEffectTimingProperties)=} options\n * @extends {KeyframeEffectReadOnly}\n */\nvar KeyframeEffect = function(target, frames, options) {};\n\n\n/**\n * @record\n */\nvar AnimationEffectTimingProperties = function() {};\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.delay;\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.endDelay;\n\n/** @type {string|undefined} */\nAnimationEffectTimingProperties.prototype.fill;\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.iterationStart;\n\n/** @type {number|undefined} */\nAnimationEffectTimingProperties.prototype.iterations;\n\n/** @type {number|string|undefined} */\nAnimationEffectTimingProperties.prototype.duration;\n\n/** @type {string|undefined} */\nAnimationEffectTimingProperties.prototype.direction;\n\n/** @type {string|undefined} */\nAnimationEffectTimingProperties.prototype.easing;\n\n/**\n * @record\n * @extends {AnimationEffectTimingProperties}\n */\nvar KeyframeEffectOptions = function() {};\n\n/**\n * Possible values: 'replace', 'accumulate'\n * @type {string|undefined}\n */\nKeyframeEffectOptions.prototype.iterationComposite;\n\n/**\n * Possible values: 'replace', 'add', 'accumulate'\n * @type {string|undefined}\n */\nKeyframeEffectOptions.prototype.composite;\n\n/**\n * @record\n * @extends {KeyframeEffectOptions}\n */\nvar KeyframeAnimationOptions = function() {};\n\n/** @type {string|undefined} */\nKeyframeAnimationOptions.prototype.id;\n\n\n/**\n * @record\n * @extends {AnimationEffectTimingProperties}\n */\nvar ComputedTimingProperties = function() {};\n\n/** @type {number} */\nComputedTimingProperties.prototype.endTime;\n\n/** @type {number} */\nComputedTimingProperties.prototype.activeDuration;\n\n/** @type {?number} */\nComputedTimingProperties.prototype.localTime;\n\n/** @type {?number} */\nComputedTimingProperties.prototype.progress;\n\n/** @type {?number} */\nComputedTimingProperties.prototype.currentIteration;\n\n\n/**\n * @interface\n */\nvar AnimationEffectTimingReadOnly = function() {};\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.delay;\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.endDelay;\n\n/** @type {string} */\nAnimationEffectTimingReadOnly.prototype.fill;\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.iterationStart;\n\n/** @type {number} */\nAnimationEffectTimingReadOnly.prototype.iterations;\n\n/** @type {number|string} */\nAnimationEffectTimingReadOnly.prototype.duration;\n\n/** @type {string} */\nAnimationEffectTimingReadOnly.prototype.direction;\n\n/** @type {string} */\nAnimationEffectTimingReadOnly.prototype.easing;\n\n\n/**\n * @interface\n * @extends {AnimationEffectTimingReadOnly}\n */\nvar AnimationEffectTiming = function() {};\n\n\n/**\n * @interface\n */\nvar AnimationTimeline = function() {};\n\n/** @type {?number} */\nAnimationTimeline.prototype.currentTime;\n\n\n/**\n * @constructor\n * @implements {AnimationTimeline}\n */\nvar DocumentTimeline = function() {};\n\n/** @override */\nDocumentTimeline.prototype.currentTime;\n\n\n/** @type {!DocumentTimeline} */\nDocument.prototype.timeline;\n\n/**\n * Externs for the Web Animations API (Level 2 / Groups).\n *\n * This defines externs for the \"-next\" version of the Web Animations API\n * polyfill found online at:\n * https://github.com/web-animations/web-animations.js\n *\n * These features are NOT natively implemented in browsers and are not clearly\n * part of the official spec. This is NOT intended to be exhaustive, and\n * requires the base externs from web-animations.js.\n *\n */\n\n\n/** @type {Element} */\nKeyframeEffectReadOnly.prototype.target;\n\n/** @type {?function(number, !KeyframeEffect, !Animation)|undefined} */\nKeyframeEffectReadOnly.prototype.onsample;\n\n\n/**\n * @param {!AnimationEffectReadOnly} effect\n * @return {!Animation}\n */\nDocumentTimeline.prototype.play = function(effect) {};\n\n/**\n * @return {!Array}\n */\nDocumentTimeline.prototype.getAnimations = function() {};\n\n\n/**\n * @param {!Array} children\n * @param {AnimationEffectTimingProperties=} timing\n * @constructor\n * @implements {AnimationEffectReadOnly}\n */\nvar SequenceEffect = function(children, timing) {};\n\n/** @override */\nSequenceEffect.prototype.getComputedTiming = function() {};\n\n/** @override */\nSequenceEffect.prototype.timing;\n\n/** @type {!Array} */\nSequenceEffect.prototype.children;\n\n\n/**\n * @param {!Array} children\n * @param {AnimationEffectTimingProperties=} timing\n * @constructor\n * @implements {AnimationEffectReadOnly}\n */\nvar GroupEffect = function(children, timing) {};\n\n/** @override */\nGroupEffect.prototype.getComputedTiming = function() {};\n\n/** @override */\nGroupEffect.prototype.timing;\n\n/** @type {!Array} */\nGroupEffect.prototype.children;\n", +-"externs/webkit_notifications.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s Notifications specification.\n * @externs\n * @author atwilson@google.com (Drew Wilson)\n */\n\n/**\n * @typedef {{\n * dir: (string|undefined),\n * lang: (string|undefined),\n * body: (string|undefined),\n * tag: (string|undefined),\n * image: (string|undefined),\n * icon: (string|undefined),\n * badge: (string|undefined),\n * vibrate: (!Array|undefined),\n * timestamp: (number|undefined),\n * renotify: (boolean|undefined),\n * silent: (boolean|undefined),\n * requireInteraction: (boolean|undefined),\n * data: (*|undefined),\n * actions: (!Array|undefined),\n * }}\n * TODO(rsk): change the type of data to a serializable object\n * (https://html.spec.whatwg.org/multipage/structured-data.html).\n *\n * @see http://notifications.spec.whatwg.org/#notification\n */\nvar NotificationOptions;\n\n/**\n * @typedef {{action: string, title: string, icon: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-notificationoptions\n */\nvar NotificationAction;\n\n/**\n * @typedef {{tag: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-getnotificationoptions\n */\nvar GetNotificationOptions;\n\n/** @interface */\nvar NotificationOptionsInterface_ = function() {}\n/** @type {string} */ NotificationOptionsInterface_.prototype.dir;\n/** @type {string} */ NotificationOptionsInterface_.prototype.lang;\n/** @type {string} */ NotificationOptionsInterface_.prototype.body;\n/** @type {string} */ NotificationOptionsInterface_.prototype.tag;\n/** @type {string} */ NotificationOptionsInterface_.prototype.icon;\n/** @type {boolean} */\n NotificationOptionsInterface_.prototype.requireInteraction;\n\n/**\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n * @see http://notifications.spec.whatwg.org/#notification\n */\nfunction Notification(title, opt_options) {}\n\n/**\n * @type {string}\n */\nNotification.permission;\n\n/**\n * @param {NotificationPermissionCallback=} opt_callback\n * @return {!Promise}\n */\nNotification.requestPermission = function(opt_callback) {};\n\n/** @override */\nNotification.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {string}\n */\nNotification.prototype.title;\n\n/**\n * @type {string}\n */\nNotification.prototype.body;\n\n/**\n * @type {string}\n */\nNotification.prototype.icon;\n\n/**\n * The string used by clients to identify the notification.\n * @type {string}\n */\nNotification.prototype.tag;\n\n/**\n * The ID used by clients to uniquely identify notifications to eliminate\n * duplicate notifications.\n * @type {string}\n * @deprecated Use NotificationOptions.tag instead.\n */\nNotification.prototype.replaceId;\n\n/**\n * @type {*}\n */\nNotification.prototype.data;\n\n/**\n * The string used by clients to specify the directionality (rtl/ltr) of the\n * notification.\n * @type {string}\n * @deprecated Use NotificationOptions.titleDir and bodyDir instead.\n */\nNotification.prototype.dir;\n\n/**\n * Displays the notification.\n * @return {undefined}\n */\nNotification.prototype.show = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.cancel = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.close = function() {};\n\n/**\n * An event handler called when notification is closed.\n * @type {?function(Event)}\n */\nNotification.prototype.onclose;\n\n/**\n * An event handler called if the notification could not be displayed due to\n * an error (i.e. resource could not be loaded).\n * @type {?function(Event)}\n */\nNotification.prototype.onerror;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n * @deprecated Use onshow instead.\n */\nNotification.prototype.ondisplay;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n */\nNotification.prototype.onshow;\n\n/**\n * An event handler called when the notification has been clicked on.\n * @type {?function(Event)}\n */\nNotification.prototype.onclick;\n\n\n\n/**\n * @typedef {function(string)}\n * @see http://notifications.spec.whatwg.org/#notificationpermissioncallback\n */\nvar NotificationPermissionCallback;\n\n/**\n * @constructor\n * @see http://dev.w3.org/2006/webapi/WebNotifications/publish/#dialog-if\n * @deprecated Use Notification instead.\n */\nfunction NotificationCenter() {}\n\n/**\n * Creates a text+icon notification and displays it to the user.\n * @param {string} iconUrl\n * @param {string} title\n * @param {string} body\n * @return {Notification}\n */\nNotificationCenter.prototype.createNotification =\n function(iconUrl, title, body) {};\n\n/**\n * Creates an HTML notification and displays it to the user.\n * @param {string} url\n * @return {Notification}\n */\nNotificationCenter.prototype.createHTMLNotification = function(url) {};\n\n/**\n * Checks if the user has permission to display notifications.\n * @return {number}\n */\nNotificationCenter.prototype.checkPermission = function() {};\n\n/**\n * Requests permission from the user to display notifications.\n * @param {Function=} opt_callback\n * @return {void}\n */\nNotificationCenter.prototype.requestPermission = function(opt_callback) {};\n\n/**\n * WebKit browsers expose the NotificationCenter API through\n * window.webkitNotifications.\n * @type {NotificationCenter}\n */\nWindow.prototype.webkitNotifications;\n\n\n/**\n * @see https://notifications.spec.whatwg.org/#notificationevent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction NotificationEvent(type, opt_eventInitDict) {}\n\n/** @type {!Notification} */\nNotificationEvent.prototype.notification;\n\n/** @type {string} */\nNotificationEvent.prototype.action;\n', ++"externs/webkit_notifications.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C\'s Notifications specification.\n * @externs\n * @author atwilson@9oo91e.qjz9zk (Drew Wilson)\n */\n\n/**\n * @typedef {{\n * dir: (string|undefined),\n * lang: (string|undefined),\n * body: (string|undefined),\n * tag: (string|undefined),\n * image: (string|undefined),\n * icon: (string|undefined),\n * badge: (string|undefined),\n * vibrate: (!Array|undefined),\n * timestamp: (number|undefined),\n * renotify: (boolean|undefined),\n * silent: (boolean|undefined),\n * requireInteraction: (boolean|undefined),\n * data: (*|undefined),\n * actions: (!Array|undefined),\n * }}\n * TODO(rsk): change the type of data to a serializable object\n * (https://html.spec.whatwg.org/multipage/structured-data.html).\n *\n * @see http://notifications.spec.whatwg.org/#notification\n */\nvar NotificationOptions;\n\n/**\n * @typedef {{action: string, title: string, icon: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-notificationoptions\n */\nvar NotificationAction;\n\n/**\n * @typedef {{tag: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-getnotificationoptions\n */\nvar GetNotificationOptions;\n\n/** @interface */\nvar NotificationOptionsInterface_ = function() {}\n/** @type {string} */ NotificationOptionsInterface_.prototype.dir;\n/** @type {string} */ NotificationOptionsInterface_.prototype.lang;\n/** @type {string} */ NotificationOptionsInterface_.prototype.body;\n/** @type {string} */ NotificationOptionsInterface_.prototype.tag;\n/** @type {string} */ NotificationOptionsInterface_.prototype.icon;\n/** @type {boolean} */\n NotificationOptionsInterface_.prototype.requireInteraction;\n\n/**\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n * @see http://notifications.spec.whatwg.org/#notification\n */\nfunction Notification(title, opt_options) {}\n\n/**\n * @type {string}\n */\nNotification.permission;\n\n/**\n * @param {NotificationPermissionCallback=} opt_callback\n * @return {!Promise}\n */\nNotification.requestPermission = function(opt_callback) {};\n\n/** @override */\nNotification.prototype.addEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.removeEventListener = function(\n type, listener, opt_options) {};\n\n/** @override */\nNotification.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {string}\n */\nNotification.prototype.title;\n\n/**\n * @type {string}\n */\nNotification.prototype.body;\n\n/**\n * @type {string}\n */\nNotification.prototype.icon;\n\n/**\n * The string used by clients to identify the notification.\n * @type {string}\n */\nNotification.prototype.tag;\n\n/**\n * The ID used by clients to uniquely identify notifications to eliminate\n * duplicate notifications.\n * @type {string}\n * @deprecated Use NotificationOptions.tag instead.\n */\nNotification.prototype.replaceId;\n\n/**\n * @type {*}\n */\nNotification.prototype.data;\n\n/**\n * The string used by clients to specify the directionality (rtl/ltr) of the\n * notification.\n * @type {string}\n * @deprecated Use NotificationOptions.titleDir and bodyDir instead.\n */\nNotification.prototype.dir;\n\n/**\n * Displays the notification.\n * @return {undefined}\n */\nNotification.prototype.show = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.cancel = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.close = function() {};\n\n/**\n * An event handler called when notification is closed.\n * @type {?function(Event)}\n */\nNotification.prototype.onclose;\n\n/**\n * An event handler called if the notification could not be displayed due to\n * an error (i.e. resource could not be loaded).\n * @type {?function(Event)}\n */\nNotification.prototype.onerror;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n * @deprecated Use onshow instead.\n */\nNotification.prototype.ondisplay;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n */\nNotification.prototype.onshow;\n\n/**\n * An event handler called when the notification has been clicked on.\n * @type {?function(Event)}\n */\nNotification.prototype.onclick;\n\n\n\n/**\n * @typedef {function(string)}\n * @see http://notifications.spec.whatwg.org/#notificationpermissioncallback\n */\nvar NotificationPermissionCallback;\n\n/**\n * @constructor\n * @see http://dev.w3.org/2006/webapi/WebNotifications/publish/#dialog-if\n * @deprecated Use Notification instead.\n */\nfunction NotificationCenter() {}\n\n/**\n * Creates a text+icon notification and displays it to the user.\n * @param {string} iconUrl\n * @param {string} title\n * @param {string} body\n * @return {Notification}\n */\nNotificationCenter.prototype.createNotification =\n function(iconUrl, title, body) {};\n\n/**\n * Creates an HTML notification and displays it to the user.\n * @param {string} url\n * @return {Notification}\n */\nNotificationCenter.prototype.createHTMLNotification = function(url) {};\n\n/**\n * Checks if the user has permission to display notifications.\n * @return {number}\n */\nNotificationCenter.prototype.checkPermission = function() {};\n\n/**\n * Requests permission from the user to display notifications.\n * @param {Function=} opt_callback\n * @return {void}\n */\nNotificationCenter.prototype.requestPermission = function(opt_callback) {};\n\n/**\n * WebKit browsers expose the NotificationCenter API through\n * window.webkitNotifications.\n * @type {NotificationCenter}\n */\nWindow.prototype.webkitNotifications;\n\n\n/**\n * @see https://notifications.spec.whatwg.org/#notificationevent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction NotificationEvent(type, opt_eventInitDict) {}\n\n/** @type {!Notification} */\nNotificationEvent.prototype.notification;\n\n/** @type {string} */\nNotificationEvent.prototype.action;\n', + "externs/webkit_usercontent.js":'/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for WKWebView\'s User Content interface.\n * https://developer.apple.com/library/prerelease/ios/documentation/WebKit/Reference/WKUserContentController_Ref/\n * https://trac.webkit.org/browser/trunk/Source/WebCore/page/WebKitNamespace.h\n *\n * @externs\n */\n\n/** @constructor */\nfunction WebKitNamespace() {}\n\n\n/**\n * @type {!UserMessageHandlersNamespace}\n */\nWebKitNamespace.prototype.messageHandlers;\n\n\n/**\n * @constructor\n * @implements {IObject}\n */\nfunction UserMessageHandlersNamespace() {}\n\n\n/** @constructor */\nfunction UserMessageHandler() {}\n\n\n/**\n * @param {*} message\n * @return {undefined}\n */\nUserMessageHandler.prototype.postMessage = function(message) {};\n\n\n/**\n * @const {!WebKitNamespace}\n */\nvar webkit;\n', + "externs/webgl.js":'/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebGL functions as described at\n * http://www.khronos.org/registry/webgl/specs/latest/\n *\n * This file is current up to the WebGL 1.0.1 spec, including extensions.\n *\n * This relies on html5.js being included for Canvas and Typed Array support.\n *\n * This includes some extensions defined at\n * http://www.khronos.org/registry/webgl/extensions/\n *\n * @externs\n */\n\n\n/**\n * @typedef {ImageBitmap|ImageData|HTMLImageElement|HTMLCanvasElement|\n * HTMLVideoElement|OffscreenCanvas}\n */\nvar TexImageSource;\n\n/**\n * @constructor\n */\nfunction WebGLRenderingContext() {}\n\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.POINTS;\n\n/** @const {number} */\nWebGLRenderingContext.LINES;\n\n/** @const {number} */\nWebGLRenderingContext.LINE_LOOP;\n\n/** @const {number} */\nWebGLRenderingContext.LINE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.TRIANGLES;\n\n/** @const {number} */\nWebGLRenderingContext.TRIANGLE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.TRIANGLE_FAN;\n\n/** @const {number} */\nWebGLRenderingContext.ZERO;\n\n/** @const {number} */\nWebGLRenderingContext.ONE;\n\n/** @const {number} */\nWebGLRenderingContext.SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.SRC_ALPHA_SATURATE;\n\n/** @const {number} */\nWebGLRenderingContext.FUNC_ADD;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_EQUATION;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_EQUATION_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_EQUATION_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.FUNC_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.FUNC_REVERSE_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_DST_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_SRC_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.ONE_MINUS_CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.ELEMENT_ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.ELEMENT_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.STREAM_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.STATIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.DYNAMIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.BUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.BUFFER_USAGE;\n\n/** @const {number} */\nWebGLRenderingContext.CURRENT_VERTEX_ATTRIB;\n\n/** @const {number} */\nWebGLRenderingContext.FRONT;\n\n/** @const {number} */\nWebGLRenderingContext.BACK;\n\n/** @const {number} */\nWebGLRenderingContext.FRONT_AND_BACK;\n\n/** @const {number} */\nWebGLRenderingContext.CULL_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.BLEND;\n\n/** @const {number} */\nWebGLRenderingContext.DITHER;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.SCISSOR_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.POLYGON_OFFSET_FILL;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_ALPHA_TO_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.NO_ERROR;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_ENUM;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.OUT_OF_MEMORY;\n\n/** @const {number} */\nWebGLRenderingContext.CW;\n\n/** @const {number} */\nWebGLRenderingContext.CCW;\n\n/** @const {number} */\nWebGLRenderingContext.LINE_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.ALIASED_POINT_SIZE_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.ALIASED_LINE_WIDTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.CULL_FACE_MODE;\n\n/** @const {number} */\nWebGLRenderingContext.FRONT_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_REF;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_REF;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BACK_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.VIEWPORT;\n\n/** @const {number} */\nWebGLRenderingContext.SCISSOR_BOX;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.PACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VIEWPORT_DIMS;\n\n/** @const {number} */\nWebGLRenderingContext.SUBPIXEL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.RED_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.GREEN_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.BLUE_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.ALPHA_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.POLYGON_OFFSET_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.POLYGON_OFFSET_FACTOR;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_BINDING_2D;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_BUFFERS;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLES;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE_INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.COMPRESSED_TEXTURE_FORMATS;\n\n/** @const {number} */\nWebGLRenderingContext.DONT_CARE;\n\n/** @const {number} */\nWebGLRenderingContext.FASTEST;\n\n/** @const {number} */\nWebGLRenderingContext.NICEST;\n\n/** @const {number} */\nWebGLRenderingContext.GENERATE_MIPMAP_HINT;\n\n/** @const {number} */\nWebGLRenderingContext.BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.INT;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_INT;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_COMPONENT;\n\n/** @const {number} */\nWebGLRenderingContext.ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.RGB;\n\n/** @const {number} */\nWebGLRenderingContext.RGBA;\n\n/** @const {number} */\nWebGLRenderingContext.LUMINANCE;\n\n/** @const {number} */\nWebGLRenderingContext.LUMINANCE_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_4_4_4_4;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_5_5_5_1;\n\n/** @const {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_5_6_5;\n\n/** @const {number} */\nWebGLRenderingContext.FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VERTEX_ATTRIBS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VERTEX_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VARYING_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.SHADER_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.DELETE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.LINK_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.VALIDATE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.ATTACHED_SHADERS;\n\n/** @const {number} */\nWebGLRenderingContext.ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGLRenderingContext.ACTIVE_ATTRIBUTES;\n\n/** @const {number} */\nWebGLRenderingContext.SHADING_LANGUAGE_VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.CURRENT_PROGRAM;\n\n/** @const {number} */\nWebGLRenderingContext.NEVER;\n\n/** @const {number} */\nWebGLRenderingContext.LESS;\n\n/** @const {number} */\nWebGLRenderingContext.EQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.LEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.GREATER;\n\n/** @const {number} */\nWebGLRenderingContext.NOTEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.GEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.ALWAYS;\n\n/** @const {number} */\nWebGLRenderingContext.KEEP;\n\n/** @const {number} */\nWebGLRenderingContext.REPLACE;\n\n/** @const {number} */\nWebGLRenderingContext.INCR;\n\n/** @const {number} */\nWebGLRenderingContext.DECR;\n\n/** @const {number} */\nWebGLRenderingContext.INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.INCR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.DECR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.VENDOR;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERER;\n\n/** @const {number} */\nWebGLRenderingContext.VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.NEAREST_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.LINEAR_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.NEAREST_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.LINEAR_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_MAG_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_MIN_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_WRAP_S;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_WRAP_T;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_2D;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_BINDING_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE0;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE1;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE2;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE3;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE4;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE5;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE6;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE7;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE8;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE9;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE10;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE11;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE12;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE13;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE14;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE15;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE16;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE17;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE18;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE19;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE20;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE21;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE22;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE23;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE24;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE25;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE26;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE27;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE28;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE29;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE30;\n\n/** @const {number} */\nWebGLRenderingContext.TEXTURE31;\n\n/** @const {number} */\nWebGLRenderingContext.ACTIVE_TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.CLAMP_TO_EDGE;\n\n/** @const {number} */\nWebGLRenderingContext.MIRRORED_REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.INT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.INT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.INT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.BOOL_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_MAT2;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_MAT3;\n\n/** @const {number} */\nWebGLRenderingContext.FLOAT_MAT4;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLER_2D;\n\n/** @const {number} */\nWebGLRenderingContext.SAMPLER_CUBE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_POINTER;\n\n/** @const {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.IMPLEMENTATION_COLOR_READ_FORMAT;\n\n/** @const {number} */\nWebGLRenderingContext.IMPLEMENTATION_COLOR_READ_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.COMPILE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.LOW_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.MEDIUM_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.HIGH_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.LOW_INT;\n\n/** @const {number} */\nWebGLRenderingContext.MEDIUM_INT;\n\n/** @const {number} */\nWebGLRenderingContext.HIGH_INT;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.RGBA4;\n\n/** @const {number} */\nWebGLRenderingContext.RGB5_A1;\n\n/** @const {number} */\nWebGLRenderingContext.RGB565;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_COMPONENT16;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_INDEX;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_INDEX8;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_HEIGHT;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_INTERNAL_FORMAT;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_RED_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_GREEN_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_BLUE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_ALPHA_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_DEPTH_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_STENCIL_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.COLOR_ATTACHMENT0;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.NONE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_COMPLETE;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_UNSUPPORTED;\n\n/** @const {number} */\nWebGLRenderingContext.FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.RENDERBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.MAX_RENDERBUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.INVALID_FRAMEBUFFER_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_FLIP_Y_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.CONTEXT_LOST_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.BROWSER_DEFAULT_WEBGL;\n\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_BUFFER_BIT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POINTS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINE_LOOP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TRIANGLES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TRIANGLE_STRIP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TRIANGLE_FAN;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ZERO;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_SRC_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_DST_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SRC_ALPHA_SATURATE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FUNC_ADD;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FUNC_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FUNC_REVERSE_SUBTRACT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_DST_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_SRC_RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_DST_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_SRC_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND_COLOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STREAM_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STATIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DYNAMIC_DRAW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BUFFER_USAGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CURRENT_VERTEX_ATTRIB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRONT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BACK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRONT_AND_BACK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CULL_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLEND;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DITHER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SCISSOR_TEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_FILL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_ALPHA_TO_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NO_ERROR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_ENUM;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.OUT_OF_MEMORY;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CCW;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINE_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALIASED_POINT_SIZE_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALIASED_LINE_WIDTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CULL_FACE_MODE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRONT_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_RANGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_REF;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_FUNC;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_FAIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_PASS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_REF;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_VALUE_MASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VIEWPORT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SCISSOR_BOX;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_CLEAR_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_WRITEMASK;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.PACK_ALIGNMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VIEWPORT_DIMS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SUBPIXEL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RED_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GREEN_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BLUE_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALPHA_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_BITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_FACTOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_BINDING_2D;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_BUFFERS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE_VALUE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE_INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COMPRESSED_TEXTURE_FORMATS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DONT_CARE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FASTEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NICEST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GENERATE_MIPMAP_HINT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_BYTE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_COMPONENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGB;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGBA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LUMINANCE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LUMINANCE_ALPHA;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_4_4_4_4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_5_5_5_1;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_5_6_5;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_SHADER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_ATTRIBS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VARYING_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_COMBINED_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_TEXTURE_IMAGE_UNITS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_FRAGMENT_UNIFORM_VECTORS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SHADER_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DELETE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINK_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VALIDATE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ATTACHED_SHADERS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ACTIVE_ATTRIBUTES;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SHADING_LANGUAGE_VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CURRENT_PROGRAM;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEVER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LESS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.EQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GREATER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NOTEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.GEQUAL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ALWAYS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.KEEP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.REPLACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INCR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DECR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVERT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INCR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DECR_WRAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VENDOR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERSION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEAREST_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINEAR_MIPMAP_NEAREST;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NEAREST_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LINEAR_MIPMAP_LINEAR;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_MAG_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_MIN_FILTER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_WRAP_S;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_WRAP_T;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_2D;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_BINDING_CUBE_MAP;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_CUBE_MAP_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE0;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE1;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE5;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE6;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE7;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE8;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE9;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE10;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE11;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE12;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE13;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE14;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE15;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE16;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE17;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE18;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE19;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE20;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE21;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE22;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE23;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE24;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE25;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE26;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE27;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE28;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE29;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE30;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.TEXTURE31;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.ACTIVE_TEXTURE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CLAMP_TO_EDGE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MIRRORED_REPEAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INT_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL_VEC2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL_VEC3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BOOL_VEC4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT2;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT3;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLER_2D;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.SAMPLER_CUBE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_ENABLED;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_NORMALIZED;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_POINTER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COMPILE_STATUS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LOW_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MEDIUM_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.HIGH_FLOAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.LOW_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MEDIUM_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.HIGH_INT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGBA4;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGB5_A1;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RGB565;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_COMPONENT16;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_INDEX;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_INDEX8;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_WIDTH;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_HEIGHT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_INTERNAL_FORMAT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_RED_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_GREEN_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_BLUE_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_ALPHA_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_DEPTH_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_STENCIL_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.COLOR_ATTACHMENT0;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.NONE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_COMPLETE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_UNSUPPORTED;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_BINDING;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.MAX_RENDERBUFFER_SIZE;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.INVALID_FRAMEBUFFER_OPERATION;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_FLIP_Y_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_PREMULTIPLY_ALPHA_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.CONTEXT_LOST_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.UNPACK_COLORSPACE_CONVERSION_WEBGL;\n\n/** @const {number} */\nWebGLRenderingContext.prototype.BROWSER_DEFAULT_WEBGL;\n\n\n/**\n * @type {!HTMLCanvasElement}\n */\nWebGLRenderingContext.prototype.canvas;\n\n/**\n * @type {number}\n */\nWebGLRenderingContext.prototype.drawingBufferWidth;\n\n/**\n * @type {number}\n */\nWebGLRenderingContext.prototype.drawingBufferHeight;\n\n/**\n * @return {!WebGLContextAttributes}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getContextAttributes = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isContextLost = function() {};\n\n/**\n * @return {!Array}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getSupportedExtensions = function() {};\n\n/**\n * Note that this has side effects by enabling the extension even if the\n * result is not used.\n * @param {string} name\n * @return {Object}\n */\nWebGLRenderingContext.prototype.getExtension = function(name) {};\n\n/**\n * @param {number} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.activeTexture = function(texture) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.attachShader = function(program, shader) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @param {string} name\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindAttribLocation = function(\n program, index, name) {};\n\n/**\n * @param {number} target\n * @param {WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindBuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLFramebuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindFramebuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLRenderbuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindRenderbuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLTexture} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindTexture = function(target, texture) {};\n\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendColor = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendEquation = function(mode) {};\n\n/**\n * @param {number} modeRGB\n * @param {number} modeAlpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendEquationSeparate = function(\n modeRGB, modeAlpha) {};\n\n/**\n * @param {number} sfactor\n * @param {number} dfactor\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendFunc = function(sfactor, dfactor) {};\n\n/**\n * @param {number} srcRGB\n * @param {number} dstRGB\n * @param {number} srcAlpha\n * @param {number} dstAlpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendFuncSeparate = function(\n srcRGB, dstRGB, srcAlpha, dstAlpha) {};\n\n/**\n * @param {number} target\n * @param {ArrayBufferView|ArrayBuffer|number} data\n * @param {number} usage\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bufferData = function(target, data, usage) {};\n\n/**\n * @param {number} target\n * @param {number} offset\n * @param {ArrayBufferView|ArrayBuffer} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bufferSubData = function(\n target, offset, data) {};\n\n/**\n * @param {number} target\n * @return {number}\n */\nWebGLRenderingContext.prototype.checkFramebufferStatus = function(target) {};\n\n/**\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clear = function(mask) {};\n\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearColor = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {number} depth\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearDepth = function(depth) {};\n\n/**\n * @param {number} s\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearStencil = function(s) {};\n\n/**\n * @param {boolean} red\n * @param {boolean} green\n * @param {boolean} blue\n * @param {boolean} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.colorMask = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compileShader = function(shader) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @param {ArrayBufferView} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compressedTexImage2D = function(\n target, level, internalformat, width, height, border, data) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {ArrayBufferView} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compressedTexSubImage2D = function(\n target, level, xoffset, yoffset, width, height, format, data) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} format\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.copyTexImage2D = function(\n target, level, format, x, y, width, height, border) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.copyTexSubImage2D = function(\n target, level, xoffset, yoffset, x, y, width, height) {};\n\n/**\n * @return {!WebGLBuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createBuffer = function() {};\n\n/**\n * @return {!WebGLFramebuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createFramebuffer = function() {};\n\n/**\n * @return {!WebGLProgram}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createProgram = function() {};\n\n/**\n * @return {!WebGLRenderbuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createRenderbuffer = function() {};\n\n/**\n * @param {number} type\n * @return {!WebGLShader}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createShader = function(type) {};\n\n/**\n * @return {!WebGLTexture}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createTexture = function() {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.cullFace = function(mode) {};\n\n/**\n * @param {WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteBuffer = function(buffer) {};\n\n/**\n * @param {WebGLFramebuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteFramebuffer = function(buffer) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteProgram = function(program) {};\n\n/**\n * @param {WebGLRenderbuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteRenderbuffer = function(buffer) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteShader = function(shader) {};\n\n/**\n * @param {WebGLTexture} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteTexture = function(texture) {};\n\n/**\n * @param {number} func\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthFunc = function(func) {};\n\n/**\n * @param {boolean} flag\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthMask = function(flag) {};\n\n/**\n * @param {number} nearVal\n * @param {number} farVal\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthRange = function(nearVal, farVal) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.detachShader = function(program, shader) {};\n\n/**\n * @param {number} flags\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.disable = function(flags) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.disableVertexAttribArray = function(\n index) {};\n\n/**\n * @param {number} mode\n * @param {number} first\n * @param {number} count\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.drawArrays = function(mode, first, count) {};\n\n/**\n * @param {number} mode\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.drawElements = function(\n mode, count, type, offset) {};\n\n/**\n * @param {number} cap\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.enable = function(cap) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.enableVertexAttribArray = function(\n index) {};\n\nWebGLRenderingContext.prototype.finish = function() {};\n\nWebGLRenderingContext.prototype.flush = function() {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} renderbuffertarget\n * @param {WebGLRenderbuffer} renderbuffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.framebufferRenderbuffer = function(\n target, attachment, renderbuffertarget, renderbuffer) {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} textarget\n * @param {WebGLTexture} texture\n * @param {number} level\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.framebufferTexture2D = function(\n target, attachment, textarget, texture, level) {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.frontFace = function(mode) {};\n\n/**\n * @param {number} target\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.generateMipmap = function(target) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @return {WebGLActiveInfo}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getActiveAttrib = function(program, index) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @return {WebGLActiveInfo}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getActiveUniform = function(program, index) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {!Array}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getAttachedShaders = function(program) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {string} name\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getAttribLocation = function(program, name) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getBufferParameter = function(target, pname) {};\n\n/**\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getParameter = function(pname) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getError = function() {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getFramebufferAttachmentParameter = function(\n target, attachment, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getProgramParameter = function(\n program, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getProgramInfoLog = function(program) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getRenderbufferParameter = function(\n target, pname) {};\n\n/**\n * @param {WebGLShader} shader\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderParameter = function(shader, pname) {};\n\n/**\n * @param {number} shadertype\n * @param {number} precisiontype\n * @return {WebGLShaderPrecisionFormat}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderPrecisionFormat = function(shadertype,\n precisiontype) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderInfoLog = function(shader) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderSource = function(shader) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getTexParameter = function(target, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLUniformLocation} location\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getUniform = function(program, location) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {string} name\n * @return {WebGLUniformLocation}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getUniformLocation = function(program, name) {};\n\n/**\n * @param {number} index\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getVertexAttrib = function(index, pname) {};\n\n/**\n * @param {number} index\n * @param {number} pname\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getVertexAttribOffset = function(\n index, pname) {};\n\n/**\n * @param {number} target\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.hint = function(target, mode) {};\n\n/**\n * @param {WebGLObject} buffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isBuffer = function(buffer) {};\n\n/**\n * @param {number} cap\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isEnabled = function(cap) {};\n\n/**\n * @param {WebGLObject} framebuffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isFramebuffer = function(framebuffer) {};\n\n/**\n * @param {WebGLObject} program\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isProgram = function(program) {};\n\n/**\n * @param {WebGLObject} renderbuffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isRenderbuffer = function(renderbuffer) {};\n\n/**\n * @param {WebGLObject} shader\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isShader = function(shader) {};\n\n/**\n * @param {WebGLObject} texture\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isTexture = function(texture) {};\n\n/**\n * @param {number} width\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.lineWidth = function(width) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.linkProgram = function(program) {};\n\n/**\n * @param {number} pname\n * @param {number|boolean} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.pixelStorei = function(pname, param) {};\n\n/**\n * @param {number} factor\n * @param {number} units\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.polygonOffset = function(factor, units) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {number} type\n * @param {ArrayBufferView} pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.readPixels = function(\n x, y, width, height, format, type, pixels) {};\n\n/**\n * @param {number} target\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.renderbufferStorage = function(\n target, internalformat, width, height) {};\n\n/**\n * @param {number} coverage\n * @param {boolean} invert\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.sampleCoverage = function(coverage, invert) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.scissor = function(x, y, width, height) {};\n\n/**\n * @param {WebGLShader} shader\n * @param {string} source\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.shaderSource = function(shader, source) {};\n\n/**\n * @param {number} func\n * @param {number} ref\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilFunc = function(func, ref, mask) {};\n\n/**\n * @param {number} face\n * @param {number} func\n * @param {number} ref\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilFuncSeparate = function(\n face, func, ref, mask) {};\n\n/**\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilMask = function(mask) {};\n\n/**\n * @param {number} face\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilMaskSeparate = function(face, mask) {};\n\n/**\n * @param {number} fail\n * @param {number} zfail\n * @param {number} zpass\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilOp = function(fail, zfail, zpass) {};\n\n/**\n * @param {number} face\n * @param {number} fail\n * @param {number} zfail\n * @param {number} zpass\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilOpSeparate = function(\n face, fail, zfail, zpass) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} format or width\n * @param {number} type or height\n * @param {?TexImageSource|number} img or border\n * @param {number=} opt_format\n * @param {number=} opt_type\n * @param {ArrayBufferView=} opt_pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texImage2D = function(\n target, level, internalformat, format, type, img, opt_format, opt_type,\n opt_pixels) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texParameterf = function(\n target, pname, param) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texParameteri = function(\n target, pname, param) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} format or width\n * @param {number} type or height\n * @param {?TexImageSource|number} data or format\n * @param {number=} opt_type\n * @param {ArrayBufferView=} opt_pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texSubImage2D = function(\n target, level, xoffset, yoffset, format, type, data, opt_type,\n opt_pixels) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1f = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1i = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2f = function(\n location, value1, value2) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2i = function(\n location, value1, value2) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @param {number} value3\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3f = function(\n location, value1, value2, value3) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @param {number|boolean} value3\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3i = function(\n location, value1, value2, value3) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @param {number} value3\n * @param {number} value4\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4f = function(\n location, value1, value2, value3, value4) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @param {number|boolean} value3\n * @param {number|boolean} value4\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4i = function(\n location, value1, value2, value3, value4) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix2fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix3fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix4fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.useProgram = function(program) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.validateProgram = function(program) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib1f = function(indx, x) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib1fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib2f = function(\n indx, x, y) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib2fv = function(\n indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib3f = function(\n indx, x, y, z) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib3fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib4f = function(\n indx, x, y, z, w) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib4fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} size\n * @param {number} type\n * @param {boolean} normalized\n * @param {number} stride\n * @param {number} offset\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttribPointer = function(\n indx, size, type, normalized, stride, offset) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.viewport = function(x, y, width, height) {};\n\n\n/**\n * @constructor\n */\nfunction WebGLContextAttributes() {}\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.alpha;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.depth;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.stencil;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.antialias;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.premultipliedAlpha;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.preserveDrawingBuffer;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.preferLowPowerToHighPerformance;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.failIfMajorPerformanceCaveat;\n\n/**\n * @param {string} eventType\n * @constructor\n * @extends {Event}\n */\nfunction WebGLContextEvent(eventType) {}\n\n/**\n * @type {string}\n */\nWebGLContextEvent.prototype.statusMessage;\n\n\n/**\n * @constructor\n */\nfunction WebGLShaderPrecisionFormat() {}\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.rangeMin;\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.rangeMax;\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.precision;\n\n\n/**\n * @constructor\n */\nfunction WebGLObject() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLBuffer() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLFramebuffer() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLProgram() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLRenderbuffer() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLShader() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLTexture() {}\n\n\n/**\n * @constructor\n */\nfunction WebGLActiveInfo() {}\n\n/** @type {number} */\nWebGLActiveInfo.prototype.size;\n\n/** @type {number} */\nWebGLActiveInfo.prototype.type;\n\n/** @type {string} */\nWebGLActiveInfo.prototype.name;\n\n\n/**\n * @constructor\n */\nfunction WebGLUniformLocation() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_float/\n * @constructor\n */\nfunction OES_texture_float() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/\n * @constructor\n */\nfunction OES_texture_half_float() {}\n\n/** @type {number} */\nOES_texture_half_float.prototype.HALF_FLOAT_OES;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/\n * @constructor\n */\nfunction WEBGL_lose_context() {}\n\nWEBGL_lose_context.prototype.loseContext = function() {};\n\nWEBGL_lose_context.prototype.restoreContext = function() {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/\n * @constructor\n */\nfunction OES_standard_derivatives() {}\n\n/** @type {number} */\nOES_standard_derivatives.prototype.FRAGMENT_SHADER_DERIVATIVE_HINT_OES;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLVertexArrayObjectOES() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/\n * @constructor\n */\nfunction OES_vertex_array_object() {}\n\n/** @type {number} */\nOES_vertex_array_object.prototype.VERTEX_ARRAY_BINDING_OES;\n\n/**\n * @return {WebGLVertexArrayObjectOES}\n * @nosideeffects\n */\nOES_vertex_array_object.prototype.createVertexArrayOES = function() {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {undefined}\n */\nOES_vertex_array_object.prototype.deleteVertexArrayOES =\n function(arrayObject) {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {boolean}\n * @nosideeffects\n */\nOES_vertex_array_object.prototype.isVertexArrayOES = function(arrayObject) {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {undefined}\n */\nOES_vertex_array_object.prototype.bindVertexArrayOES = function(arrayObject) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n * @constructor\n */\nfunction WEBGL_debug_renderer_info() {}\n\n/** @const {number} */\nWEBGL_debug_renderer_info.prototype.UNMASKED_VENDOR_WEBGL;\n\n/** @const {number} */\nWEBGL_debug_renderer_info.prototype.UNMASKED_RENDERER_WEBGL;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_shaders/\n * @constructor\n */\nfunction WEBGL_debug_shaders() {}\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWEBGL_debug_shaders.prototype.getTranslatedShaderSource = function(shader) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n * @constructor\n */\nfunction WEBGL_compressed_texture_s3tc() {}\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\n/** @const {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_depth_texture/\n * @constructor\n */\nfunction OES_depth_texture() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/\n * @constructor\n */\nfunction OES_element_index_uint() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/\n * @constructor\n */\nfunction EXT_texture_filter_anisotropic() {}\n\n/** @const {number} */\nEXT_texture_filter_anisotropic.prototype.TEXTURE_MAX_ANISOTROPY_EXT;\n\n/** @const {number} */\nEXT_texture_filter_anisotropic.prototype.MAX_TEXTURE_MAX_ANISOTROPY_EXT;\n\n\n/**\n * @see https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/\n * @constructor\n */\nfunction WEBGL_draw_buffers() {}\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT0_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT1_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT2_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT3_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT4_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT5_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT6_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT7_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT8_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT9_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT10_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT11_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT12_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT13_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT14_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT15_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER0_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER1_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER2_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER3_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER4_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER5_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER6_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER7_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER8_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER9_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER10_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER11_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER12_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER13_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER14_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER15_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.MAX_COLOR_ATTACHMENTS_WEBGL;\n\n/** @const {number} */\nWEBGL_draw_buffers.prototype.MAX_DRAW_BUFFERS_WEBGL;\n\n/**\n * @param {Array} buffers Draw buffers.\n * @return {undefined}\n */\nWEBGL_draw_buffers.prototype.drawBuffersWEBGL = function(buffers) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\n * @constructor\n */\nfunction ANGLE_instanced_arrays() {}\n\n\n/** @const {number} */\nANGLE_instanced_arrays.prototype.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE;\n\n\n/**\n * @param {number} mode Primitive type.\n * @param {number} first First vertex.\n * @param {number} count Number of vertices per instance.\n * @param {number} primcount Number of instances.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.drawArraysInstancedANGLE = function(\n mode, first, count, primcount) {};\n\n\n/**\n * @param {number} mode Primitive type.\n * @param {number} count Number of vertex indices per instance.\n * @param {number} type Type of a vertex index.\n * @param {number} offset Offset to the first vertex index.\n * @param {number} primcount Number of instances.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.drawElementsInstancedANGLE = function(\n mode, count, type, offset, primcount) {};\n\n\n/**\n * @param {number} index Attribute index.\n * @param {number} divisor Instance divisor.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.vertexAttribDivisorANGLE = function(\n index, divisor) {};\n\n', + "externs/webgl2.js":'/*\n * Copyright 2018 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebGL functions as described at\n * http://www.khronos.org/registry/webgl/specs/latest/\n *\n * This file is current up to the WebGL 2.0 spec.\n *\n * This relies on webgl.js and html5.js being included for WebGL1, Canvas and\n * Typed Array support.\n *\n * @externs\n */\n\n\n/**\n * @constructor\n * @extends {WebGLRenderingContext}\n */\nfunction WebGL2RenderingContext() {}\n\n\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.PACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.PACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.PACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH;\n\n/** @const {number} */\nWebGL2RenderingContext.STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.RED;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB10_A2;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_BINDING_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_SKIP_IMAGES;\n\n/** @const {number} */\nWebGL2RenderingContext.UNPACK_IMAGE_HEIGHT;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_WRAP_R;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_3D_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ELEMENTS_VERTICES;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ELEMENTS_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_MIN_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_MAX_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_BASE_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_MAX_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.MIN;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_COMPONENT24;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TEXTURE_LOD_BIAS;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_COMPARE_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_COMPARE_FUNC;\n\n/** @const {number} */\nWebGL2RenderingContext.CURRENT_QUERY;\n\n/** @const {number} */\nWebGL2RenderingContext.QUERY_RESULT;\n\n/** @const {number} */\nWebGL2RenderingContext.QUERY_RESULT_AVAILABLE;\n\n/** @const {number} */\nWebGL2RenderingContext.STREAM_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.STREAM_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.STATIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.STATIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.DYNAMIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.DYNAMIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_DRAW_BUFFERS;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER0;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER1;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER2;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER3;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER4;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER5;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER6;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER7;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER8;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER9;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER10;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER11;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER12;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER13;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER14;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_BUFFER15;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_2D_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAGMENT_SHADER_DERIVATIVE_HINT;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_PACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_UNPACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_PACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.PIXEL_UNPACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT2x3;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT2x4;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT3x2;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT3x4;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT4x2;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_MAT4x3;\n\n/** @const {number} */\nWebGL2RenderingContext.SRGB;\n\n/** @const {number} */\nWebGL2RenderingContext.SRGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.SRGB8_ALPHA8;\n\n/** @const {number} */\nWebGL2RenderingContext.COMPARE_REF_TO_TEXTURE;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA32F;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB32F;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA16F;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB16F;\n\n/** @const {number} */\nWebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ARRAY_TEXTURE_LAYERS;\n\n/** @const {number} */\nWebGL2RenderingContext.MIN_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VARYING_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_BINDING_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.R11F_G11F_B10F;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_10F_11F_11F_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB9_E5;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_5_9_9_9_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_VARYINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;\n\n/** @const {number} */\nWebGL2RenderingContext.RASTERIZER_DISCARD;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.INTERLEAVED_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA32I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB32I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA16I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB16I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8I;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8I;\n\n/** @const {number} */\nWebGL2RenderingContext.RED_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_2D_ARRAY_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_CUBE_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_VEC2;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_VEC3;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_VEC4;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_COMPONENT32F;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH32F_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.FLOAT_32_UNSIGNED_INT_24_8_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_RED_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_DEFAULT;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_INT_24_8;\n\n/** @const {number} */\nWebGL2RenderingContext.DEPTH24_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.READ_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.DRAW_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.READ_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.RENDERBUFFER_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COLOR_ATTACHMENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT1;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT2;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT3;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT4;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT5;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT6;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT7;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT8;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT9;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT10;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT11;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT12;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT13;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT14;\n\n/** @const {number} */\nWebGL2RenderingContext.COLOR_ATTACHMENT15;\n\n/** @const {number} */\nWebGL2RenderingContext.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.HALF_FLOAT;\n\n/** @const {number} */\nWebGL2RenderingContext.RG;\n\n/** @const {number} */\nWebGL2RenderingContext.RG_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.R8;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8;\n\n/** @const {number} */\nWebGL2RenderingContext.R16F;\n\n/** @const {number} */\nWebGL2RenderingContext.R32F;\n\n/** @const {number} */\nWebGL2RenderingContext.RG16F;\n\n/** @const {number} */\nWebGL2RenderingContext.RG32F;\n\n/** @const {number} */\nWebGL2RenderingContext.R8I;\n\n/** @const {number} */\nWebGL2RenderingContext.R8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.R16I;\n\n/** @const {number} */\nWebGL2RenderingContext.R16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.R32I;\n\n/** @const {number} */\nWebGL2RenderingContext.R32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8I;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RG16I;\n\n/** @const {number} */\nWebGL2RenderingContext.RG16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.RG32I;\n\n/** @const {number} */\nWebGL2RenderingContext.RG32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.VERTEX_ARRAY_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.R8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.RG8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.RGBA8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.SIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_READ_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_WRITE_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_READ_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.COPY_WRITE_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VERTEX_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_FRAGMENT_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COMBINED_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_UNIFORM_BUFFER_BINDINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_UNIFORM_BLOCK_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BUFFER_OFFSET_ALIGNMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.ACTIVE_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_MATRIX_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_IS_ROW_MAJOR;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_DATA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.INVALID_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_VERTEX_OUTPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_FRAGMENT_INPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_SERVER_WAIT_TIMEOUT;\n\n/** @const {number} */\nWebGL2RenderingContext.OBJECT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_CONDITION;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_STATUS;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_FLAGS;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_FENCE;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_GPU_COMMANDS_COMPLETE;\n\n/** @const {number} */\nWebGL2RenderingContext.UNSIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.ALREADY_SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.TIMEOUT_EXPIRED;\n\n/** @const {number} */\nWebGL2RenderingContext.CONDITION_SATISFIED;\n\n/** @const {number} */\nWebGL2RenderingContext.WAIT_FAILED;\n\n/** @const {number} */\nWebGL2RenderingContext.SYNC_FLUSH_COMMANDS_BIT;\n\n/** @const {number} */\nWebGL2RenderingContext.VERTEX_ATTRIB_ARRAY_DIVISOR;\n\n/** @const {number} */\nWebGL2RenderingContext.ANY_SAMPLES_PASSED;\n\n/** @const {number} */\nWebGL2RenderingContext.ANY_SAMPLES_PASSED_CONSERVATIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.SAMPLER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.RGB10_A2UI;\n\n/** @const {number} */\nWebGL2RenderingContext.INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_PAUSED;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_ACTIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.TRANSFORM_FEEDBACK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_IMMUTABLE_FORMAT;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_ELEMENT_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.TEXTURE_IMMUTABLE_LEVELS;\n\n/** @const {number} */\nWebGL2RenderingContext.TIMEOUT_IGNORED;\n\n/** @const {number} */\nWebGL2RenderingContext.MAX_CLIENT_WAIT_TIMEOUT_WEBGL;\n\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PACK_ROW_LENGTH;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PACK_SKIP_ROWS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PACK_SKIP_PIXELS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB10_A2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_BINDING_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_SKIP_IMAGES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNPACK_IMAGE_HEIGHT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_WRAP_R;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_3D_TEXTURE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ELEMENTS_VERTICES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ELEMENTS_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_MIN_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_MAX_LOD;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_BASE_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_MAX_LEVEL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MIN;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_COMPONENT24;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TEXTURE_LOD_BIAS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_COMPARE_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_COMPARE_FUNC;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.CURRENT_QUERY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.QUERY_RESULT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.QUERY_RESULT_AVAILABLE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STREAM_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STREAM_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STATIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.STATIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DYNAMIC_READ;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DYNAMIC_COPY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_DRAW_BUFFERS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER0;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER1;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER5;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER6;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER7;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER9;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER10;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER11;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER12;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER13;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER14;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_BUFFER15;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_2D_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAGMENT_SHADER_DERIVATIVE_HINT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_PACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_UNPACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_PACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.PIXEL_UNPACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT2x3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT2x4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT3x2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT3x4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT4x2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_MAT4x3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SRGB;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SRGB8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SRGB8_ALPHA8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COMPARE_REF_TO_TEXTURE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.VERTEX_ATTRIB_ARRAY_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ARRAY_TEXTURE_LAYERS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MIN_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_PROGRAM_TEXEL_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VARYING_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_BINDING_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R11F_G11F_B10F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_10F_11F_11F_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB9_E5;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_5_9_9_9_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_MODE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_VARYINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RASTERIZER_DISCARD;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS =\n 0x8C8A;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INTERLEAVED_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SEPARATE_ATTRIBS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RED_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_2D_ARRAY_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_CUBE_SHADOW;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_VEC2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_VEC3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_VEC4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_2D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_3D;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_CUBE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_SAMPLER_2D_ARRAY;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_COMPONENT32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH32F_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FLOAT_32_UNSIGNED_INT_24_8_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_RED_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_DEFAULT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_STENCIL_ATTACHMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH_STENCIL;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_INT_24_8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DEPTH24_STENCIL8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.READ_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.DRAW_FRAMEBUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.READ_FRAMEBUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RENDERBUFFER_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COLOR_ATTACHMENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT1;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT2;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT3;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT4;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT5;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT6;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT7;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT9;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT10;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT11;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT12;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT13;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT14;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COLOR_ATTACHMENT15;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_SAMPLES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.HALF_FLOAT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG_INTEGER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG16F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG32F;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG16I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG16UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG32I;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG32UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.VERTEX_ARRAY_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.R8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RG8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGBA8_SNORM;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SIGNED_NORMALIZED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_READ_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_WRITE_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_READ_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.COPY_WRITE_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_START;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VERTEX_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_FRAGMENT_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COMBINED_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_UNIFORM_BUFFER_BINDINGS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_UNIFORM_BLOCK_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BUFFER_OFFSET_ALIGNMENT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ACTIVE_UNIFORM_BLOCKS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_OFFSET;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_ARRAY_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_MATRIX_STRIDE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_IS_ROW_MAJOR;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_DATA_SIZE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_ACTIVE_UNIFORMS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INVALID_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_VERTEX_OUTPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_FRAGMENT_INPUT_COMPONENTS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_SERVER_WAIT_TIMEOUT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.OBJECT_TYPE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_CONDITION;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_STATUS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_FLAGS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_FENCE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_GPU_COMMANDS_COMPLETE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.UNSIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ALREADY_SIGNALED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TIMEOUT_EXPIRED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.CONDITION_SATISFIED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.WAIT_FAILED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SYNC_FLUSH_COMMANDS_BIT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.VERTEX_ATTRIB_ARRAY_DIVISOR;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ANY_SAMPLES_PASSED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.ANY_SAMPLES_PASSED_CONSERVATIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.SAMPLER_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.RGB10_A2UI;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.INT_2_10_10_10_REV;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_PAUSED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_ACTIVE;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TRANSFORM_FEEDBACK_BINDING;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_IMMUTABLE_FORMAT;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_ELEMENT_INDEX;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TEXTURE_IMMUTABLE_LEVELS;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.TIMEOUT_IGNORED;\n\n/** @const {number} */\nWebGL2RenderingContext.prototype.MAX_CLIENT_WAIT_TIMEOUT_WEBGL;\n\n/* Buffer objects */\n\n/**\n * @param {number} target\n * @param {?ArrayBufferView|?ArrayBuffer|number} data\n * @param {number} usage\n * @param {number=} opt_srcOffset\n * @param {number=} opt_length\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.bufferData = function(\n target, data, usage, opt_srcOffset, opt_length) {};\n\n/**\n * @param {number} target\n * @param {number} offset\n * @param {?ArrayBufferView|?ArrayBuffer} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_length\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.bufferSubData = function(\n target, offset, data, opt_srcOffset, opt_length) {};\n\n/**\n * @param {number} readTarget\n * @param {number} writeTarget\n * @param {number} readOffset\n * @param {number} writeOffset\n * @param {number} size\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.copyBufferSubData = function(\n readTarget, writeTarget, readOffset, writeOffset, size) {};\n\n/**\n * @param {number} target\n * @param {number} srcByteOffset\n * @param {?ArrayBufferView|?ArrayBuffer} dstBuffer\n * @param {number=} opt_dstOffset\n * @param {number=} opt_length\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.getBufferSubData = function(\n target, srcByteOffset, dstBuffer, opt_dstOffset, opt_length) {};\n\n/* Framebuffer objects */\n\n/**\n * @param {number} srcX0\n * @param {number} srcY0\n * @param {number} srcX1\n * @param {number} srcY1\n * @param {number} dstX0\n * @param {number} dstY0\n * @param {number} dstX1\n * @param {number} dstY1\n * @param {number} mask\n * @param {number} filter\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.blitFramebuffer = function(\n srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter) {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {?WebGLTexture} texture\n * @param {number} level\n * @param {number} layer\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.framebufferTextureLayer = function(\n target, attachment, texture, level, layer) {};\n\n/**\n * @param {number} target\n * @param {!Array} attachments\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.invalidateFramebuffer = function(\n target, attachments) {};\n\n/**\n * @param {number} target\n * @param {!Array} attachments\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.invalidateSubFramebuffer = function(\n target, attachments, x, y, width, height) {};\n\n/**\n * @param {number} src\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.readBuffer = function(src) {};\n\n/* Renderbuffer objects */\n\n/**\n * @param {number} target\n * @param {number} internalformat\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getInternalformatParameter = function(\n target, internalformat, pname) {};\n\n/**\n * @param {number} target\n * @param {number} samples\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.renderbufferStorageMultisample = function(\n target, samples, internalformat, width, height) {};\n\n/* Texture objects */\n\n/**\n * @param {number} target\n * @param {number} levels\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texStorage2D = function(\n target, levels, internalformat, width, height) {};\n\n/**\n * @param {number} target\n * @param {number} levels\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texStorage3D = function(\n target, levels, internalformat, width, height, depth) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} formatOrWidth\n * @param {number} typeOrHeight\n * @param {?TexImageSource|number} imgOrBorder\n * @param {number=} opt_format\n * @param {number=} opt_type\n * @param {?ArrayBufferView|?TexImageSource|number=} opt_imgOrOffset\n * @param {number=} opt_srcOffset\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.texImage2D = function(\n target, level, internalformat, formatOrWidth, typeOrHeight, imgOrBorder,\n opt_format, opt_type, opt_imgOrOffset, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} formatOrWidth\n * @param {number} typeOrHeight\n * @param {?TexImageSource|number} dataOrFormat\n * @param {number=} opt_type\n * @param {?ArrayBufferView|?TexImageSource|number=} opt_imgOrOffset\n * @param {number=} opt_srcOffset\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.texSubImage2D = function(\n target, level, xoffset, yoffset, formatOrWidth, typeOrHeight, dataOrFormat,\n opt_type, opt_imgOrOffset, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} border\n * @param {number} format\n * @param {number} type\n * @param {?ArrayBufferView|?TexImageSource|number} srcData\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texImage3D = function(\n target, level, internalformat, width, height, depth, border, format, type,\n srcData, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} zoffset\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} format\n * @param {number} type\n * @param {?ArrayBufferView|?TexImageSource|number} srcData\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.texSubImage3D = function(\n target, level, xoffset, yoffset, zoffset, width, height, depth, format,\n type, srcData, opt_srcOffset) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} zoffset\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.copyTexSubImage3D = function(\n target, level, xoffset, yoffset, zoffset, x, y, width, height) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @param {?ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.compressedTexImage2D = function(\n target, level, internalformat, width, height, border, srcDataOrSize,\n opt_srcOffset, opt_srcLengthOverride) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} border\n * @param {!ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.compressedTexImage3D = function(\n target, level, internalformat, width, height, depth, border, srcDataOrSize,\n opt_srcOffset, opt_srcLengthOverride) {};\n\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {?ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.compressedTexSubImage2D = function(\n target, level, xoffset, yoffset, width, height, format, srcDataOrSize,\n opt_srcOffset, opt_srcLengthOverride) {};\n\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} zoffset\n * @param {number} width\n * @param {number} height\n * @param {number} depth\n * @param {number} format\n * @param {!ArrayBufferView|number} srcDataOrSize\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLengthOverride\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.compressedTexSubImage3D = function(\n target, level, xoffset, yoffset, zoffset, width, height, depth, format,\n srcDataOrSize, opt_srcOffset, opt_srcLengthOverride) {};\n\n/* Programs and shaders */\n\n/**\n * @param {!WebGLProgram} program\n * @param {string} name\n * @return {number}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getFragDataLocation = function(\n program, name) {};\n\n/* Uniforms */\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform1ui = function(location, v0) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @param {number} v1\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform2ui = function(location, v0, v1) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @param {number} v1\n * @param {number} v2\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform3ui = function(location, v0, v1, v2) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {number} v0\n * @param {number} v1\n * @param {number} v2\n * @param {number} v3\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform4ui = function(\n location, v0, v1, v2, v3) {};\n\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform1fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform2fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform3fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform4fv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform1iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform2iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform3iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {?Int32Array|?Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniform4iv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform1uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform2uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform3uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {!Uint32Array|!Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniform4uiv = function(\n location, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniformMatrix2fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix3x2fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix4x2fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix2x3fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniformMatrix3fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix4x3fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix2x4fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {!Float32Array|!Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformMatrix3x4fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/**\n * @param {?WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {?Float32Array|?Array} data\n * @param {number=} opt_srcOffset\n * @param {number=} opt_srcLength\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.uniformMatrix4fv = function(\n location, transpose, data, opt_srcOffset, opt_srcLength) {};\n\n/* Vertex attribs */\n\n/**\n * @param {number} index\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4i = function(\n index, x, y, z, w) {};\n\n/**\n * @param {number} index\n * @param {!Int32Array|!Array|!Array} values\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4iv = function(index, values) {};\n\n/**\n * @param {number} index\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4ui = function(\n index, x, y, z, w) {};\n\n/**\n * @param {number} index\n * @param {!Uint32Array|!Array|!Array} values\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribI4uiv = function(index, values) {};\n\n/**\n * @param {number} index\n * @param {number} size\n * @param {number} type\n * @param {number} stride\n * @param {number} offset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribIPointer = function(\n index, size, type, stride, offset) {};\n\n/* Writing to the drawing buffer */\n\n/**\n * @param {number} index\n * @param {number} divisor\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.vertexAttribDivisor = function(\n index, divisor) {};\n\n/**\n * @param {number} mode\n * @param {number} first\n * @param {number} count\n * @param {number} instanceCount\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawArraysInstanced = function(\n mode, first, count, instanceCount) {};\n\n/**\n * @param {number} mode\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @param {number} instanceCount\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawElementsInstanced = function(\n mode, count, type, offset, instanceCount) {};\n\n/**\n * @param {number} mode\n * @param {number} start\n * @param {number} end\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawRangeElements = function(\n mode, start, end, count, type, offset) {};\n\n/* Reading back pixels */\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {number} type\n * @param {?ArrayBufferView|number} dstDataOrOffset\n * @param {number=} opt_dstOffset\n * @return {undefined}\n * @override\n */\nWebGL2RenderingContext.prototype.readPixels = function(\n x, y, width, height, format, type, dstDataOrOffset, opt_dstOffset) {};\n\n/* Multiple Render Targets */\n\n/**\n * @param {!Array} buffers\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.drawBuffers = function(buffers) {};\n\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {!Float32Array|!Array} values\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferfv = function(\n buffer, drawbuffer, values, opt_srcOffset) {};\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {!Int32Array|!Array|!Array} values\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferiv = function(\n buffer, drawbuffer, values, opt_srcOffset) {};\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {!Uint32Array|!Array|!Array} values\n * @param {number=} opt_srcOffset\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferuiv = function(\n buffer, drawbuffer, values, opt_srcOffset) {};\n\n/**\n * @param {number} buffer\n * @param {number} drawbuffer\n * @param {number} depth\n * @param {number} stencil\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clearBufferfi = function(\n buffer, drawbuffer, depth, stencil) {};\n\n/* Query Objects */\n\n/**\n * @return {?WebGLQuery}\n */\nWebGL2RenderingContext.prototype.createQuery = function() {};\n\n/**\n * @param {?WebGLQuery} query\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteQuery = function(query) {};\n\n/**\n * @param {?WebGLQuery} query\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isQuery = function(query) {};\n\n/**\n * @param {number} target\n * @param {!WebGLQuery} query\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.beginQuery = function(target, query) {};\n\n/**\n * @param {number} target\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.endQuery = function(target) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {?WebGLQuery}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getQuery = function(target, pname) {};\n\n/**\n * @param {!WebGLQuery} query\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getQueryParameter = function(query, pname) {};\n\n/* Sampler Objects */\n\n/**\n * @return {?WebGLSampler}\n */\nWebGL2RenderingContext.prototype.createSampler = function() {};\n\n/**\n * @param {?WebGLSampler} sampler\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteSampler = function(sampler) {};\n\n/**\n * @param {?WebGLSampler} sampler\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isSampler = function(sampler) {};\n\n/**\n * @param {number} unit\n * @param {?WebGLSampler} sampler\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindSampler = function(unit, sampler) {};\n\n/**\n * @param {!WebGLSampler} sampler\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.samplerParameteri = function(\n sampler, pname, param) {};\n\n/**\n * @param {!WebGLSampler} sampler\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.samplerParameterf = function(\n sampler, pname, param) {};\n\n/**\n * @param {!WebGLSampler} sampler\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getSamplerParameter = function(\n sampler, pname) {};\n\n/* Sync objects */\n\n/**\n * @param {number} condition\n * @param {number} flags\n * @return {?WebGLSync}\n */\nWebGL2RenderingContext.prototype.fenceSync = function(condition, flags) {};\n\n/**\n * @param {?WebGLSync} sync\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isSync = function(sync) {};\n\n/**\n * @param {?WebGLSync} sync\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteSync = function(sync) {};\n\n/**\n * @param {!WebGLSync} sync\n * @param {number} flags\n * @param {number} timeout\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.clientWaitSync = function(\n sync, flags, timeout) {};\n\n/**\n * @param {!WebGLSync} sync\n * @param {number} flags\n * @param {number} timeout\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.waitSync = function(sync, flags, timeout) {};\n\n/**\n * @param {!WebGLSync} sync\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getSyncParameter = function(sync, pname) {};\n\n/* Transform Feedback */\n\n/**\n * @return {?WebGLTransformFeedback}\n */\nWebGL2RenderingContext.prototype.createTransformFeedback = function() {};\n\n/**\n * @param {?WebGLTransformFeedback} tf\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteTransformFeedback = function(tf) {};\n\n/**\n * @param {?WebGLTransformFeedback} tf\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isTransformFeedback = function(tf) {};\n\n/**\n * @param {number} target\n * @param {?WebGLTransformFeedback} tf\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindTransformFeedback = function(\n target, tf) {};\n\n/**\n * @param {number} primitiveMode\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.beginTransformFeedback = function(\n primitiveMode) {};\n\n/**\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.endTransformFeedback = function() {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {!Array} varyings\n * @param {number} bufferMode\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.transformFeedbackVaryings = function(\n program, varyings, bufferMode) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} index\n * @return {?WebGLActiveInfo}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getTransformFeedbackVarying = function(\n program, index) {};\n\n/**\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.pauseTransformFeedback = function() {};\n\n/**\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.resumeTransformFeedback = function() {};\n\n/* Uniform Buffer Objects and Transform Feedback Buffers */\n\n/**\n * @param {number} target\n * @param {number} index\n * @param {?WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindBufferBase = function(\n target, index, buffer) {};\n\n/**\n * @param {number} target\n * @param {number} index\n * @param {?WebGLBuffer} buffer\n * @param {number} offset\n * @param {number} size\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindBufferRange = function(\n target, index, buffer, offset, size) {};\n\n/**\n * @param {number} target\n * @param {number} index\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getIndexedParameter = function(\n target, index) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {!Array} uniformNames\n * @return {!Array}\n */\nWebGL2RenderingContext.prototype.getUniformIndices = function(\n program, uniformNames) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {!Array} uniformIndices\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getActiveUniforms = function(\n program, uniformIndices, pname) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {string} uniformBlockName\n * @return {number}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getUniformBlockIndex = function(\n program, uniformBlockName) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} uniformBlockIndex\n * @param {number} pname\n * @return {*}\n */\nWebGL2RenderingContext.prototype.getActiveUniformBlockParameter = function(\n program, uniformBlockIndex, pname) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} uniformBlockIndex\n * @return {?string}\n * @nosideeffects\n */\nWebGL2RenderingContext.prototype.getActiveUniformBlockName = function(\n program, uniformBlockIndex) {};\n\n/**\n * @param {!WebGLProgram} program\n * @param {number} uniformBlockIndex\n * @param {number} uniformBlockBinding\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.uniformBlockBinding = function(\n program, uniformBlockIndex, uniformBlockBinding) {};\n\n/* Vertex Array Objects */\n\n/**\n * @return {?WebGLVertexArrayObject}\n */\nWebGL2RenderingContext.prototype.createVertexArray = function() {};\n\n/**\n * @param {?WebGLVertexArrayObject} vertexArray\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.deleteVertexArray = function(vertexArray) {};\n\n/**\n * @param {?WebGLVertexArrayObject} vertexArray\n * @return {boolean}\n */\nWebGL2RenderingContext.prototype.isVertexArray = function(vertexArray) {};\n\n/**\n * @param {?WebGLVertexArrayObject} array\n * @return {undefined}\n */\nWebGL2RenderingContext.prototype.bindVertexArray = function(array) {};\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLQuery() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLSampler() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLSync() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLTransformFeedback() {}\n\n\n/**\n * @constructor\n * @extends {WebGLObject}\n */\nfunction WebGLVertexArrayObject() {}\n', + "externs/fetchapi.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions of the fetch api.\n *\n * This api is still in development and not yet stable. Use at your\n * own risk.\n *\n * Based on Living Standard \u2014 Last Updated 17 August 2016\n *\n * @see https://fetch.spec.whatwg.org/\n * @externs\n */\n\n\n/**\n * @typedef {string}\n * @see https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy\n * Possible values: '', 'no-referrer', 'no-referrer-when-downgrade',\n * 'same-origin', 'origin', 'strict-origin', 'origin-when-cross-origin',\n * 'strict-origin-when-cross-origin', 'unsafe-url'\n */\nvar ReferrerPolicy;\n\n\n/**\n * @typedef {!Headers|!Array>|!Object}\n * @see https://fetch.spec.whatwg.org/#headersinit\n */\nvar HeadersInit;\n\n\n/**\n * @param {!HeadersInit=} opt_headersInit\n * @constructor\n * @implements {Iterable>}\n * @see https://fetch.spec.whatwg.org/#headers\n */\nfunction Headers(opt_headersInit) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nHeaders.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nHeaders.prototype.delete = function(name) {};\n\n/** @return {!IteratorIterable>} */\nHeaders.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nHeaders.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nHeaders.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nHeaders.prototype.has = function(name) {};\n\n/** @return {!IteratorIterable} */\nHeaders.prototype.keys = function() {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nHeaders.prototype.set = function(name, value) {};\n\n/** @return {!Iterator} */\nHeaders.prototype.values = function() {};\n\n/** @return {!Iterator>} */\nHeaders.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @typedef {\n * !Blob|!BufferSource|!FormData|!URLSearchParams|!ReadableStream|string}\n * @see https://fetch.spec.whatwg.org/#bodyinit\n */\nvar BodyInit;\n\n\n/**\n * @typedef {!BodyInit|!ReadableStream}\n * @see https://fetch.spec.whatwg.org/#responsebodyinit\n */\nvar ResponseBodyInit;\n\n\n/**\n * @interface\n * @see https://fetch.spec.whatwg.org/#body\n */\nfunction Body() {};\n\n/** @type {boolean} */\nBody.prototype.bodyUsed;\n\n/** @return {!Promise} */\nBody.prototype.arrayBuffer = function() {};\n\n/** @return {!Promise} */\nBody.prototype.blob = function() {};\n\n/** @return {!Promise} */\nBody.prototype.formData = function() {};\n\n/** @return {!Promise<*>} */\nBody.prototype.json = function() {};\n\n/** @return {!Promise} */\nBody.prototype.text = function() {};\n\n\n/**\n * @typedef {!Request|string}\n * @see https://fetch.spec.whatwg.org/#requestinfo\n */\nvar RequestInfo;\n\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @constructor\n * @implements {Body}\n * @see https://fetch.spec.whatwg.org/#request\n */\nfunction Request(input, opt_init) {}\n\n/** @override */\nRequest.prototype.bodyUsed;\n\n/** @override */\nRequest.prototype.arrayBuffer = function() {};\n\n/** @override */\nRequest.prototype.blob = function() {};\n\n/** @override */\nRequest.prototype.formData = function() {};\n\n/** @override */\nRequest.prototype.json = function() {};\n\n/** @override */\nRequest.prototype.text = function() {};\n\n/** @type {string} */\nRequest.prototype.method;\n\n/** @type {string} */\nRequest.prototype.url;\n\n/** @type {!Headers} */\nRequest.prototype.headers;\n\n/** @type {!FetchRequestType} */\nRequest.prototype.type;\n\n/** @type {!RequestDestination} */\nRequest.prototype.destination;\n\n/** @type {string} */\nRequest.prototype.referrer;\n\n/** @type {!RequestMode} */\nRequest.prototype.mode;\n\n/** @type {!RequestCredentials} */\nRequest.prototype.credentials;\n\n/** @type {!RequestCache} */\nRequest.prototype.cache;\n\n/** @type {!RequestRedirect} */\nRequest.prototype.redirect;\n\n/** @type {string} */\nRequest.prototype.integrity;\n\n/** @type {boolean} */\nRequest.prototype.isHistoryNavigation;\n\n/** @type {(undefined|boolean)} */\nRequest.prototype.keepalive;\n\n/** @return {!Request} */\nRequest.prototype.clone = function() {};\n\n\n/**\n * @record\n * @see https://fetch.spec.whatwg.org/#requestinit\n */\nfunction RequestInit() {};\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.method;\n\n/** @type {(undefined|!HeadersInit)} */\nRequestInit.prototype.headers;\n\n/** @type {(undefined|?BodyInit)} */\nRequestInit.prototype.body;\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.referrer;\n\n/** @type {(undefined|!ReferrerPolicy)} */\nRequestInit.prototype.referrerPolicy;\n\n/** @type {(undefined|!RequestMode)} */\nRequestInit.prototype.mode;\n\n/** @type {(undefined|!RequestCredentials)} */\nRequestInit.prototype.credentials;\n\n/** @type {(undefined|!RequestCache)} */\nRequestInit.prototype.cache;\n\n/** @type {(undefined|!RequestRedirect)} */\nRequestInit.prototype.redirect;\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.integrity;\n\n/** @type {(undefined|!AbortSignal)} */\nRequestInit.prototype.signal;\n\n/** @type {(undefined|boolean)} */\nRequestInit.prototype.keepalive;\n\n/** @type {(undefined|null)} */\nRequestInit.prototype.window;\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requesttype\n * Possible values: '', 'audio', 'font', 'image', 'script', 'style',\n * 'track', 'video'\n */\nvar FetchRequestType;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestdestination\n * Possible values: '', 'document', 'embed', 'font', 'image', 'manifest',\n * 'media', 'object', 'report', 'script', 'serviceworker', 'sharedworker',\n * 'style', 'worker', 'xslt'\n */\nvar RequestDestination;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestmode\n * Possible values: 'navigate', 'same-origin', 'no-cors', 'cors'\n */\nvar RequestMode ;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestcredentials\n * Possible values: 'omit', 'same-origin', 'include'\n */\nvar RequestCredentials;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestcache\n * Possible values: 'default', 'no-store', 'reload', 'no-cache', 'force-cache',\n * 'only-if-cached'\n */\nvar RequestCache;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#requestredirect\n * Possible values: 'follow', 'error', 'manual'\n */\nvar RequestRedirect;\n\n\n/**\n * @param {?ResponseBodyInit=} opt_body\n * @param {!ResponseInit=} opt_init\n * @constructor\n * @implements {Body}\n * @see https://fetch.spec.whatwg.org/#response\n */\nfunction Response(opt_body, opt_init) {}\n\n/** @return {!Response} */\nResponse.error = function() {};\n\n/**\n * @param {string} url\n * @param {number=} opt_status\n * @return {!Response}\n */\nResponse.redirect = function(url, opt_status) {};\n\n/** @override */\nResponse.prototype.bodyUsed;\n\n/** @override */\nResponse.prototype.arrayBuffer = function() {};\n\n/** @override */\nResponse.prototype.blob = function() {};\n\n/** @override */\nResponse.prototype.formData = function() {};\n\n/** @override */\nResponse.prototype.json = function() {};\n\n/** @override */\nResponse.prototype.text = function() {};\n\n/** @type {!ResponseType} */\nResponse.prototype.type;\n\n/** @type {string} */\nResponse.prototype.url;\n\n/** @type {boolean} */\nResponse.prototype.redirected;\n\n/** @type {number} */\nResponse.prototype.status;\n\n/** @type {boolean} */\nResponse.prototype.ok;\n\n/** @type {string} */\nResponse.prototype.statusText;\n\n/** @type {!Headers} */\nResponse.prototype.headers;\n\n/** @type {?ReadableStream} */\nResponse.prototype.body;\n\n/** @type {!Promise} */\nResponse.prototype.trailer;\n\n/** @return {!Response} */\nResponse.prototype.clone = function() {};\n\n\n/**\n * @record\n * @see https://fetch.spec.whatwg.org/#responseinit\n */\nfunction ResponseInit() {};\n\n/** @type {(undefined|number)} */\nResponseInit.prototype.status;\n\n/** @type {(undefined|string)} */\nResponseInit.prototype.statusText;\n\n/** @type {(undefined|!HeadersInit)} */\nResponseInit.prototype.headers;\n\n\n/**\n * @typedef {string}\n * @see https://fetch.spec.whatwg.org/#responsetype\n * Possible values: 'basic', 'cors', 'default', 'error', 'opaque',\n * 'opaqueredirect'\n */\nvar ResponseType;\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nfunction fetch(input, opt_init) {}\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nWindow.prototype.fetch = function(input, opt_init) {};\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nWorkerGlobalScope.prototype.fetch = function(input, opt_init) {};\n\n/**\n * if WorkerOptions.type = 'module', it specifies how `scriptURL` is fetched.\n * WorkerOptions is defined in html5.js.\n * @type {!RequestCredentials|undefined}\n */\nWorkerOptions.prototype.credentials;\n", + "externs/streamsapi.js":'/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Streams API definitions\n *\n * Based on Living Standard \u2014 Last Updated 5 August 2016\n * https://streams.spec.whatwg.org/commit-snapshots/34ecaadbcce8df9943d7a2cdb7fca4dc25914df4/\n *\n * @see https://streams.spec.whatwg.org/\n * @externs\n */\n\n\n/** @typedef {{ value:*, done:boolean }} */\nvar IteratorResult;\n\n\n/**\n * @typedef {!CountQueuingStrategy|!ByteLengthQueuingStrategy|{\n * size: (undefined|function(*): number),\n * highWaterMark: (number|undefined),\n * }}\n */\nvar QueuingStrategy;\n\n/**\n * The TransformStreamDefaultController class has methods that allow\n * manipulation of the associated ReadableStream and WritableStream.\n *\n * This class cannot be directly constructed and is instead passed by the\n * TransformStream to the methods of its transformer.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#ts-default-controller-class\n */\nfunction TransformStreamDefaultController() {};\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-desired-size\n */\nTransformStreamDefaultController.prototype.desiredSize;\n\n/**\n * @param {*} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-enqueue\n */\nTransformStreamDefaultController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} reason\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-error\n */\nTransformStreamDefaultController.prototype.error = function(reason) {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#ts-default-controller-terminate\n */\nTransformStreamDefaultController.prototype.terminate = function() {};\n\n\n/**\n * @record\n * @see https://streams.spec.whatwg.org/#transformer-api\n */\nfunction TransformStreamTransformer() {};\n\n/**\n * @type {(undefined|\n * function(!TransformStreamDefaultController):(!IThenable<*>|undefined))}\n */\nTransformStreamTransformer.prototype.start;\n\n/**\n * @type {(undefined|\n * function(*,\n * !TransformStreamDefaultController):(!IThenable<*>|undefined))}\n */\nTransformStreamTransformer.prototype.transform;\n\n/**\n * @type {(undefined|\n * function(!TransformStreamDefaultController):(!IThenable<*>|undefined))}\n */\nTransformStreamTransformer.prototype.flush;\n\n\n/**\n * A transform stream (https://streams.spec.whatwg.org/#transform-stream).\n * @record\n */\nfunction ITransformStream() {};\n\n/** @type {!WritableStream} */\nITransformStream.prototype.writable;\n\n/** @type {!ReadableStream} */\nITransformStream.prototype.readable;\n\n/**\n * @param {!TransformStreamTransformer=} transformer\n * @param {!QueuingStrategy=} writableStrategy\n * @param {!QueuingStrategy=} readableStrategy\n * @constructor\n * @implements ITransformStream\n * @see https://streams.spec.whatwg.org/#ts-class\n */\nfunction TransformStream(transformer, writableStrategy, readableStrategy) {};\n\n/** @type {!WritableStream} */\nTransformStream.prototype.writable;\n\n/** @type {!ReadableStream} */\nTransformStream.prototype.readable;\n\n/**\n * @record\n */\nfunction PipeOptions() {};\n\n/** @type {undefined|boolean} */\nPipeOptions.prototype.preventClose;\n\n/** @type {undefined|boolean} */\nPipeOptions.prototype.preventAbort;\n\n/** @type {undefined|boolean} */\nPipeOptions.prototype.preventCancel;\n\n\n/**\n * @record\n */\nfunction ReadableStreamSource() {};\n\n/**\n * @type {(undefined|\n * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))}\n */\nReadableStreamSource.prototype.start;\n\n/**\n * @type {(undefined|\n * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))}\n */\nReadableStreamSource.prototype.pull;\n\n/** @type {(undefined|function(*):(!Promise<*>|undefined))} */\nReadableStreamSource.prototype.cancel;\n\n/** @type {(undefined|string)} */\nReadableStreamSource.prototype.type;\n\n/** @type {(undefined|number)} */\nReadableStreamSource.prototype.autoAllocateChunkSize;\n\n/**\n * @record\n */\nfunction ReadableStreamIteratorOptions() {};\n\n/** @type {undefined|boolean} */\nReadableStreamIteratorOptions.prototype.preventCancel;\n\n/**\n * @param {!ReadableStreamSource=} opt_underlyingSource\n * @param {!QueuingStrategy=} opt_queuingStrategy\n * @constructor\n * @see https://streams.spec.whatwg.org/#rs-class\n */\nfunction ReadableStream(opt_underlyingSource, opt_queuingStrategy) {};\n\n/**\n * @type {boolean}\n * @see https://streams.spec.whatwg.org/#rs-locked\n */\nReadableStream.prototype.locked;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#rs-cancel\n */\nReadableStream.prototype.cancel = function(reason) {};\n\n/**\n * @param {!ReadableStreamIteratorOptions=} options\n * @return {!AsyncIterator}\n * @see https://streams.spec.whatwg.org/#rs-get-iterator\n */\nReadableStream.prototype.getIterator = function(options) {};\n\n/**\n * @param {{ mode:(undefined|string) }=} opt_options\n * @return {(!ReadableStreamDefaultReader|!ReadableStreamBYOBReader)}\n * @see https://streams.spec.whatwg.org/#rs-get-reader\n */\nReadableStream.prototype.getReader = function(opt_options) {};\n\n/**\n * @param {!ITransformStream} transform\n * @param {!PipeOptions=} opt_options\n * @return {!ReadableStream}\n * @see https://streams.spec.whatwg.org/#rs-pipe-through\n */\nReadableStream.prototype.pipeThrough = function(transform, opt_options) {};\n\n/**\n * @param {!WritableStream} dest\n * @param {!PipeOptions=} opt_options\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#rs-pipe-to\n */\nReadableStream.prototype.pipeTo = function(dest, opt_options) {};\n\n/**\n * @return {!Array}\n * @see https://streams.spec.whatwg.org/#rs-tee\n */\nReadableStream.prototype.tee = function() {};\n\n/**\n * @param {!ReadableStreamIteratorOptions=} options\n * @return {!AsyncIterator}\n * @see https://streams.spec.whatwg.org/#rs-asynciterator\n */\nReadableStream.prototype[Symbol.asyncIterator] = function(options) {};\n\n/**\n * The ReadableStreamDefaultReader constructor is generally not meant to be used directly;\n * instead, a stream\u2019s getReader() method should be used.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#default-reader-class\n */\nfunction ReadableStreamDefaultReader() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-reader-closed\n */\nReadableStreamDefaultReader.prototype.closed;\n\n/**\n * @param {*} reason\n * @return {!Promise<*>}\n * @see https://streams.spec.whatwg.org/#default-reader-cancel\n */\nReadableStreamDefaultReader.prototype.cancel = function(reason) {};\n\n/**\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-reader-read\n */\nReadableStreamDefaultReader.prototype.read = function() {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#default-reader-release-lock\n */\nReadableStreamDefaultReader.prototype.releaseLock = function() {};\n\n\n/**\n * The ReadableStreamBYOBReader constructor is generally not meant to be used\n * directly; instead, a stream\u2019s getReader() method should be used.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#byob-reader-class\n */\nfunction ReadableStreamBYOBReader() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#byob-reader-closed\n */\nReadableStreamBYOBReader.prototype.closed;\n\n/**\n * @param {*} reason\n * @return {!Promise<*>}\n * @see https://streams.spec.whatwg.org/#byob-reader-cancel\n */\nReadableStreamBYOBReader.prototype.cancel = function(reason) {};\n\n/**\n * @param {!ArrayBufferView} view\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#byob-reader-read\n */\nReadableStreamBYOBReader.prototype.read = function(view) {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#byob-reader-release-lock\n */\nReadableStreamBYOBReader.prototype.releaseLock = function() {};\n\n\n/**\n * The ReadableStreamDefaultController constructor cannot be used directly;\n * it only works on a ReadableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#rs-default-controller-class\n */\nfunction ReadableStreamDefaultController() {};\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-desired-size\n */\nReadableStreamDefaultController.prototype.desiredSize;\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-close\n */\nReadableStreamDefaultController.prototype.close = function() {};\n\n/**\n * @param {*} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-enqueue\n */\nReadableStreamDefaultController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} err\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-error\n */\nReadableStreamDefaultController.prototype.error = function(err) {};\n\n\n/**\n * The ReadableByteStreamController constructor cannot be used directly;\n * it only works on a ReadableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#rbs-controller-class\n */\nfunction ReadableByteStreamController() {};\n\n/**\n * @type {!ReadableStreamBYOBRequest}\n * @see https://streams.spec.whatwg.org/#rbs-controller-byob-request\n */\nReadableByteStreamController.prototype.byobRequest;\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#rbs-controller-desired-size\n */\nReadableByteStreamController.prototype.desiredSize;\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-close\n */\nReadableByteStreamController.prototype.close = function() {};\n\n/**\n * @param {!ArrayBufferView} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-enqueue\n */\nReadableByteStreamController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} err\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-error\n */\nReadableByteStreamController.prototype.error = function(err) {};\n\n\n/**\n * @interface\n * @see https://streams.spec.whatwg.org/#rs-byob-request-class\n */\nfunction ReadableStreamBYOBRequest() {};\n\n/**\n * @type {!ArrayBufferView}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-view\n */\nReadableStreamBYOBRequest.prototype.view;\n\n/**\n * @param {number} bytesWritten\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-respond\n */\nReadableStreamBYOBRequest.prototype.respond = function(bytesWritten) {};\n\n/**\n * @param {!ArrayBufferView} view\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-respond-with-new-view\n */\nReadableStreamBYOBRequest.prototype.respondWithNewView = function(view) {};\n\n\n/**\n * @record\n */\nfunction WritableStreamSink() {};\n\n/** @type {(undefined|function(!WritableStreamDefaultController):(!IThenable<*>|undefined))}*/\nWritableStreamSink.prototype.start;\n\n/** @type {(undefined|function(*, !WritableStreamDefaultController):(!IThenable<*>|undefined))}*/\nWritableStreamSink.prototype.write;\n\n/** @type {(undefined|function():(!IThenable<*>|undefined))} */\nWritableStreamSink.prototype.close;\n\n/** @type {(undefined|function(*):(!IThenable<*>|undefined))} */\nWritableStreamSink.prototype.abort;\n\n\n/**\n * @param {!WritableStreamSink=} opt_underlyingSink\n * @param {!QueuingStrategy=} opt_queuingStrategy\n * @constructor\n * @see https://streams.spec.whatwg.org/#ws-class\n */\nfunction WritableStream(opt_underlyingSink, opt_queuingStrategy) {};\n\n/**\n * @type {boolean}\n * @see https://streams.spec.whatwg.org/#ws-locked\n */\nWritableStream.prototype.locked;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#ws-abort\n */\nWritableStream.prototype.abort = function(reason) {};\n\n/**\n * @return {!WritableStreamDefaultWriter}\n * @see https://streams.spec.whatwg.org/#ws-get-writer\n */\nWritableStream.prototype.getWriter = function() {};\n\n\n/**\n * @interface\n * @see https://streams.spec.whatwg.org/#default-writer-class\n */\nfunction WritableStreamDefaultWriter() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-closed\n */\nWritableStreamDefaultWriter.prototype.closed;\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#default-writer-desiredSize\n */\nWritableStreamDefaultWriter.prototype.desiredSize;\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-ready\n */\nWritableStreamDefaultWriter.prototype.ready;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-abort\n */\nWritableStreamDefaultWriter.prototype.abort = function(reason) {};\n\n/**\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-close\n */\nWritableStreamDefaultWriter.prototype.close = function() {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#default-writer-release-lock\n */\nWritableStreamDefaultWriter.prototype.releaseLock = function() {};\n\n/**\n * @param {*} chunk\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-write\n */\nWritableStreamDefaultWriter.prototype.write = function(chunk) {};\n\n\n/**\n * The WritableStreamDefaultController constructor cannot be used directly;\n * it only works on a WritableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#ws-default-controller-class\n */\nfunction WritableStreamDefaultController() {};\n\n/**\n * @param {*} err\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#ws-default-controller-error\n */\nWritableStreamDefaultController.prototype.error = function(err) {};\n\n\n/**\n * @param {{ highWaterMark:number }} config\n * @constructor\n * @see https://streams.spec.whatwg.org/#blqs-class\n */\nfunction ByteLengthQueuingStrategy(config) {}\n\n/**\n * If we don\'t want to be strict we can define chunk as {*}\n * and return as {number|undefined}\n *\n * @param {{ byteLength:number }} chunk\n * @return {number}\n * @see https://streams.spec.whatwg.org/#blqs-size\n */\nByteLengthQueuingStrategy.prototype.size = function(chunk) {};\n\n\n/**\n * @param {{ highWaterMark:number }} config\n * @constructor\n * @see https://streams.spec.whatwg.org/#cqs-class\n */\nfunction CountQueuingStrategy(config) {}\n\n/**\n * @param {*} chunk\n * @return {number}\n * @see https://streams.spec.whatwg.org/#cqs-size\n */\nCountQueuingStrategy.prototype.size = function(chunk) {};\n', + "externs/whatwg_console.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for console debugging facilities.\n * https://console.spec.whatwg.org/\n * @externs\n */\n\n/**\n * @constructor\n * @see https://console.spec.whatwg.org/\n */\nfunction Console() {};\n\n/**\n * If condition is false, perform Logger("error", data).\n * @param {*} condition\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.assert = function(condition, var_data) {};\n\n/**\n * @return {undefined}\n */\nConsole.prototype.clear = function() {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.debug = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.error = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.info = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.log = function(var_data) {};\n\n/**\n * @param {!Object} tabularData\n * @param {*=} properties\n * @return {undefined}\n */\nConsole.prototype.table = function(tabularData, properties) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.trace = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.warn = function(var_data) {};\n\n/**\n * @param {*} item\n * @return {undefined}\n */\nConsole.prototype.dir = function(item) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.dirxml = function(var_data) {};\n\n/**\n * @param {string=} label\n * @return {undefined}\n */\nConsole.prototype.count = function(label) {};\n\n/**\n * @param {string=} label\n * @return {undefined}\n */\nConsole.prototype.countReset = function(label) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.group = function(var_data) {};\n\n/**\n * @param {...*} var_data\n * @return {undefined}\n */\nConsole.prototype.groupCollapsed = function(var_data) {};\n\n/**\n * @return {undefined}\n */\nConsole.prototype.groupEnd = function() {};\n\n/**\n * @param {string} label\n * @return {undefined}\n */\nConsole.prototype.time = function(label) {};\n\n/**\n * @param {string} label\n * @param {...*} data\n * @return {undefined}\n */\nConsole.prototype.timeLog = function(label, data) {};\n\n/**\n * @param {string} label\n * @return {undefined}\n */\nConsole.prototype.timeEnd = function(label) {};\n\n/** @type {!Console} */\nWindow.prototype.console;\n\n/**\n * @type {!Console}\n * @suppress {duplicate}\n */\nvar console;\n', +-"externs/nonstandard_console.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for console debugging facilities implemented in\n * various browsers but not part of https://console.spec.whatwg.org/.\n * @externs\n */\n\n/**\n * @constructor\n * @see https://cs.chromium.org/search/?q=%22interface+MemoryInfo%22+file:idl+file:WebKit+package:chromium&type=cs\n */\nfunction MemoryInfo() {};\n\n/** @type {number} */\nMemoryInfo.prototype.totalJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.usedJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.jsHeapSizeLimit;\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.markTimeline = function(value) {};\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profile = function(title) {};\n\n/** @type {Array} */\nConsole.prototype.profiles;\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profileEnd = function(title) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.timeStamp = function(value) {};\n\n/** @type {MemoryInfo} */\nConsole.prototype.memory;\n', ++"externs/nonstandard_console.js":'/*\n * Copyright 2019 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for console debugging facilities implemented in\n * various browsers but not part of https://console.spec.whatwg.org/.\n * @externs\n */\n\n/**\n * @constructor\n * @see https://cs.ch40m1um.qjz9zk/search/?q=%22interface+MemoryInfo%22+file:idl+file:WebKit+package:chromium&type=cs\n */\nfunction MemoryInfo() {};\n\n/** @type {number} */\nMemoryInfo.prototype.totalJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.usedJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.jsHeapSizeLimit;\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.markTimeline = function(value) {};\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profile = function(title) {};\n\n/** @type {Array} */\nConsole.prototype.profiles;\n\n/**\n * @param {string=} title\n * @return {undefined}\n */\nConsole.prototype.profileEnd = function(title) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.timeStamp = function(value) {};\n\n/** @type {MemoryInfo} */\nConsole.prototype.memory;\n', + "js/base.js":'/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview The base namespace for code injected by the compiler\n * at compile-time.\n */\n\n/** @const */\nvar $jscomp = $jscomp || {};\n\n/** @const Locals for goog.scope */\n$jscomp.scope = {};\n', + "js/es6/array.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Array polyfills.\n * @suppress {uselessCode}\n */\n'require es6/array/copywithin';\n'require es6/array/entries';\n'require es6/array/fill';\n'require es6/array/find';\n'require es6/array/findindex';\n'require es6/array/flat';\n'require es6/array/flatmap';\n'require es6/array/from';\n'require es6/array/includes';\n'require es6/array/keys';\n'require es6/array/of';\n'require es6/array/values';\n", + "js/es6/array/copywithin.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.copyWithin', function(orig) {\n // requires strict mode to throw for invalid `this` or params\n 'use strict';\n\n if (orig) return orig;\n\n /**\n * Copies elements from one part of the array to another.\n *\n * @this {!IArrayLike}\n * @param {number} target Start index to copy elements to.\n * @param {number} start Start index to copy elements from.\n * @param {number=} opt_end Index from which to end copying.\n * @return {!IArrayLike} The array, with the copy performed in-place.\n * @template VALUE\n */\n var polyfill = function(target, start, opt_end) {\n var len = this.length;\n target = toInteger(target);\n start = toInteger(start);\n var end = opt_end === undefined ? len : toInteger(opt_end);\n var to = target < 0 ? Math.max(len + target, 0) : Math.min(target, len);\n var from = start < 0 ? Math.max(len + start, 0) : Math.min(start, len);\n var final = end < 0 ? Math.max(len + end, 0) : Math.min(end, len);\n if (to < from) {\n while (from < final) {\n if (from in this) {\n this[to++] = this[from++];\n } else {\n delete this[to++];\n from++;\n }\n }\n } else {\n final = Math.min(final, len + from - to);\n to += final - from;\n while (final > from) {\n if (--final in this) {\n this[--to] = this[final];\n } else {\n delete this[--to];\n }\n }\n }\n return this;\n };\n\n /**\n * @param {number} arg\n * @return {number}\n */\n function toInteger(arg) {\n var n = Number(arg);\n if (n === Infinity || n === -Infinity) {\n return n;\n }\n return n | 0;\n }\n\n return polyfill;\n}, 'es6', 'es3');\n", +@@ -870,13 +870,13 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/es6/array/fill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.fill', function(orig) {\n if (orig) return orig;\n\n /**\n * Fills elements of an array with a constant value.\n *\n * @this {!IArrayLike}\n * @param {VALUE} value Value to fill.\n * @param {number=} opt_start Start index, or zero if omitted.\n * @param {number=} opt_end End index, or length if omitted.\n * @return {!IArrayLike} The array, with the fill performed in-place.\n * @template VALUE\n * @suppress {reportUnknownTypes, strictPrimitiveOperators}\n */\n var polyfill = function(value, opt_start, opt_end) {\n var length = this.length || 0;\n if (opt_start < 0) {\n opt_start = Math.max(0, length + /** @type {number} */ (opt_start));\n }\n if (opt_end == null || opt_end > length) opt_end = length;\n opt_end = Number(opt_end);\n if (opt_end < 0) opt_end = Math.max(0, length + opt_end);\n for (var i = Number(opt_start || 0); i < opt_end; i++) {\n this[i] = value;\n }\n return this;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/array/find.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.find', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds and returns an element that satisfies the given predicate.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {VALUE|undefined} The found value, or undefined.\n * @template VALUE, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).v;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/array/findindex.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.findIndex', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds an element that satisfies the given predicate, returning its index.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {number} The found value, or undefined.\n * @template VALUE, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).i;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/array/flat.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flat', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flat.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n *\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @suppress {reportUnknownTypes}\n */\n var flat = function(depth) {\n // TODO(sdh): Consider respecting Symbol.species (b/121061255).\n depth = depth === undefined ? 1 : depth;\n var flattened = [];\n for (var i = 0; i < this.length; i++) {\n var element = this[i];\n if (Array.isArray(element) && depth > 0) {\n var inner = Array.prototype.flat.call(element, depth - 1);\n flattened.push.apply(flattened, inner);\n } else {\n flattened.push(element);\n }\n }\n return flattened;\n };\n\n return flat;\n}, 'es9', 'es5');\n", +-"js/es6/array/flatmap.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flatMap', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flatMap.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array} callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @suppress {reportUnknownTypes}\n */\n var flatMap = function(callback, thisArg) {\n var mapped = [];\n for (var i = 0; i < this.length; i++) {\n var result = callback.call(thisArg, this[i], i, this);\n if (Array.isArray(result)) {\n mapped.push.apply(mapped, result);\n } else {\n // NOTE: The specification says the callback can return a non-Array.\n // We intentionally don't include that in the type information on\n // this function or the corresponding extern in order to encourage\n // more readable code and avoid complex TTL in the type annotations,\n // but we still want to behave correctly if the callback gives us a\n // non-Array.\n mapped.push(result);\n }\n }\n return mapped;\n };\n\n return flatMap;\n}, 'es9', 'es5');\n", ++"js/es6/array/flat.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flat', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flat.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\n *\n * @param {number=} depth\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, S\n * @suppress {reportUnknownTypes}\n */\n var flat = function(depth) {\n // TODO(sdh): Consider respecting Symbol.species (b/121061255).\n depth = depth === undefined ? 1 : depth;\n var flattened = [];\n for (var i = 0; i < this.length; i++) {\n var element = this[i];\n if (Array.isArray(element) && depth > 0) {\n var inner = Array.prototype.flat.call(element, depth - 1);\n flattened.push.apply(flattened, inner);\n } else {\n flattened.push(element);\n }\n }\n return flattened;\n };\n\n return flat;\n}, 'es9', 'es5');\n", ++"js/es6/array/flatmap.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @fileoverview @suppress {uselessCode} */\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.flatMap', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.flatMap.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap\n *\n * @param {function(this: THIS, T, number, !IArrayLike): !Array} callback\n * @param {THIS=} thisArg\n * @return {!Array}\n * @this {!IArrayLike}\n * @template T, THIS, S\n * @suppress {reportUnknownTypes}\n */\n var flatMap = function(callback, thisArg) {\n var mapped = [];\n for (var i = 0; i < this.length; i++) {\n var result = callback.call(thisArg, this[i], i, this);\n if (Array.isArray(result)) {\n mapped.push.apply(mapped, result);\n } else {\n // NOTE: The specification says the callback can return a non-Array.\n // We intentionally don't include that in the type information on\n // this function or the corresponding extern in order to encourage\n // more readable code and avoid complex TTL in the type annotations,\n // but we still want to behave correctly if the callback gives us a\n // non-Array.\n mapped.push(result);\n }\n }\n return mapped;\n };\n\n return flatMap;\n}, 'es9', 'es5');\n", + "js/es6/array/from.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.from', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates a new Array from an array-like or iterable object.\n *\n *

Polyfills the static function Array.from(). Does not support\n * constructor inheritance (i.e. (subclass of Array).from), and\n * relies on the compiler to check the validity of inputs rather\n * than producing spec-compliant TypeErrors.\n *\n * @param {!IArrayLike|!Iterable} arrayLike\n * An array-like or iterable.\n * @param {(function(this: THIS, INPUT, number): OUTPUT)=} opt_mapFn\n * Function to call on each argument.\n * @param {THIS=} opt_thisArg\n * Object to use as 'this' when calling mapFn.\n * @return {!Array}\n * @template INPUT, OUTPUT, THIS\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(arrayLike, opt_mapFn, opt_thisArg) {\n opt_mapFn = opt_mapFn != null ? opt_mapFn : function(x) { return x; };\n var result = [];\n // NOTE: this is cast to ? because [] on @struct is an error\n var iteratorFunction = typeof Symbol != 'undefined' && Symbol.iterator &&\n (/** @type {?} */ (arrayLike)[Symbol.iterator]);\n if (typeof iteratorFunction == 'function') {\n arrayLike = iteratorFunction.call(arrayLike);\n var next;\n var k = 0;\n while (!(next = arrayLike.next()).done) {\n result.push(\n opt_mapFn.call(/** @type {?} */ (opt_thisArg), next.value, k++));\n }\n } else {\n var len = arrayLike.length; // need to support non-iterables\n for (var i = 0; i < len; i++) {\n result.push(\n opt_mapFn.call(/** @type {?} */ (opt_thisArg), arrayLike[i], i));\n }\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/array/includes.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/object/is';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.includes.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes\n *\n * @this {!IArrayLike}\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n var includes = function(searchElement, opt_fromIndex) {\n var array = this;\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n var i = opt_fromIndex || 0;\n if (i < 0) {\n i = Math.max(i + len, 0);\n }\n for (; i < len; i++) {\n var element = array[i];\n if (element === searchElement || Object.is(element, searchElement)) {\n return true;\n }\n }\n return false;\n };\n\n return includes;\n}, 'es7', 'es3');\n", ++"js/es6/array/includes.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/object/is';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Array.prototype.includes.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes\n *\n * @this {!IArrayLike}\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n var includes = function(searchElement, opt_fromIndex) {\n var array = this;\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n var i = opt_fromIndex || 0;\n if (i < 0) {\n i = Math.max(i + len, 0);\n }\n for (; i < len; i++) {\n var element = array[i];\n if (element === searchElement || Object.is(element, searchElement)) {\n return true;\n }\n }\n return false;\n };\n\n return includes;\n}, 'es7', 'es3');\n", + "js/es6/array/keys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.keys', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of keys of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(i) { return i; });\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/array/of.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/array/from';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.of', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates an array from a fixed set of arguments.\n *\n *

Polyfills the static function Array.of(). Does not support\n * constructor inheritance (i.e. (subclass of Array).of).\n *\n * @param {...T} var_args Elements to include in the array.\n * @return {!Array}\n * @template T\n */\n var polyfill = function(var_args) {\n return Array.from(arguments);\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/array/values.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n// NOTE: Although Array.prototype.values was added to the 2015 edition of the\n// spec, we consider it an \"ES8\" feature because many browsers which are\n// otherwise ES6-compatible, have not implemented it due to web compatibility\n// issues. See https://bugs.chromium.org/p/chromium/issues/detail?id=615873\n$jscomp.polyfill('Array.prototype.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of values of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(k, v) { return v; });\n };\n\n return polyfill;\n}, 'es8', 'es3');\n", ++"js/es6/array/values.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n// NOTE: Although Array.prototype.values was added to the 2015 edition of the\n// spec, we consider it an \"ES8\" feature because many browsers which are\n// otherwise ES6-compatible, have not implemented it due to web compatibility\n// issues. See https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=615873\n$jscomp.polyfill('Array.prototype.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of values of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(k, v) { return v; });\n };\n\n return polyfill;\n}, 'es8', 'es3');\n", + "js/es6/async_generator_wrapper.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled Async Generators.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/promise/promise';\n'require es6/symbol';\n'require es6/util/makeasynciterator';\n\n\n/** @enum {number} */\n$jscomp.AsyncGeneratorWrapper$ActionEnum = {\n /** Yield the value from the wrapper generator */\n YIELD_VALUE: 0,\n /** Yield each value from a delegate generator */\n YIELD_STAR: 1,\n /** Resolve the value as a Promise and continue execution */\n AWAIT_VALUE: 2,\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ActionEnum} action\n * @param {VALUE} value\n * @constructor\n * @template VALUE\n * @struct\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ActionRecord = function(action, value) {\n /**\n * @public\n * @const\n * @type {!$jscomp.AsyncGeneratorWrapper$ActionEnum}\n */\n this.action = action;\n\n /**\n * @public\n * @const\n * @type {VALUE}\n */\n this.value = /** @type {VALUE} */ (value);\n};\n\n/** @enum {string} */\n$jscomp.AsyncGeneratorWrapper$GeneratorMethod = {\n NEXT: 'next', THROW: 'throw', RETURN: 'return',\n};\n\n/**\n * Records the details of a call to `next()`, `throw()`, or `return()`.\n *\n * One of these objects will be created for each call.\n *\n * @param {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * Method to call on generator\n * @param {?} param\n * Parameter for method called on generator\n *\n * @param {function(!IIterableResult)} resolve\n * Function to resolve the Promise associated with this frame.\n * @param {function(?)} reject\n * Function to reject the Promise associated with this frame.\n *\n * @constructor\n * @private\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionFrame_ = function(\n method, param, resolve, reject) {\n /** @type {$jscomp.AsyncGeneratorWrapper$GeneratorMethod} */\n this.method = method;\n /** @type {?} */\n this.param = param;\n /** @type {function(!IIterableResult)} */\n this.resolve = resolve;\n /** @type {function(?)} */\n this.reject = reject;\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} frame\n * The frame at this position in the queue\n * @param {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} next\n * The node containing the frame to be executed after this one completes\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionNode_ = function(frame, next) {\n /** @type {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} */\n this.frame = frame;\n /** @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_} */\n this.next = next;\n};\n\n/**\n * A minimalistic queue backed by a linked-list.\n *\n * @constructor\n * @private\n * @template VALUE\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_ = function() {\n /**\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.head_ = null;\n\n /**\n *\n * @type {$jscomp.AsyncGeneratorWrapper$ExecutionNode_}\n * @private\n */\n this.tail_ = null;\n};\n\n/**\n * @return {boolean}\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.isEmpty = function() {\n return this.head_ === null;\n};\n\n/**\n * Returns the current head frame if it exists, otherwise throws Error.\n *\n * @return {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_}\n * @throws {Error} if the queue is empty\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.first = function() {\n if (this.head_) {\n return this.head_.frame;\n } else {\n throw new Error('no frames in executionQueue');\n }\n};\n\n/**\n * Drops the current head frame off the head of the queue. Performs same\n * operations as a theoretical \"pop\", but saves time by not storing or returning\n * the popped frame.\n *\n * If the queue is empty, no operation is performed.\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.drop = function() {\n if (this.head_) {\n this.head_ = this.head_.next;\n if (!this.head_) {\n this.tail_ = null;\n }\n }\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$ExecutionFrame_} newFrame\n * the new frame to be executed after all frames currently in the queue\n */\n$jscomp.AsyncGeneratorWrapper$ExecutionQueue_.prototype.enqueue = function(\n newFrame) {\n var node = new $jscomp.AsyncGeneratorWrapper$ExecutionNode_(newFrame, null);\n if (this.tail_) {\n this.tail_.next = node;\n this.tail_ = node;\n } else {\n this.head_ = node;\n this.tail_ = node;\n }\n};\n\n/**\n * @constructor\n * @implements {AsyncGenerator}\n * @implements {AsyncIterable}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper = function(\n /** @type {!Generator<$jscomp.AsyncGeneratorWrapper$ActionRecord>} */\n generator) {\n /** @private */\n this.generator_ = generator;\n\n /**\n * @private\n * @type {AsyncIterator}\n */\n this.delegate_ = null;\n\n /**\n * @type {!$jscomp.AsyncGeneratorWrapper$ExecutionQueue_}\n * @private\n */\n this.executionQueue_ = new $jscomp.AsyncGeneratorWrapper$ExecutionQueue_();\n\n $jscomp.initSymbolAsyncIterator();\n\n /** @type {$jscomp.AsyncGeneratorWrapper} */\n this[Symbol.asyncIterator] =\n /** @return {$jscomp.AsyncGeneratorWrapper} */ function() {\n return this;\n };\n\n var self = this;\n\n /**\n * @this {undefined}\n * @param {!IIterableResult} record\n * @private\n */\n this.boundHandleDelegateResult_ = function(record) {\n self.handleDelegateResult_(record);\n };\n\n /**\n * @this {undefined}\n * @param {*} thrownError\n * @private\n */\n this.boundHandleDelegateError_ = function(thrownError) {\n self.handleDelegateError_(thrownError);\n };\n\n /**\n * @this {undefined}\n * @param {*} err\n * @private\n */\n this.boundRejectAndClose_ = function(err) {\n self.rejectAndClose_(err);\n };\n};\n\n/**\n * @param {!$jscomp.AsyncGeneratorWrapper$GeneratorMethod} method\n * @param {?} param\n * @return {!Promise>}\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.enqueueMethod_ = function(\n method, param) {\n var self = this;\n return new Promise(function(resolve, reject) {\n var wasEmpty = self.executionQueue_.isEmpty();\n self.executionQueue_.enqueue(\n new $jscomp.AsyncGeneratorWrapper$ExecutionFrame_(\n method, param, resolve, reject));\n if (wasEmpty) {\n self.runFrame_();\n }\n });\n};\n\n/**\n * @override\n * @param {?=} opt_value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.next = function(opt_value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT, opt_value);\n};\n\n/**\n * @override\n * @param {VALUE} value\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.return = function(value) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.RETURN,\n new $jscomp.AsyncGeneratorWrapper$ActionRecord(\n $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE, value));\n};\n\n/**\n * @override\n * @param {*=} exception\n * @return {!Promise>}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.throw = function(exception) {\n return this.enqueueMethod_(\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW, exception);\n};\n\n/**\n * Recursively executes all frames in the executionQueue until it is empty.\n * Frames that are added to the queue while execution is being performed will\n * be executed when they are reached.\n *\n * In order to guarantee each frame in the entire queue will be processed\n * exactly once, each branch in runDelegateFrame and runGeneratorFrame should\n * conclude with the following specification:\n *\n * If the frame is ready to be resolved/rejected:\n *\n * 1. Resolve or reject the frame.\n * 2. Drop the frame from the head of the queue.\n * 3. End with a call to runFrame.\n *\n * Otherwise, if another action must be performed:\n *\n * 1. Mutate the frame's method and param to reflect the next action.\n * 2. End with a call to runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runFrame_ = function() {\n if (!this.executionQueue_.isEmpty()) {\n try {\n if (this.delegate_) {\n this.runDelegateFrame_();\n } else {\n this.runGeneratorFrame_();\n }\n } catch (err) {\n this.rejectAndClose_(err);\n }\n }\n};\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runGeneratorFrame_ = function() {\n var self = this;\n var frame = this.executionQueue_.first();\n try {\n var genRec = this.generator_[frame.method](frame.param);\n if (genRec.value instanceof $jscomp.AsyncGeneratorWrapper$ActionRecord) {\n switch (genRec.value.action) {\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.resolve({value: resolvedValue, done: genRec.done});\n self.executionQueue_.drop();\n self.runFrame_();\n },\n function(e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.YIELD_STAR:\n self.delegate_ = $jscomp.makeAsyncIterator(genRec.value.value);\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = undefined;\n self.runFrame_();\n return;\n\n case $jscomp.AsyncGeneratorWrapper$ActionEnum.AWAIT_VALUE:\n Promise.resolve(genRec.value.value)\n .then(\n function(resolvedValue) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = resolvedValue;\n self.runFrame_();\n },\n function(thrownErr) {\n frame.method =\n $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownErr;\n self.runFrame_();\n })\n .catch(this.boundRejectAndClose_);\n return;\n\n default:\n throw new Error('Unrecognized AsyncGeneratorWrapper$ActionEnum');\n }\n }\n else {\n frame.resolve(genRec);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n } catch (e) {\n frame.reject(e);\n self.executionQueue_.drop();\n self.runFrame_();\n }\n};\n\n\n/**\n * For safety, all branches should meet invariants listed in runFrame.\n *\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.runDelegateFrame_ = function() {\n if (!this.delegate_) {\n throw new Error(\"no delegate to perform execution\");\n }\n var frame = this.executionQueue_.first();\n if (frame.method in this.delegate_) {\n try {\n this.delegate_[frame.method](frame.param)\n .then(this.boundHandleDelegateResult_, this.boundHandleDelegateError_)\n .catch(this.boundRejectAndClose_);\n } catch (err) {\n this.handleDelegateError_(err);\n }\n } else {\n this.delegate_ = null;\n this.runFrame_();\n }\n};\n\n/**\n * @param {!IIterableResult} record\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateResult_ = function(\n record) {\n var frame = this.executionQueue_.first();\n if (record.done === true) {\n // Delegate is done. Its return value becomes the value of the `yield*`\n // expression. We must continue the async generator as if next() were called\n // with that value here.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.NEXT;\n frame.param = record.value;\n this.runFrame_();\n } else {\n frame.resolve({value: record.value, done: false});\n this.executionQueue_.drop();\n this.runFrame_();\n }\n};\n\n/**\n * @param {*} thrownError\n * @private\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncGeneratorWrapper.prototype.handleDelegateError_ = function(\n thrownError) {\n var frame = this.executionQueue_.first();\n // The delegate threw an exception or rejected a promise, so we must continue\n // our generator as if the `yield *` threw the exception.\n this.delegate_ = null;\n frame.method = $jscomp.AsyncGeneratorWrapper$GeneratorMethod.THROW;\n frame.param = thrownError;\n this.runFrame_();\n};\n\n/**\n * Rejects the current frame and closes the generator.\n *\n * @param {*} err Error causing the rejection\n * @private\n */\n$jscomp.AsyncGeneratorWrapper.prototype.rejectAndClose_ = function(err) {\n if (!this.executionQueue_.isEmpty()) {\n this.executionQueue_.first().reject(err);\n this.executionQueue_.drop();\n }\n\n if (this.delegate_ && 'return' in this.delegate_) {\n this.delegate_['return'](undefined);\n this.delegate_ = null;\n }\n this.generator_['return'](undefined);\n\n // Keep processing all frames remaining in the queue.\n // Note: Some of these frames might be throw requests, but our backing\n // generator will handle these appropriately.\n this.runFrame_();\n};\n", + "js/es6/conformance.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/global';\n\n\n/**\n * @fileoverview Check one of the most obscure features of ES6 as a proxy\n * for full conformance. If this is enabled, this test is used instead of\n * larger, more specific conformance tests.\n */\n\n/**\n * Check ES6 conformance by checking an obscure detail of Proxy that\n * wasn't implemented correctly until after all other ES6 features in\n * most browsers.\n * @return {boolean} Whether Proxy works correctly.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.checkEs6ConformanceViaProxy = function() {\n try {\n var proxied = {};\n var proxy = Object.create(new $jscomp.global['Proxy'](proxied, {\n 'get': function (target, key, receiver) {\n return target == proxied && key == 'q' && receiver == proxy;\n }\n }));\n return proxy['q'] === true;\n } catch (err) {\n return false;\n }\n};\n\n/**\n * If this is true, assume that a runtime which implements Proxy also\n * implements the rest of the ECMAScript 2015 spec.\n * @define {boolean}\n */\n$jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS = false;\n\n/**\n * Whether the runtime implements the entire ECMAScript 2015 spec.\n * @const {boolean}\n */\n$jscomp.ES6_CONFORMANCE =\n $jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS &&\n $jscomp.checkEs6ConformanceViaProxy();\n", + "js/es6/execute_async_generator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime logic for transpiled async functions.\n * @suppress {uselessCode}\n */\n'require base';\n'require es6/promise/promise';\n'require es6/generator_engine';\n\n/**\n * Handles the execution of an async function.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * function* $jscomp$async$generator() {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * }\n * return $jscomp.executeAsyncGenerator($jscomp$async$generator());\n * }\n * ```\n * @param {!Generator} generator\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGenerator = function(generator) {\n function passValueToGenerator(value) {\n return generator.next(value);\n }\n\n function passErrorToGenerator(error) {\n return generator.throw(error);\n }\n\n return new Promise(function(resolve, reject) {\n function handleGeneratorRecord(/** !IIterableResult<*> */ genRec) {\n if (genRec.done) {\n resolve(genRec.value);\n } else {\n // One can await a non-promise, so genRec.value\n // might not already be a promise.\n Promise.resolve(genRec.value)\n .then(passValueToGenerator, passErrorToGenerator)\n .then(handleGeneratorRecord, reject);\n }\n }\n\n handleGeneratorRecord(generator.next());\n });\n};\n\n/**\n * Handles the execution of a generator function returning promises.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$this = this;\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$super$get$x = () => super.x;\n * return $jscomp.asyncExecutePromiseGeneratorFunction(\n * function* () {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * // - super.x replaced with $jscomp$async$super$get$x()\n * // - super.x(5) replaced with $jscomp$async$super$get$x()\n * // .call($jscomp$async$this, 5)\n * });\n * }\n * ```\n * @param {function(): !Generator} generatorFunction\n * @return {!Promise}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.asyncExecutePromiseGeneratorFunction = function(generatorFunction) {\n return $jscomp.asyncExecutePromiseGenerator(generatorFunction());\n};\n\n/**\n * Handles the execution of a state machine program that represents transpiled\n * async function.\n *\n * @final\n * @param {function(!$jscomp.generator.Context): (void|{value: ?})} program\n * @return {!Promise}\n * @suppress {reportUnknownTypes, visibility}\n */\n$jscomp.asyncExecutePromiseGeneratorProgram = function(program) {\n return $jscomp.asyncExecutePromiseGenerator(\n new $jscomp.generator.Generator_(\n new $jscomp.generator.Engine_(\n program)));\n};\n", +@@ -912,30 +912,30 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/es6/number/parseint.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Number.parseInt', function(orig) {\n return orig || parseInt;\n}, 'es6', 'es3');\n", + "js/es6/object.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Object polyfills.\n * @suppress {uselessCode}\n */\n'require es6/object/assign';\n'require es6/object/entries';\n'require es6/object/fromentries';\n'require es6/object/getownpropertydescriptors';\n'require es6/object/getownpropertysymbols';\n'require es6/object/is';\n'require es6/object/setprototypeof';\n'require es6/object/values';\n", + "js/es6/object/assign.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/util/assign';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.assign', function(orig) {\n return orig || $jscomp.assign;\n}, 'es6', 'es3');\n", +-"js/es6/object/entries.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.entries', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of [key, value] arrays, one for each entry\n * in the given object.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Array>}\n * @template KEY, VALUE\n */\n var entries = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n };\n\n return entries;\n}, 'es8', 'es3');\n", ++"js/es6/object/entries.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.entries', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of [key, value] arrays, one for each entry\n * in the given object.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Array>}\n * @template KEY, VALUE\n */\n var entries = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n };\n\n return entries;\n}, 'es8', 'es3');\n", + "js/es6/object/fromentries.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require es6/symbol';\n'require util/defineproperty';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.fromEntries', function(orig) {\n if (orig) {\n return orig;\n }\n\n /**\n * @param {!Iterable<*>} iter\n * @return {!Object}\n * @see https://github.com/tc39/proposal-object-from-entries/blob/master/polyfill.js\n */\n function fromEntries(iter) {\n var obj = {};\n\n $jscomp.initSymbolIterator();\n\n if (!(Symbol.iterator in iter)) {\n throw new TypeError('' + iter + ' is not iterable');\n }\n\n var iteratorFn = (/** @type {function(): !Iterator>} */ (\n iter[Symbol.iterator]));\n var iterator = iteratorFn.call(iter);\n\n for (var result = iterator.next(); !result.done; result = iterator.next()) {\n var pair = result.value;\n\n if (Object(pair) !== pair) {\n throw new TypeError('iterable for fromEntries should yield objects');\n }\n\n var key = pair[0];\n var val = pair[1];\n obj[key] = val;\n }\n\n return obj;\n }\n\n return fromEntries;\n}, 'es_2019', 'es3');\n", +-"js/es6/object/getownpropertydescriptors.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/ownkeys';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertyDescriptors', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Object.getOwnPropertyDescriptors.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Object}\n */\n var getOwnPropertyDescriptors = function(obj) {\n var result = {};\n var keys = Reflect.ownKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return result;\n };\n\n return getOwnPropertyDescriptors;\n}, 'es8', 'es5');\n", ++"js/es6/object/getownpropertydescriptors.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/ownkeys';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertyDescriptors', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills Object.getOwnPropertyDescriptors.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n *\n * @param {!Object} obj\n * @return {!Object}\n */\n var getOwnPropertyDescriptors = function(obj) {\n var result = {};\n var keys = Reflect.ownKeys(obj);\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return result;\n };\n\n return getOwnPropertyDescriptors;\n}, 'es8', 'es5');\n", + "js/es6/object/getownpropertysymbols.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertySymbols', function(orig) {\n if (orig) return orig;\n\n // NOTE: The symbol polyfill is a string, so symbols show up in\n // Object.getOwnProperytyNames instead. It's been decided that\n // the trade-off of \"fixing\" this behavior is not worth the costs\n // in (a) code size, (b) brittleness, and (c) complexity.\n return function() { return []; };\n}, 'es6', 'es5'); // Same as Object.getOwnPropertyNames\n", +-"js/es6/object/is.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.is', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Object.is() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n *\n * Determines whether two values are the same value (that is,\n * functionally equivalent). This is the same as ===-equality,\n * except for two cases: 0 is not the same as -0, and NaN is\n * the same as NaN.\n *\n * @param {*} left\n * @param {*} right\n * @return {boolean}\n */\n var polyfill = function(left, right) {\n if (left === right) {\n // Handle the 0 === -0 exception\n return (left !== 0) || (1 / left === 1 / /** @type {number} */ (right));\n } else {\n // Handle the NaN !== NaN exception\n return (left !== left) && (right !== right);\n }\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/object/is.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.is', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Object.is() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n *\n * Determines whether two values are the same value (that is,\n * functionally equivalent). This is the same as ===-equality,\n * except for two cases: 0 is not the same as -0, and NaN is\n * the same as NaN.\n *\n * @param {*} left\n * @param {*} right\n * @return {boolean}\n */\n var polyfill = function(left, right) {\n if (left === right) {\n // Handle the 0 === -0 exception\n return (left !== 0) || (1 / left === 1 / /** @type {number} */ (right));\n } else {\n // Handle the NaN !== NaN exception\n return (left !== left) && (right !== right);\n }\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/object/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/util/setprototypeof';\n\n\n$jscomp.polyfill('Object.setPrototypeOf', function(orig) {\n // Note that $jscomp.setPrototypeOf will be `null` if it isn't possible to\n // implement this method.\n return orig || $jscomp.setPrototypeOf;\n}, 'es6', 'es5');\n", +-"js/es6/object/values.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of values from the given object.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} obj\n * @return {!Array}\n * @template KEY, VALUE\n */\n var values = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push(obj[key]);\n }\n }\n return result;\n };\n\n return values;\n}, 'es8', 'es3');\n", ++"js/es6/object/values.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an array of values from the given object.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n *\n * @param {!Object} obj\n * @return {!Array}\n * @template KEY, VALUE\n */\n var values = function(obj) {\n var result = [];\n for (var key in obj) {\n if ($jscomp.owns(obj, key)) {\n result.push(obj[key]);\n }\n }\n return result;\n };\n\n return values;\n}, 'es8', 'es3');\n", + "js/es6/promise.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all Promise polyfills.\n * @suppress {uselessCode}\n */\n'require es6/promise/promise';\n'require es6/promise/allSettled';\n'require es6/promise/finally';\n", + "js/es6/promise/allSettled.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/promise/promise';\n'require es6/array/from';\n\n$jscomp.polyfill('Promise.allSettled', function(orig) {\n if (orig) return orig;\n\n /**\n * @param {*} value\n * @return {{status: string, value: *}}\n */\n function fulfilledResult(value) {\n return {status: 'fulfilled', value: value};\n }\n\n /**\n * @param {*} reason\n * @return {{status: string, reason: *}}\n */\n function rejectedResult(reason) {\n return {status: 'rejected', reason: reason};\n }\n\n /**\n * These types are weaker than they could be, but they're strong enough for\n * this context.\n * @this {typeof Promise}\n * @param {!Iterable<*>} thenablesOrValues\n * @return {!Promise>}\n */\n var polyfill = function(thenablesOrValues) {\n // The spec requires allSettled to be called directly on the Promise\n // constructor, which is consistent with its requirement for Promise.all().\n /** @type {typeof Promise} */\n var PromiseConstructor = this;\n\n /**\n * @param {*} maybeThenable\n * @return {!Promise<*>}\n */\n function convertToAllSettledResult(maybeThenable) {\n return PromiseConstructor.resolve(maybeThenable)\n .then(fulfilledResult, rejectedResult);\n }\n\n // Create an array of promises that resolve to the appropriate result\n // objects and never reject.\n var wrappedResults =\n Array.from(thenablesOrValues, convertToAllSettledResult);\n return PromiseConstructor.all(wrappedResults);\n };\n return polyfill;\n}, 'es_next', 'es3');\n", + "js/es6/promise/finally.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/promise/promise';\n\n$jscomp.polyfill('Promise.prototype.finally', function(orig) {\n if (orig) return orig;\n\n /**\n * @this {!Promise}\n * @param {function():?} onFinally\n * @return {!Promise}\n * @template VALUE\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(onFinally) {\n return this.then(\n function(value) {\n var promise = Promise.resolve(onFinally());\n return promise.then(function () { return value; });\n },\n function(reason) {\n var promise = Promise.resolve(onFinally());\n return promise.then(function () { throw reason; });\n });\n };\n\n return polyfill;\n}, 'es9', 'es3');\n", + "js/es6/promise/promise.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n'require es6/util/makeiterator';\n'require util/global';\n'require util/polyfill';\n\n/**\n * Should we unconditionally override a native Promise implementation with our\n * own?\n * @define {boolean}\n */\n$jscomp.FORCE_POLYFILL_PROMISE = false;\n\n\n$jscomp.polyfill('Promise',\n /**\n * @param {*} NativePromise\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativePromise) {\n // TODO(bradfordcsmith): Do we need to add checks for standards conformance?\n // e.g. The version of FireFox we currently use for testing has a Promise\n // that fails to reject attempts to fulfill it with itself, but that\n // isn't reasonably testable here.\n if (NativePromise && !$jscomp.FORCE_POLYFILL_PROMISE) {\n return NativePromise;\n }\n\n /**\n * Schedules code to be executed asynchronously.\n * @constructor\n * @struct\n */\n function AsyncExecutor() {\n /**\n * Batch of functions to execute.\n *\n * Will be `null` initially and immediately after a batch finishes\n * executing.\n * @private {?Array}\n */\n this.batch_ = null;\n }\n\n /**\n * Schedule a function to execute asynchronously.\n *\n * - The function will execute:\n * - After the current call stack has completed executing.\n * - After any functions previously scheduled using this object.\n * - The return value will be ignored.\n * - An exception thrown by the method will be caught and asynchronously\n * rethrown when it cannot interrupt any other code. This class provides\n * no way to catch such exceptions.\n * @param {function():?} f\n */\n AsyncExecutor.prototype.asyncExecute = function(f) {\n if (this.batch_ == null) {\n // no batch created yet, or last batch was fully executed\n this.batch_ = [];\n var self = this;\n this.asyncExecuteFunction(function() { self.executeBatch_(); });\n }\n this.batch_.push(f);\n };\n\n // NOTE: We want to make sure AsyncExecutor will work as expected even if\n // testing code should override setTimeout()\n /** @const {function(!Function, number)} */\n var nativeSetTimeout = $jscomp.global['setTimeout'];\n\n /**\n * Schedule a function to execute asynchronously as soon as possible.\n *\n * NOTE: May be overridden for testing.\n * @package\n * @param {function()} f\n */\n AsyncExecutor.prototype.asyncExecuteFunction = function(f) {\n nativeSetTimeout(f, 0);\n };\n\n /**\n * Execute scheduled jobs in a batch until all are executed or the batch\n * execution time limit has been reached.\n * @private\n */\n AsyncExecutor.prototype.executeBatch_ = function() {\n while (this.batch_ && this.batch_.length) {\n var /** !Array */ executingBatch = this.batch_;\n // Executions scheduled while executing this batch go into a new one to\n // avoid the batch array getting too big.\n this.batch_ = [];\n for (var i = 0; i < executingBatch.length; ++i) {\n var f = /** @type {function()} */ (executingBatch[i]);\n executingBatch[i] = null; // free memory\n try {\n f();\n } catch (error) {\n this.asyncThrow_(error);\n }\n }\n }\n // All jobs finished executing, so force scheduling a new batch next\n // time asyncExecute() is called.\n this.batch_ = null;\n };\n\n /**\n * @private\n * @param {*} exception\n */\n AsyncExecutor.prototype.asyncThrow_ = function(exception) {\n this.asyncExecuteFunction(function() { throw exception; });\n };\n\n /**\n * @enum {number}\n */\n var PromiseState = {\n /** The Promise is waiting for resolution. */\n PENDING: 0,\n\n /** The Promise has been resolved with a fulfillment value. */\n FULFILLED: 1,\n\n /** The Promise has been resolved with a rejection reason. */\n REJECTED: 2\n };\n\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} executor\n * @constructor\n * @extends {Promise}\n * @template TYPE\n */\n var PolyfillPromise = function(executor) {\n /** @private {PromiseState} */\n this.state_ = PromiseState.PENDING;\n\n /**\n * The settled result of the Promise. Immutable once set with either a\n * fulfillment value or rejection reason.\n * @private {*}\n */\n this.result_ = undefined;\n\n /**\n * These functions must be asynchronously executed when this promise\n * settles.\n * @private {?Array}\n */\n this.onSettledCallbacks_ = [];\n\n var resolveAndReject = this.createResolveAndReject_();\n try {\n executor(resolveAndReject.resolve, resolveAndReject.reject);\n } catch (e) {\n resolveAndReject.reject(e);\n }\n };\n\n\n /**\n * Create a pair of functions for resolving or rejecting this Promise.\n *\n *

After the resolve or reject function has been called once, later calls\n * do nothing.\n * @private\n * @return {{\n * resolve: function((TYPE|IThenable|Thenable|null)=),\n * reject: function(*=)\n * }}\n */\n PolyfillPromise.prototype.createResolveAndReject_ = function() {\n var thisPromise = this;\n var alreadyCalled = false;\n /**\n * @param {function(this:PolyfillPromise, T=)} method\n * @return {function(T=)}\n * @template T\n */\n function firstCallWins(method) {\n return function(/** T= */ x) {\n if (!alreadyCalled) {\n alreadyCalled = true;\n method.call(thisPromise, x);\n }\n };\n }\n return {\n resolve: firstCallWins(this.resolveTo_),\n reject: firstCallWins(this.reject_)\n };\n };\n\n\n /**\n * @private\n * @param {*=} value\n */\n PolyfillPromise.prototype.resolveTo_ = function(value) {\n if (value === this) {\n this.reject_(new TypeError('A Promise cannot resolve to itself'));\n } else if (value instanceof PolyfillPromise) {\n this.settleSameAsPromise_(/** @type {!PolyfillPromise} */ (value));\n } else if (isObject(value)) {\n this.resolveToNonPromiseObj_(/** @type {!Object} */ (value));\n } else {\n this.fulfill_(value);\n }\n };\n\n\n /**\n * @private\n * @param {!Object} obj\n * @suppress {strictMissingProperties} obj.then\n */\n PolyfillPromise.prototype.resolveToNonPromiseObj_ = function(obj) {\n var thenMethod = undefined;\n\n try {\n thenMethod = obj.then;\n } catch (error) {\n this.reject_(error);\n return;\n }\n if (typeof thenMethod == 'function') {\n this.settleSameAsThenable_(thenMethod, /** @type {!Thenable} */ (obj));\n } else {\n this.fulfill_(obj);\n }\n };\n\n\n /**\n * @param {*} value anything\n * @return {boolean}\n */\n function isObject(value) {\n switch (typeof value) {\n case 'object':\n return value != null;\n case 'function':\n return true;\n default:\n return false;\n }\n }\n\n /**\n * Reject this promise for the given reason.\n * @private\n * @param {*=} reason\n * @throws {!Error} if this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.reject_ = function(reason) {\n this.settle_(PromiseState.REJECTED, reason);\n };\n\n /**\n * Fulfill this promise with the given value.\n * @private\n * @param {!TYPE} value\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.fulfill_ = function(value) {\n this.settle_(PromiseState.FULFILLED, value);\n };\n\n /**\n * Fulfill or reject this promise with the given value/reason.\n * @private\n * @param {!PromiseState} settledState (FULFILLED or REJECTED)\n * @param {*} valueOrReason\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.settle_ = function(settledState, valueOrReason) {\n if (this.state_ != PromiseState.PENDING) {\n throw new Error(\n 'Cannot settle(' + settledState + ', ' + valueOrReason +\n '): Promise already settled in state' + this.state_);\n }\n this.state_ = settledState;\n this.result_ = valueOrReason;\n this.executeOnSettledCallbacks_();\n };\n\n PolyfillPromise.prototype.executeOnSettledCallbacks_ = function() {\n if (this.onSettledCallbacks_ != null) {\n for (var i = 0; i < this.onSettledCallbacks_.length; ++i) {\n asyncExecutor.asyncExecute(this.onSettledCallbacks_[i]);\n }\n this.onSettledCallbacks_ = null; // free memory\n }\n };\n\n /**\n * All promise async execution is managed by a single executor for the\n * sake of efficiency.\n * @const {!AsyncExecutor}\n */\n var asyncExecutor = new AsyncExecutor();\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {!PolyfillPromise} promise\n */\n PolyfillPromise.prototype.settleSameAsPromise_ = function(promise) {\n var methods = this.createResolveAndReject_();\n\n // Calling then() would create an unnecessary extra promise.\n promise.callWhenSettled_(methods.resolve, methods.reject);\n };\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))\n * } thenMethod\n * @param {!Thenable} thenable\n */\n PolyfillPromise.prototype.settleSameAsThenable_ = function(\n thenMethod, thenable) {\n var methods = this.createResolveAndReject_();\n\n // Don't trust an unknown thenable implementation not to throw exceptions.\n try {\n thenMethod.call(thenable, methods.resolve, methods.reject);\n } catch (error) {\n methods.reject(error);\n }\n };\n\n /** @override */\n PolyfillPromise.prototype.then = function(onFulfilled, onRejected) {\n var resolveChild;\n var rejectChild;\n var childPromise = new PolyfillPromise(function(resolve, reject) {\n resolveChild = resolve;\n rejectChild = reject;\n });\n function createCallback(paramF, defaultF) {\n // The spec says to ignore non-function values for onFulfilled and\n // onRejected\n if (typeof paramF == 'function') {\n return function(x) {\n try {\n resolveChild(paramF(x));\n } catch (error) {\n rejectChild(error);\n }\n };\n } else {\n return defaultF;\n }\n }\n\n this.callWhenSettled_(\n createCallback(onFulfilled, resolveChild),\n createCallback(onRejected, rejectChild));\n return childPromise;\n };\n\n /** @override */\n PolyfillPromise.prototype.catch = function(onRejected) {\n return this.then(undefined, onRejected);\n };\n\n\n PolyfillPromise.prototype.callWhenSettled_ = function(\n onFulfilled, onRejected) {\n var /** !PolyfillPromise */ thisPromise = this;\n function callback() {\n switch (thisPromise.state_) {\n case PromiseState.FULFILLED:\n onFulfilled(thisPromise.result_);\n break;\n case PromiseState.REJECTED:\n onRejected(thisPromise.result_);\n break;\n default:\n throw new Error('Unexpected state: ' + thisPromise.state_);\n }\n }\n if (this.onSettledCallbacks_ == null) {\n // we've already settled\n asyncExecutor.asyncExecute(callback);\n } else {\n this.onSettledCallbacks_.push(callback);\n }\n };\n\n // called locally, so give it a name\n function resolvingPromise(opt_value) {\n if (opt_value instanceof PolyfillPromise) {\n return opt_value;\n } else {\n return new PolyfillPromise(function(resolve, reject) {\n resolve(opt_value);\n });\n }\n }\n PolyfillPromise['resolve'] = resolvingPromise;\n\n\n PolyfillPromise['reject'] = function(opt_reason) {\n return new PolyfillPromise(function(resolve, reject) {\n reject(opt_reason);\n });\n };\n\n\n PolyfillPromise['race'] = function(thenablesOrValues) {\n return new PolyfillPromise(function(resolve, reject) {\n var /** !Iterator<*> */ iterator =\n $jscomp.makeIterator(thenablesOrValues);\n for (var /** !IIterableResult<*> */ iterRec = iterator.next();\n !iterRec.done;\n iterRec = iterator.next()) {\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged.\n // Using .callWhenSettled_() instead of .then() avoids creating an\n // unnecessary extra promise.\n resolvingPromise(iterRec.value).callWhenSettled_(resolve, reject);\n }\n });\n };\n\n\n PolyfillPromise['all'] = function(thenablesOrValues) {\n var /** !Iterator<*> */ iterator = $jscomp.makeIterator(thenablesOrValues);\n var /** !IIterableResult<*> */ iterRec = iterator.next();\n\n if (iterRec.done) {\n return resolvingPromise([]);\n } else {\n return new PolyfillPromise(function(resolveAll, rejectAll) {\n var resultsArray = [];\n var unresolvedCount = 0;\n\n function onFulfilled(i) {\n return function(ithResult) {\n resultsArray[i] = ithResult;\n unresolvedCount--;\n if (unresolvedCount == 0) {\n resolveAll(resultsArray);\n }\n };\n }\n\n do {\n resultsArray.push(undefined);\n unresolvedCount++;\n // Using resolvingPromise() allows us to treat all elements the same\n // way.\n // NOTE: resolvingPromise(promise) always returns the argument\n // unchanged. Using .callWhenSettled_() instead of .then() avoids\n // creating an unnecessary extra promise.\n resolvingPromise(iterRec.value)\n .callWhenSettled_(\n onFulfilled(resultsArray.length - 1), rejectAll);\n iterRec = iterator.next();\n } while (!iterRec.done);\n });\n }\n };\n\n return PolyfillPromise;\n}, 'es6', 'es3');\n", + "js/es6/reflect.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Rolls together all ES6 Reflect polyfills.\n */\n'require es6/reflect/apply';\n'require es6/reflect/construct';\n'require es6/reflect/defineproperty';\n'require es6/reflect/deleteproperty';\n'require es6/reflect/get';\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n'require es6/reflect/has';\n'require es6/reflect/isextensible';\n'require es6/reflect/ownkeys';\n'require es6/reflect/preventextensions';\n'require es6/reflect/set';\n'require es6/reflect/setprototypeof';\n", +-"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require es6/util/construct';\n'require util/polyfill';\n\n$jscomp.polyfill('Reflect.construct', function(orig) {\n // NOTE: This is just Reflect.construct if it's present and functional.\n return $jscomp.construct;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", +-"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", ++"js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n", ++"js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n * @suppress {reportUnknownTypes}\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", + "js/es6/reflect/getownpropertydescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.getOwnPropertyDescriptor', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getOwnPropertyDescriptor;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyDescriptor\n", + "js/es6/reflect/getprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.getPrototypeOf', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getPrototypeOf;\n}, 'es6', 'es5'); // ES5: Requires Object.getPrototypeOf\n", +-"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/reflect/isextensible.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.isExtensible', function(orig) {\n if (orig) return orig;\n if ($jscomp.ASSUME_ES5 || typeof Object.isExtensible == 'function') {\n return Object.isExtensible;\n }\n return function() { return true; };\n}, 'es6', 'es3');\n", +-"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", +-"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", ++"js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys',\n /**\n * @param {*} orig\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n", ++"js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defines';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n", ++"js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n", + "js/es6/reflect/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n'require es6/util/setprototypeof';\n\n\n$jscomp.polyfill(\n 'Reflect.setPrototypeOf',\n /**\n * These annotations are intended to match the signature of\n * $jscomp.polyfill(). Being more specific makes the compiler unhappy.\n * @suppress {reportUnknownTypes}\n * @param {?*} orig\n * @return {*}\n */\n function(orig) {\n if (orig) {\n return orig;\n } else if ($jscomp.setPrototypeOf) {\n /** @const {!function(!Object,?Object):!Object} */\n var setPrototypeOf = $jscomp.setPrototypeOf;\n /**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n */\n var polyfill = function(target, proto) {\n try {\n setPrototypeOf(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n };\n return polyfill;\n } else {\n // it isn't possible to implement this method\n return null;\n }\n },\n 'es6', 'es5');\n", + "js/es6/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/conformance';\n'require es6/map';\n'require es6/symbol';\n'require util/defines';\n'require util/polyfill';\n\n$jscomp.polyfill('Set',\n /**\n * @param {*} NativeSet\n * @return {*}\n * @suppress {reportUnknownTypes}\n */\n function(NativeSet) {\n\n /**\n * Checks conformance of the existing Set.\n * @return {boolean} True if the browser's implementation conforms.\n * @suppress {missingProperties} \"entries\" unknown prototype\n */\n function isConformant() {\n if ($jscomp.ASSUME_NO_NATIVE_SET ||\n !NativeSet ||\n typeof NativeSet != \"function\" ||\n !NativeSet.prototype.entries ||\n typeof Object.seal != 'function') {\n return false;\n }\n // Some implementations don't support constructor arguments.\n try {\n NativeSet = /** @type {function(new: Set, !Iterator=)} */ (NativeSet);\n var value = Object.seal({x: 4});\n var set = new NativeSet($jscomp.makeIterator([value]));\n if (!set.has(value) || set.size != 1 || set.add(value) != set ||\n set.size != 1 || set.add({x: 4}) != set || set.size != 2) {\n return false;\n }\n var iter = set.entries();\n var item = iter.next();\n if (item.done || item.value[0] != value || item.value[1] != value) {\n return false;\n }\n item = iter.next();\n if (item.done || item.value[0] == value || item.value[0].x != 4 ||\n item.value[1] != item.value[0]) {\n return false;\n }\n return iter.next().done;\n } catch (err) { // This should hopefully never happen, but let's be safe.\n return false;\n }\n }\n\n if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {\n if (NativeSet && $jscomp.ES6_CONFORMANCE) return NativeSet;\n } else {\n if (isConformant()) return NativeSet;\n }\n\n // We depend on Symbol.iterator, so ensure it's loaded.\n $jscomp.initSymbolIterator();\n\n\n\n /**\n * Polyfill for the global Map data type.\n * @constructor\n * @struct\n * @extends {Set}\n * @implements {Iterable}\n * @template KEY, VALUE\n * @param {!Iterable|!Array|null=} opt_iterable\n * Optional data to populate the set.\n */\n // TODO(sdh): fix param type if heterogeneous arrays ever supported.\n var PolyfillSet = function(opt_iterable) {\n /** @private @const {!Map} */\n this.map_ = new Map();\n if (opt_iterable) {\n var iter = $jscomp.makeIterator(opt_iterable);\n var entry;\n while (!(entry = iter.next()).done) {\n var item = /** @type {!IIterableResult} */ (entry).value;\n this.add(item);\n }\n }\n // Note: this property should not be changed. If we're willing to give up\n // ES3 support, we could define it as a property directly. It should be\n // marked readonly if such an annotation ever comes into existence.\n this.size = this.map_.size;\n };\n\n\n /** @override */\n PolyfillSet.prototype.add = function(value) {\n // normalize -0/+0 to +0\n value = value === 0 ? 0 : value;\n this.map_.set(value, value);\n this.size = this.map_.size;\n return this;\n };\n\n\n /** @override */\n PolyfillSet.prototype.delete = function(value) {\n var result = this.map_.delete(value);\n this.size = this.map_.size;\n return result;\n };\n\n\n /** @override */\n PolyfillSet.prototype.clear = function() {\n this.map_.clear();\n this.size = 0;\n };\n\n\n /** @override */\n PolyfillSet.prototype.has = function(value) {\n return this.map_.has(value);\n };\n\n\n /** @override */\n PolyfillSet.prototype.entries = function() {\n return this.map_.entries();\n };\n\n\n /** @override */\n PolyfillSet.prototype.values = function() {\n return this.map_.values();\n };\n\n\n /** @override */\n PolyfillSet.prototype.keys = PolyfillSet.prototype.values;\n\n\n /** @type {?} */ (PolyfillSet.prototype)[Symbol.iterator] =\n PolyfillSet.prototype.values;\n\n\n /** @override */\n PolyfillSet.prototype.forEach = function(callback, opt_thisArg) {\n var set = this;\n this.map_.forEach(function(value) {\n return callback.call(/** @type {?} */ (opt_thisArg), value, value, set);\n });\n };\n\n\n return PolyfillSet;\n}, 'es6', 'es3');\n", + "js/es6/string.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 String polyfills.\n * @suppress {uselessCode}\n */\n'require es6/string/codepointat';\n'require es6/string/endswith';\n'require es6/string/fromcodepoint';\n'require es6/string/includes';\n'require es6/string/padend';\n'require es6/string/padstart';\n'require es6/string/repeat';\n'require es6/string/startswith';\n'require es6/string/trimend';\n'require es6/string/trimstart';\n", +@@ -943,8 +943,8 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/es6/string/endswith.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.endsWith', function(orig) {\n if (orig) return orig;\n\n /**\n * Tests whether the string ends with a given substring.\n *\n *

Polyfills the instance method String.prototype.endsWith().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'endsWith');\n searchString = searchString + '';\n if (opt_position === void 0) opt_position = string.length;\n var i = Math.max(0, Math.min(opt_position | 0, string.length));\n var j = searchString.length;\n while (j > 0 && i > 0) {\n if (string[--i] != searchString[--j]) return false;\n }\n return j <= 0;\n };\nreturn polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/fromcodepoint.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('String.fromCodePoint', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates a new string from the given codepoints.\n *\n *

Polyfills the static function String.fromCodePoint().\n *\n * @param {...number} var_args\n * @return {string}\n */\n var polyfill = function(var_args) {\n // Note: this is taken from v8's harmony-string.js StringFromCodePoint.\n var result = '';\n for (var i = 0; i < arguments.length; i++) {\n var code = Number(arguments[i]);\n if (code < 0 || code > 0x10FFFF || code !== Math.floor(code)) {\n throw new RangeError('invalid_code_point ' + code);\n }\n if (code <= 0xFFFF) {\n result += String.fromCharCode(code);\n } else {\n code -= 0x10000;\n result += String.fromCharCode((code >>> 10) & 0x3FF | 0xD800);\n result += String.fromCharCode(code & 0x3FF | 0xDC00);\n }\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/includes.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Searches for a substring, starting at the given position.\n *\n *

Polyfills the instance method String.prototype.includes().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'includes');\n return string.indexOf(searchString, opt_position || 0) !== -1;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", +-"js/es6/string/padend.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/stringpadding';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.padEnd', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padEnd.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padEnd = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return string + $jscomp.stringPadding(opt_padString, padLength);\n };\n\n return padEnd;\n}, 'es8', 'es3');\n", +-"js/es6/string/padstart.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n'require util/stringpadding';\n\n$jscomp.polyfill('String.prototype.padStart', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padStart.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padStart = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return $jscomp.stringPadding(opt_padString, padLength) + string;\n };\n\n return padStart;\n}, 'es8', 'es3');\n", ++"js/es6/string/padend.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/stringpadding';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.padEnd', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padEnd.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padEnd = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return string + $jscomp.stringPadding(opt_padString, padLength);\n };\n\n return padEnd;\n}, 'es8', 'es3');\n", ++"js/es6/string/padstart.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n'require util/stringpadding';\n\n$jscomp.polyfill('String.prototype.padStart', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfills String.prototype.padStart.\n *\n * @see https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n *\n * @this {string}\n * @param {number} targetLength\n * @param {string=} opt_padString\n * @return {string}\n */\n var padStart = function(targetLength, opt_padString) {\n var string = $jscomp.checkStringArgs(this, null, 'padStart');\n var padLength = targetLength - string.length;\n return $jscomp.stringPadding(opt_padString, padLength) + string;\n };\n\n return padStart;\n}, 'es8', 'es3');\n", + "js/es6/string/repeat.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.repeat', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns a new string repeated the given number of times.\n *\n *

Polyfills the instance method String.prototype.repeat().\n *\n * @this {string}\n * @param {number} copies\n * @return {string}\n */\n var polyfill = function(copies) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, null, 'repeat');\n if (copies < 0 || copies > 0x4FFFFFFF) { // impose a 1GB limit\n throw new RangeError('Invalid count value');\n }\n copies = copies | 0; // cast to a signed integer.\n var result = '';\n while (copies) {\n if (copies & 1) result += string;\n if ((copies >>>= 1)) string += string;\n }\n return result;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/startswith.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.startsWith', function(orig) {\n if (orig) return orig;\n\n /**\n * Tests whether the string starts with a given substring.\n *\n *

Polyfills the instance method String.prototype.startsWith().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'startsWith');\n searchString = searchString + '';\n var strLen = string.length;\n var searchLen = searchString.length;\n var i = Math.max(\n 0,\n Math.min(/** @type {number} */ (opt_position) | 0, string.length));\n var j = 0;\n while (j < searchLen && i < strLen) {\n if (string[i++] != searchString[j++]) return false;\n }\n return j >= searchLen;\n };\n\n return polyfill;\n}, 'es6', 'es3');\n", + "js/es6/string/trimend.js":"/*\n * Copyright 2019 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/polyfill';\n\n// Most browsers implemented trimRight around ES5-time-frame, but it wasn't\n// officially part of the language specification until ES_2019, so we have\n// to provide a polyfill for it.\n// IE11 doesn't have it, of course...\n$jscomp.polyfill('String.prototype.trimRight', function(orig) {\n /**\n * @this {string}\n * @return {string}\n */\n function polyfill() {\n return this.replace(/[\\s\\xa0]+$/, '');\n }\n return orig || polyfill;\n}, 'es_2019', 'es3');\n\n$jscomp.polyfill('String.prototype.trimEnd', function(orig) {\n return orig || String.prototype.trimRight;\n}, 'es_2019', 'es3');\n", +@@ -953,8 +953,8 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/es6/util/arrayfromiterable.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require es6/util/makeiterator';\n'require es6/util/arrayfromiterator';\n\n\n/**\n * Copies the values from an Iterable into an Array.\n * @param {string|!Array|!Iterable|!Arguments} iterable\n * @return {!Array}\n * @template T\n */\n$jscomp.arrayFromIterable = function(iterable) {\n if (iterable instanceof Array) {\n return iterable;\n } else {\n return $jscomp.arrayFromIterator($jscomp.makeIterator(iterable));\n }\n};\n", + "js/es6/util/arrayfromiterator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require base';\n\n\n/**\n * Copies the values from an Iterator into an Array. The important difference\n * between this and $jscomp.arrayFromIterable is that if the iterator's\n * next() method has already been called one or more times, this method returns\n * only the values that haven't been yielded yet.\n * @param {!Iterator} iterator\n * @return {!Array}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.arrayFromIterator = function(iterator) {\n var i;\n var arr = [];\n while (!(i = iterator.next()).done) {\n arr.push(i.value);\n }\n return arr;\n};\n", + "js/es6/util/arrayiterator.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility method for creating an iterator for Arrays.\n */\n\'require base\';\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!Array} array\n * @return {function():!IIterableResult}\n * @template T\n */\n$jscomp.arrayIteratorImpl = function(array) {\n var index = 0;\n return function() {\n if (index < array.length) {\n return {\n done: false,\n value: array[index++],\n };\n } else {\n return {done: true};\n }\n };\n};\n\n/**\n * Returns an internal iterator from the given array.\n * @param {!Array} array\n * @return {!Iterator}\n * @template T\n */\n$jscomp.arrayIterator = function(array) {\n return /** @type {!Iterator} */ ({next: $jscomp.arrayIteratorImpl(array)});\n};\n\n', +-"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign = (typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", +-"js/es6/util/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require util/objectcreate';\n\n/**\n * Polyfill for Reflect.construct() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n *\n * Calls a constructor as with the 'new' operator.\n * TODO(sdh): how to type 'target' with (new: TARGET) if opt_newTarget missing?\n *\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n */\n$jscomp.construct = /** @type {function(): !Function} */ (function() {\n\n // Check for https://github.com/Microsoft/ChakraCore/issues/3217\n /** @return {boolean} */\n function reflectConstructWorks() {\n /** @constructor */ function Base() {}\n /** @constructor */ function Derived() {}\n new Base();\n Reflect.construct(Base, [], Derived);\n return new Base() instanceof Base;\n }\n\n if (typeof Reflect != 'undefined' && Reflect.construct) {\n if (reflectConstructWorks()) return Reflect.construct;\n var brokenConstruct = Reflect.construct;\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n var patchedConstruct = function(target, argList, opt_newTarget) {\n var out = brokenConstruct(target, argList);\n if (opt_newTarget) Reflect.setPrototypeOf(out, opt_newTarget.prototype);\n return out;\n };\n return patchedConstruct;\n }\n\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n function construct(target, argList, opt_newTarget) {\n if (opt_newTarget === undefined) opt_newTarget = target;\n var proto = opt_newTarget.prototype || Object.prototype;\n var obj = $jscomp.objectCreate(proto);\n var apply = Function.prototype.apply;\n var out = apply.call(target, obj, argList);\n return out || obj;\n }\n return construct;\n})();\n", ++"js/es6/util/assign.js":"/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n'require util/owns';\n\n/**\n * Equivalent to the Object.assign() method, but guaranteed to be available for use in code\n * generated by the compiler.\n *\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n *\n * @final\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n$jscomp.assign = (typeof Object.assign == 'function') ?\n Object.assign :\n /**\n * @param {!Object} target\n * @param {...?Object} var_args\n * @return {!Object}\n * @suppress {reportUnknownTypes}\n */\n function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n", ++"js/es6/util/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n'require util/objectcreate';\n\n/**\n * Polyfill for Reflect.construct() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n *\n * Calls a constructor as with the 'new' operator.\n * TODO(sdh): how to type 'target' with (new: TARGET) if opt_newTarget missing?\n *\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n */\n$jscomp.construct = /** @type {function(): !Function} */ (function() {\n\n // Check for https://github.com/Microsoft/ChakraCore/issues/3217\n /** @return {boolean} */\n function reflectConstructWorks() {\n /** @constructor */ function Base() {}\n /** @constructor */ function Derived() {}\n new Base();\n Reflect.construct(Base, [], Derived);\n return new Base() instanceof Base;\n }\n\n if (typeof Reflect != 'undefined' && Reflect.construct) {\n if (reflectConstructWorks()) return Reflect.construct;\n var brokenConstruct = Reflect.construct;\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n var patchedConstruct = function(target, argList, opt_newTarget) {\n var out = brokenConstruct(target, argList);\n if (opt_newTarget) Reflect.setPrototypeOf(out, opt_newTarget.prototype);\n return out;\n };\n return patchedConstruct;\n }\n\n /**\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n * @suppress {reportUnknownTypes}\n */\n function construct(target, argList, opt_newTarget) {\n if (opt_newTarget === undefined) opt_newTarget = target;\n var proto = opt_newTarget.prototype || Object.prototype;\n var obj = $jscomp.objectCreate(proto);\n var apply = Function.prototype.apply;\n var out = apply.call(target, obj, argList);\n return out || obj;\n }\n return construct;\n})();\n", + "js/es6/util/inherits.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for ES6 extends keyword.\n * @suppress {uselessCode}\n */\n'require base';\n'require util/objectcreate';\n'require es6/util/setprototypeof';\n\n\n/**\n * Inherit the prototype methods and static methods from one constructor\n * into another.\n *\n * This wires up the prototype chain (like goog.inherits) and copies static\n * properties, for ES6-to-ES{3,5} transpilation.\n *\n * Usage:\n *

\n *   function ParentClass() {}\n *\n *   // Regular method.\n *   ParentClass.prototype.foo = function(a) {};\n *\n *   // Static method.\n *   ParentClass.bar = function() {};\n *\n *   function ChildClass() {\n *     ParentClass.call(this);\n *   }\n *   $jscomp.inherits(ChildClass, ParentClass);\n *\n *   var child = new ChildClass();\n *   child.foo();\n *   ChildClass.bar();  // Static inheritance.\n * 
\n *\n * @param {!Function} childCtor Child class.\n * @param {!Function} parentCtor Parent class.\n * @suppress {strictMissingProperties} 'superClass_' is not defined on Function\n */\n$jscomp.inherits = function(childCtor, parentCtor) {\n childCtor.prototype = $jscomp.objectCreate(parentCtor.prototype);\n /** @override */ childCtor.prototype.constructor = childCtor;\n if ($jscomp.setPrototypeOf) {\n // avoid null dereference warning\n /** @const {!Function} */\n var setPrototypeOf = $jscomp.setPrototypeOf;\n setPrototypeOf(childCtor, parentCtor);\n } else {\n // setPrototypeOf is not available so we need to copy the static\n // methods to the child\n for (var p in parentCtor) {\n if (p == 'prototype') {\n // Don't copy parentCtor.prototype to childCtor.\n continue;\n }\n if (Object.defineProperties) {\n var descriptor = Object.getOwnPropertyDescriptor(parentCtor, p);\n if (descriptor) {\n Object.defineProperty(childCtor, p, descriptor);\n }\n } else {\n // Pre-ES5 browser. Just copy with an assignment.\n childCtor[p] = parentCtor[p];\n }\n }\n }\n\n childCtor.superClass_ = parentCtor.prototype;\n};\n", + "js/es6/util/iteratorfromarray.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utilities for iterator-returning methods.\n */\n'require es6/symbol';\n\n\n/**\n * Creates an iterator from an array-like, with a transformation function.\n * @param {!IArrayLike} array\n * @param {function(number, INPUT): OUTPUT} transform\n * @return {!IteratorIterable}\n * @template INPUT, OUTPUT\n * @suppress {checkTypes|reportUnknownTypes}\n */\n$jscomp.iteratorFromArray = function(array, transform) {\n $jscomp.initSymbolIterator();\n // NOTE: IE8 doesn't support indexing from boxed Strings.\n if (array instanceof String) array = array + '';\n var i = 0;\n var iter = {\n next: function() {\n if (i < array.length) {\n var index = i++;\n return {value: transform(index, array[index]), done: false};\n }\n iter.next = function() { return {done: true, value: void 0}; };\n return iter.next();\n }\n };\n iter[Symbol.iterator] = function() { return iter; };\n return iter;\n};\n", + "js/es6/util/makeasynciterator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for for-of loops.\n */\n'require es6/symbol';\n'require es6/util/makeiterator';\n\n/**\n * Creates an iterator for the given iterable.\n *\n * @param {string|!AsyncIterable|!Iterable|!Iterator|!Arguments} iterable\n * @return {!AsyncIteratorIterable}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.makeAsyncIterator = function(iterable) {\n $jscomp.initSymbolAsyncIterator();\n var asyncIteratorFunction = (iterable)[Symbol.asyncIterator];\n if (asyncIteratorFunction !== undefined) {\n return asyncIteratorFunction.call(iterable);\n }\n return new $jscomp.AsyncIteratorFromSyncWrapper($jscomp.makeIterator(\n /** @type {string|!Iterable|!Iterator|!Arguments} */\n (iterable)));\n};\n\n/**\n *\n * @param {!Iterator} iterator\n * @constructor\n * @implements {AsyncIteratorIterable}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.AsyncIteratorFromSyncWrapper = function(iterator) {\n /**\n * @return {!AsyncIterator}\n */\n this[Symbol.asyncIterator] = function() {\n return this;\n };\n\n /**\n * @return {!Iterator>>}\n */\n this[Symbol.iterator] = function() {\n return iterator;\n };\n\n /**\n * @param {?=} param\n * @return {!Promise>}\n */\n this.next = function(param) {\n return Promise.resolve(iterator.next(param));\n };\n\n if (iterator['throw'] !== undefined) {\n /**\n * @param {?} param\n * @return {!Promise>}\n */\n this['throw'] = function(param) {\n return Promise.resolve(iterator['throw'](param));\n };\n }\n\n if (iterator['return'] !== undefined) {\n /**\n * @param {T} param\n * @return {!Promise>}\n */\n this['return'] = function(param) {\n return Promise.resolve(iterator['return'](param));\n };\n }\n};\n", +@@ -967,19 +967,19 @@ var pra={"externs/es3.js":'/*\n * Copyright 2008 The Closure Compiler Authors\n + "js/modules.js":'/*\n * Copyright 2018 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * @suppress {uselessCode}\n */\n\n\'require es6/modules/runtime\';\n', + "js/runtime_type_check.js":"/*\n * Copyright 2010 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Provides the boilerplate code for run-time type checking.\n *\n *\n * @suppress {uselessCode} The require statements below are not useless.\n */\n'require base';\n\n/** @const */\n$jscomp.typecheck = {};\n\n/**\n * A state variable to suspend checking, to avoid infinite calls\n * caused by calling checked code from the checking functions.\n *\n * @type {boolean}\n */\n$jscomp.typecheck.suspendChecking = false;\n\n\n/**\n * Log and possibly format the run-time type check warning. This\n * function is customized at compile-time.\n *\n * @param {string} warning the warning to log.\n * @param {*} expr the faulty expression.\n */\n$jscomp.typecheck.log = function(warning, expr) {};\n\n/**\n * Checks that the given expression matches one of the given checkers,\n * logging if not, and returning the expression regardless.\n *\n * @param {*} expr the expression to check.\n * @param {!Array} checkers the checkers to\n * use in checking, one of these has to match for checking to succeed.\n * @return {*} the given expression back.\n */\n$jscomp.typecheck.checkType = function(expr, checkers) {\n if ($jscomp.typecheck.suspendChecking) {\n return expr;\n }\n $jscomp.typecheck.suspendChecking = true;\n\n for (var i = 0; i < checkers.length; i++) {\n var checker = checkers[i];\n var ok = checker.check(expr);\n if (ok) {\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n }\n }\n\n var warning = $jscomp.typecheck.prettify_(expr) + ' not in ' +\n checkers.join(' ');\n\n $jscomp.typecheck.log(warning, expr);\n\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n};\n\n\n/**\n * Prettify the given expression for printing.\n *\n * @param {*} expr the expression.\n * @return {string} a string representation of the given expression.\n * @private\n */\n$jscomp.typecheck.prettify_ = function(expr) {\n var className = $jscomp.typecheck.getClassName_(expr);\n if (className) {\n return className;\n }\n try {\n return String(expr);\n }\n catch (e) {}\n return '';\n};\n\n/**\n * Gets the class name if the given expression is an object.\n *\n * @param {*} expr the expression.\n * @return {string|undefined} the class name or undefined if the\n * expression is not an object.\n * @private\n * @suppress {strictMissingProperties}\n */\n$jscomp.typecheck.getClassName_ = function(expr) {\n var className = void 0;\n if (typeof expr == 'object' && expr && expr.constructor) {\n className = expr.constructor.name;\n if (!className) {\n var funNameRe = /function (.{1,})\\(/;\n var m = (funNameRe).exec(expr.constructor.toString());\n className = m && m.length > 1 ? m[1] : void 0;\n }\n }\n return className;\n};\n\n/**\n * Interface for all checkers.\n *\n * @interface\n */\n$jscomp.typecheck.Checker = function() {};\n\n\n/**\n * Checks the given expression.\n *\n * @param {*} expr the expression to check.\n * @return {boolean} whether the given expression matches this checker.\n */\n$jscomp.typecheck.Checker.prototype.check = function(expr) {};\n\n\n\n/**\n * A class for all value checkers, except the null checker.\n *\n * @param {string} type the value type (e.g. 'number') of this checker.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ValueChecker_ = function(type) {\n /**\n * The value type of this checker.\n * @type {string}\n * @private\n */\n this.type_ = type;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.check = function(expr) {\n return typeof(expr) == this.type_;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.toString = function() {\n return 'value(' + this.type_ + ')';\n};\n\n\n\n/**\n * A checker class for null values.\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.NullChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.check = function(expr) {\n return expr === null;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.toString = function() {\n return 'value(null)';\n};\n\n\n/**\n * A checker class for a class defined in externs, including built-in\n * JS types.\n *\n *

If the class type is undefined, then checking is suspended to\n * avoid spurious warnings. This is necessary because some externs\n * types are not defined in all browsers. For example, Window is not\n * defined Chrome, as window has the type DOMWindow.\n *\n *

Another subtlety is that a built-in type may be referenced in a\n * different frame than the one in which it was created. This causes\n * instanceOf to return false even though the object is of the correct\n * type. We work around this by checking as many windows as possible,\n * redefining open on top and window to keep track of them.\n *\n * @param {string} className the name of the extern class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_ = function(className) {\n /**\n * The name of the extern class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/**\n * A list of (hopefully all) open windows.\n *\n * @type {!Array}\n */\n$jscomp.typecheck.ExternClassChecker_.windows = [];\n\n\n/**\n * A list of the original open methods that have been redefined.\n *\n * @type {!Array}\n */\n$jscomp.typecheck.ExternClassChecker_.oldOpenFuns = [];\n\n\n/**\n * Redefines the open method on the given window, adding tracking.\n *\n * @param {!Window} win the window to track.\n * @suppress {uselessCode}\n */\n$jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow = function(win) {\n // Declare the property we add to the window object.\n // NOTE: we add a declaration in a \"if (false) ...\" to ensure we\n // don't reference \"Window\" on platforms that don't have a global\n // Window object (node, service workers, etc).\n if (false) {\n /** @type {boolean} */\n Window.prototype.tracked;\n }\n\n if (win.tracked) {\n return;\n }\n\n win.tracked = true;\n\n var key = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.length;\n\n $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.push(win.open);\n $jscomp.typecheck.ExternClassChecker_.windows.push(win);\n\n win.open = function() {\n var w = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns[key].apply(\n this, arguments);\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(w);\n return w;\n };\n};\n\n\n/**\n * Returns the global 'this' object. This will normally be the same as 'window'\n * but when running in a worker thread, the DOM is not available.\n *\n * This does not work when strict mode is enabled.\n *\n * @return {!Window}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.getGlobalThis_ = function() {\n return (function() { return this; }).call(null);\n};\n\n\n// Install listeners on the global 'this' object.\n(function() {\n var globalThis = $jscomp.typecheck.ExternClassChecker_.getGlobalThis_();\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(globalThis);\n\n var theTop = globalThis['top'];\n if (theTop) {\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(theTop);\n }\n})();\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.check = function(expr) {\n var classTypeDefined = [ false ];\n for (var i = 0; i < $jscomp.typecheck.ExternClassChecker_.windows.length;\n i++) {\n var w = $jscomp.typecheck.ExternClassChecker_.windows[i];\n if (this.checkWindow_(w, expr, classTypeDefined)) {\n return true;\n }\n }\n return !classTypeDefined[0];\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.toString = function() {\n return 'ext_class(' + this.className_ + ')';\n};\n\n\n/**\n * Checks whether the given expression is an instance of this extern\n * class in this window or any of its frames and subframes.\n *\n * @param {!Window} w the window to start checking from.\n * @param {*} expr the expression to check.\n * @param {!Array} classTypeDefined a wrapped boolean\n * updated to indicate whether the class type was seen in any frame.\n * @return {boolean} true if the given expression is an instance of this class.\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.prototype.checkWindow_ =\n function(w, expr, classTypeDefined) {\n var classType = /** @type {function(new: ?)} */ (w[this.className_]);\n classTypeDefined[0] = classTypeDefined[0] || !!classType;\n if (classType && expr instanceof classType) {\n return true;\n }\n for (var i = 0; i < w.length; i++) {\n if (this.checkWindow_(w.frames[i], expr, classTypeDefined)) {\n return true;\n }\n }\n return false;\n};\n\n\n\n/**\n * A class for all checkers of user-defined classes.\n *\n * @param {string} className name of the class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ClassChecker_ = function(className) {\n\n /**\n * The name of the class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.check = function(expr) {\n return !!(expr && expr['instance_of__' + this.className_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.toString = function() {\n return 'class(' + this.className_ + ')';\n};\n\n\n\n/**\n * A class for all checkers of user-defined interfaces.\n *\n * @param {string} interfaceName name of the interface to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.InterfaceChecker_ = function(interfaceName) {\n\n /**\n * The name of the interface to check.\n * @type {string}\n * @private\n */\n this.interfaceName_ = interfaceName;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.check = function(expr) {\n return !!(expr && expr['implements__' + this.interfaceName_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.toString = function() {\n return 'interface(' + this.interfaceName_ + ')';\n};\n\n\n\n/**\n * A checker for object types (possibly with non-standard prototype: might not\n * inherit from Object).\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ObjectChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.check = function(expr) {\n return (typeof(expr) == 'object' || typeof(expr) == 'function') && !!expr;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.toString = function() {\n return 'value(object)';\n};\n\n\n\n/**\n * A checker for null values.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.nullChecker = new $jscomp.typecheck.NullChecker_();\n\n\n/**\n * Creates a checker for the given value type (excluding the null type).\n *\n * @param {string} type the value type.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.valueChecker = function(type) {\n return new $jscomp.typecheck.ValueChecker_(type);\n};\n\n\n/**\n * Creates a checker for the given extern class name.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.externClassChecker = function(className) {\n return new $jscomp.typecheck.ExternClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined class.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.classChecker = function(className) {\n return new $jscomp.typecheck.ClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined interface.\n *\n * @param {string} interfaceName the interface name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.interfaceChecker = function(interfaceName) {\n return new $jscomp.typecheck.InterfaceChecker_(interfaceName);\n};\n\n\n/**\n * A checker for objects.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.objectChecker = new $jscomp.typecheck.ObjectChecker_();\n", + "js/util/checkstringargs.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n\n\n/**\n * Throws if the argument is a RegExp, or if thisArg is undefined.\n * @param {?} thisArg The 'this' arg, which must be defined.\n * @param {*} arg The first argument of the function, which mustn't be a RegExp.\n * @param {string} func Name of the function, for reporting.\n * @return {string} The thisArg, coerced to a string.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.checkStringArgs = function(thisArg, arg, func) {\n if (thisArg == null) {\n throw new TypeError(\n \"The 'this' value for String.prototype.\" + func +\n ' must not be null or undefined');\n }\n if (arg instanceof RegExp) {\n throw new TypeError(\n 'First argument to String.prototype.' + func +\n ' must not be a regular expression');\n }\n return thisArg + '';\n};\n", +-"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n * @param {?} target\n * @param {string} property\n * @param {?} descriptor\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n descriptor = /** @type {!ObjectPropertyDescriptor} */ (descriptor);\n // NOTE: This is currently never called with a descriptor outside\n // the control of the compiler. If we ever decide to polyfill either\n // Object.defineProperty or Reflect.defineProperty for ES3, we should\n // explicitly check for `get` or `set` on the descriptor and throw a\n // TypeError, since it's impossible to properly polyfill it.\n if (target == Array.prototype || target == Object.prototype) return;\n target[property] = descriptor.value;\n };\n", ++"js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n * @suppress {reportUnknownTypes}\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Refuses to define properties on Array.prototype and Object.prototype,\n * since we can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n * @param {?} target\n * @param {string} property\n * @param {?} descriptor\n * @suppress {reportUnknownTypes}\n */\n$jscomp.defineProperty =\n $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n descriptor = /** @type {!ObjectPropertyDescriptor} */ (descriptor);\n // NOTE: This is currently never called with a descriptor outside\n // the control of the compiler. If we ever decide to polyfill either\n // Object.defineProperty or Reflect.defineProperty for ES3, we should\n // explicitly check for `get` or `set` on the descriptor and throw a\n // TypeError, since it's impossible to properly polyfill it.\n if (target == Array.prototype || target == Object.prototype) return;\n target[property] = descriptor.value;\n };\n", + "js/util/defines.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n\n/**\n * Whether to assume ES5 is available. This enables removing several\n * internal polyfills, which must otherwise be detected at runtime.\n * @define {boolean}\n */\n$jscomp.ASSUME_ES5 = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_MAP = false;\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_SET = false;\n\n/**\n * Whether to provide an incorrect but tiny Math.fround polyfill that just\n * returns the number given. This is usually okay to do, particularly if\n * `Math.fround` is only used to allow the JavaScript engine to use faster\n * 32-bit float operations, but could cause problems if program logic is\n * dependent on floats being truncated consistently.\n * @define {boolean}\n */\n$jscomp.SIMPLE_FROUND_POLYFILL = false;\n', + "js/util/finddescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n\n\n/**\n * Helper function to find a descriptor.\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {!ObjectPropertyDescriptor|undefined}\n */\n$jscomp.findDescriptor = function(target, propertyKey) {\n var /** ?Object */ obj = target;\n while (obj) {\n var property = Reflect.getOwnPropertyDescriptor(obj, propertyKey);\n if (property) {\n return property;\n }\n obj = Reflect.getPrototypeOf(obj);\n }\n return undefined;\n};\n", + "js/util/findinternal.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility for Array methods that find elements.\n */\n\'require base\';\n\n// TODO(sdh): would be nice to template on the ARRAY type as well,\n// so that the third arg type of callback can be refined to be\n// exactly the same as the array type, but then there\'s no way to\n// enforce that it must, in fact, be an array.\n/**\n * Internal implementation of find.\n * @param {!IArrayLike} array\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *} callback\n * @param {THIS} thisArg\n * @return {{i: number, v: (VALUE|undefined)}}\n * @template THIS, VALUE\n * @suppress {reportUnknownTypes}\n */\n$jscomp.findInternal = function(array, callback, thisArg) {\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n for (var i = 0; i < len; i++) {\n var value = array[i];\n if (callback.call(thisArg, value, i, array)) return {i: i, v: value};\n }\n return {i: -1, v: void 0};\n};\n', + "js/util/global.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime code to store the global object.\n */\n\'require base\';\n\n\n/**\n * @param {!Object} maybeGlobal\n * @return {!Object} The global object.\n * @suppress {undefinedVars|reportUnknownTypes}\n */\n$jscomp.getGlobal = function(maybeGlobal) {\n // This logic can be simplified to be made more optimizable.\n return (typeof window != \'undefined\' && window === maybeGlobal) ?\n maybeGlobal :\n (typeof global != \'undefined\' && global != null) ?\n /** @type {!Object} */ (global) :\n maybeGlobal;\n};\n\n\n// TODO(sdh): This should be typed as "the global object" now that the type\n// of "Global" has landed in the type system.\n/**\n * The global object. For browsers we could just use `this` but in Node that\n * doesn\'t work.\n * @const {?}\n */\n$jscomp.global = $jscomp.getGlobal(this);\n', +-"js/util/objectcreate.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides a partial internal polyfill for Object.create.\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.create() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n *\n * Does not implement the second argument.\n * @param {!Object} prototype\n * @return {!Object}\n */\n$jscomp.objectCreate =\n ($jscomp.ASSUME_ES5 || typeof Object.create == 'function') ?\n Object.create :\n function(prototype) {\n /** @constructor */\n var ctor = function() {};\n ctor.prototype = prototype;\n return new ctor();\n };\n", ++"js/util/objectcreate.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides a partial internal polyfill for Object.create.\n */\n'require util/defines';\n\n\n/**\n * Polyfill for Object.create() method:\n * https://developer.m0z111a.qjz9zk/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n *\n * Does not implement the second argument.\n * @param {!Object} prototype\n * @return {!Object}\n */\n$jscomp.objectCreate =\n ($jscomp.ASSUME_ES5 || typeof Object.create == 'function') ?\n Object.create :\n function(prototype) {\n /** @constructor */\n var ctor = function() {};\n ctor.prototype = prototype;\n return new ctor();\n };\n", + "js/util/owns.js":'/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n/**\n * Synonym for Object.prototype.hasOwnProperty.call(obj, prop).\n * @param {!Object} obj\n * @param {string} prop\n * @return {boolean}\n */\n$jscomp.owns = function(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n', + "js/util/polyfill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n */\n'require util/defineproperty';\n'require util/global';\n\n\n/**\n * @param {string} target Qualified name of the class or method to polyfill,\n * e.g. 'Array.prototype.includes' or 'Map'.\n * @param {?function(*): *} polyfill A function that takes the current browser\n * implementation of the target and returns an optional new polyfill\n * implementation. If null is returned, then no polyfill will be added. A\n * null argument for this parameter indicates that the function will not be\n * polyfilled, and is only useful for `build_polyfill_table.js` bookkeeping.\n * @param {string} fromLang The language level in which the target is expected\n * to already be present in the browser. The compiler requires that\n * `languageOut < fromLang` before injecting a polyfill (i.e. if the\n * specified output language already includes the feature then there's no\n * need to polyfill it).\n * @param {string} toLang The language level required by the polyfill\n * implementation. The compiler will issue an error if a polyfill is\n * required, but `languageOut < toLang`. Additionally, the\n * `build_polyfill_table.js` script audits the polyfill dependency tree to\n * ensure that no polyfill with a lower `toLang` depends on one with a\n * higher `toLang`.\n * @suppress {reportUnknownTypes}\n * @noinline\n * NOTE: We prevent inlining so RemoveUnusedPolyfills can always recognize this\n * call.\n */\n$jscomp.polyfill = function(target, polyfill, fromLang, toLang) {\n if (!polyfill) return;\n var obj = $jscomp.global;\n var split = target.split('.');\n for (var i = 0; i < split.length - 1; i++) {\n var key = split[i];\n if (!(key in obj)) obj[key] = {}; // Might want to be defineProperty.\n obj = obj[key];\n }\n var property = split[split.length - 1];\n var orig = obj[property];\n var impl = polyfill(orig);\n if (impl == orig || impl == null) return;\n $jscomp.defineProperty(\n obj, property, {configurable: true, writable: true, value: impl});\n};\n", + "js/util/reflectobject.js":'/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\'require base\';\n\n/**\n * Definition for object reflection.\n *\n * Internal compiler version of closure library goog.reflect.object.\n *\n * Use this if you have an object literal whose keys need to have the same names\n * as the properties of some class even after they are renamed by the compiler.\n *\n * @param {?Object} type class, interface, or record\n * @param {T} object Object literal whose properties must be renamed\n * consistently with type\n * @return {T} The object literal.\n * @template T\n */\n$jscomp.reflectObject = function(type, object) {\n return object;\n};\n\n/**\n * Definition for object property reflection.\n *\n * Internal compiler version of closure library goog.reflect.objectProperty.\n *\n * Use this if you have a string that needs renamed as if it were an unquoted\n * property of a class.\n *\n * @param {string} propName\n * @param {?Object} type class, interface, or record\n * @return {string}\n */\n$jscomp.reflectProperty = function(propName, type) {\n return propName;\n};\n', + "js/util/stringpadding.js":"/*\n * Copyright 2017 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/string/repeat';\n\n/**\n * Repeats the given string as necessary to reach the given length,\n * truncating any extra characters.\n * @param {string|undefined} padString\n * @param {number} padLength\n * @return {string}\n */\n$jscomp.stringPadding = function(padString, padLength) {\n var padding = padString !== undefined ? String(padString) : ' ';\n if (!(padLength > 0) || !padding) return '';\n var repeats = Math.ceil(padLength / padding.length);\n return padding.repeat(repeats).substring(0, padLength);\n};\n", + "js/polyfills.txt":"Array.from es6 es3 es6/array/from\nArray.of es6 es3 es6/array/of\nArray.prototype.copyWithin es6 es3 es6/array/copywithin\nArray.prototype.entries es6 es3 es6/array/entries\nArray.prototype.fill es6 es3 es6/array/fill\nArray.prototype.find es6 es3 es6/array/find\nArray.prototype.findIndex es6 es3 es6/array/findindex\nArray.prototype.flat es9 es5 es6/array/flat\nArray.prototype.flatMap es9 es5 es6/array/flatmap\nArray.prototype.includes es7 es3 es6/array/includes\nArray.prototype.keys es6 es3 es6/array/keys\nArray.prototype.values es8 es3 es6/array/values\nMap es6 es3 es6/map\nMath.acosh es6 es3 es6/math/acosh\nMath.asinh es6 es3 es6/math/asinh\nMath.atanh es6 es3 es6/math/atanh\nMath.cbrt es6 es3 es6/math/cbrt\nMath.clz32 es6 es3 es6/math/clz32\nMath.cosh es6 es3 es6/math/cosh\nMath.expm1 es6 es3 es6/math/expm1\nMath.fround es6 es3 es6/math/fround\nMath.hypot es6 es3 es6/math/hypot\nMath.imul es6 es3 es6/math/imul\nMath.log10 es6 es3 es6/math/log10\nMath.log1p es6 es3 es6/math/log1p\nMath.log2 es6 es3 es6/math/log2\nMath.sign es6 es3 es6/math/sign\nMath.sinh es6 es3 es6/math/sinh\nMath.tanh es6 es3 es6/math/tanh\nMath.trunc es6 es3 es6/math/trunc\nNumber.EPSILON es6 es3 es6/number/constants\nNumber.MAX_SAFE_INTEGER es6 es3 es6/number/constants\nNumber.MIN_SAFE_INTEGER es6 es3 es6/number/constants\nNumber.isFinite es6 es3 es6/number/isfinite\nNumber.isInteger es6 es3 es6/number/isinteger\nNumber.isNaN es6 es3 es6/number/isnan\nNumber.isSafeInteger es6 es3 es6/number/issafeinteger\nNumber.parseFloat es6 es3 es6/number/parsefloat\nNumber.parseInt es6 es3 es6/number/parseint\nObject.assign es6 es3 es6/object/assign\nObject.entries es8 es3 es6/object/entries\nObject.fromEntries es_2019 es3 es6/object/fromentries\nObject.getOwnPropertyDescriptors es8 es5 es6/object/getownpropertydescriptors\nObject.getOwnPropertySymbols es6 es5 es6/object/getownpropertysymbols\nObject.is es6 es3 es6/object/is\nObject.setPrototypeOf es6 es5 es6/object/setprototypeof\nObject.values es8 es3 es6/object/values\nPromise es6 es3 es6/promise/promise\nPromise.allSettled es_next es3 es6/promise/allSettled\nPromise.prototype.finally es9 es3 es6/promise/finally\nProxy es6 es6\nReflect.apply es6 es3 es6/reflect/apply\nReflect.construct es6 es3 es6/reflect/construct\nReflect.defineProperty es6 es5 es6/reflect/defineproperty\nReflect.deleteProperty es6 es3 es6/reflect/deleteproperty\nReflect.get es6 es5 es6/reflect/get\nReflect.getOwnPropertyDescriptor es6 es5 es6/reflect/getownpropertydescriptor\nReflect.getPrototypeOf es6 es5 es6/reflect/getprototypeof\nReflect.has es6 es3 es6/reflect/has\nReflect.isExtensible es6 es3 es6/reflect/isextensible\nReflect.ownKeys es6 es5 es6/reflect/ownkeys\nReflect.preventExtensions es6 es3 es6/reflect/preventextensions\nReflect.set es6 es5 es6/reflect/set\nReflect.setPrototypeOf es6 es5 es6/reflect/setprototypeof\nSet es6 es3 es6/set\nString.fromCodePoint es6 es3 es6/string/fromcodepoint\nString.prototype.codePointAt es6 es3 es6/string/codepointat\nString.prototype.endsWith es6 es3 es6/string/endswith\nString.prototype.includes es6 es3 es6/string/includes\nString.prototype.normalize es6 es6\nString.prototype.padEnd es8 es3 es6/string/padend\nString.prototype.padStart es8 es3 es6/string/padstart\nString.prototype.repeat es6 es3 es6/string/repeat\nString.prototype.startsWith es6 es3 es6/string/startswith\nString.prototype.trimEnd es_2019 es3 es6/string/trimend\nString.prototype.trimLeft es_2019 es3 es6/string/trimstart\nString.prototype.trimRight es_2019 es3 es6/string/trimend\nString.prototype.trimStart es_2019 es3 es6/string/trimstart\nString.raw es6 es6\nWeakMap es6 es3 es6/weakmap\nWeakSet es6 es3 es6/weakset\n", + "parsing/ParserConfig.properties":"# Copyright 2009 The Closure Compiler Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Configuration options for the Parser.\n#\n# Allows us to update the allowed JSDoc annotations independently of the\n# Compiler binary, so we can add new JSDoc annotations to old binaries.\n\n# The version of the compiler that we're currently building.\n# Should be formatted as:\n# Version# (Revision XXX)\ncompiler.version = ${compiler.version}\n\n# The datestamp of the compiler that we're currently building.\ncompiler.date = ${compiler.date}\n\n# A comma-delimited list.\n# Some of these are not used by JSCompiler, but appear in third-party JS code.\n# http://usejsdoc.org/\n# It's not strictly necessary for the natively-supported annotations to be\n# listed here, but it's nice to have them all in one place.\njsdoc.annotations =\\\n addon,\\\n alias,\\\n animations,\\\n appliesMixin,\\\n augments,\\\n author,\\\n base,\\\n borrows,\\\n bug,\\\n channel, \\\n class,\\\n classdesc,\\\n closurePrimitive,\\\n codepen,\\\n config,\\\n constructor,\\\n constructs,\\\n copyright,\\\n default,\\\n delegate,\\\n demo,\\\n deprecated,\\\n desc,\\\n description,\\\n dict,\\\n docsNotRequired,\\\n docs-private,\\\n element,\\\n enhance,\\\n enhanceable,\\\n enum,\\\n event,\\\n eventOf,\\\n eventType,\\\n example,\\\n exception,\\\n exec,\\\n export,\\\n exportDoc,\\\n exportInterface,\\\n expose,\\\n externs,\\\n field,\\\n file,\\\n fires,\\\n function,\\\n global,\\\n hassoydelcall,\\\n hassoydeltemplate,\\\n hideconstructor, \\\n id,\\\n idGenerator,\\\n ignore,\\\n inner,\\\n instance,\\\n kind,\\\n lends,\\\n link,\\\n meaning,\\\n member,\\\n memberOf,\\\n memberof,\\\n method,\\\n methodOf,\\\n mixes,\\\n mixin,\\\n modName,\\\n moddedBy,\\\n model,\\\n modifies,\\\n mods,\\\n module,\\\n multiElement,\\\n name,\\\n namespace,\\\n ngInject,\\\n ngdoc,\\\n nocompile,\\\n package,\\\n param,\\\n parent,\\\n pintomodule,\\\n preserveTry,\\\n priority,\\\n private,\\\n property,\\\n propertyOf,\\\n protected,\\\n provideGoog,\\\n pseudoElement,\\\n public,\\\n readonly,\\\n requirecss,\\\n requires,\\\n requireExtern,\\\n restrict,\\\n returns,\\\n scope,\\\n see,\\\n since,\\\n static,\\\n struct,\\\n summary,\\\n supported,\\\n this,\\\n throws,\\\n todo,\\\n transaction,\\\n tutorial,\\\n type,\\\n typedef,\\\n typeSummary,\\\n url,\\\n usage,\\\n version,\\\n virtual,\\\n visibility,\\\n wizSupportsSymbolicLookup,\\\n wizaction,\\\n wizmodule\n\n# Comma-delimited list of valid suppressions.\n# This should be a subset of the list of DiagnosticGroups.\njsdoc.suppressions =\\\n accessControls,\\\n checkDebuggerStatement,\\\n checkPrototypalTypes,\\\n checkRegExp,\\\n checkTypes,\\\n checkVars,\\\n closureDepMethodUsageChecks,\\\n const,\\\n constantProperty,\\\n deprecated,\\\n duplicate,\\\n es5Strict,\\\n externsValidation,\\\n extraProvide,\\\n extraRequire,\\\n fileoverviewTags,\\\n globalThis,\\\n invalidCasts,\\\n legacyGoogScopeRequire,\\\n lateProvide,\\\n lintChecks,\\\n messageConventions,\\\n misplacedTypeAnnotation,\\\n missingOverride, \\\n missingPolyfill, \\\n missingProperties,\\\n missingProvide,\\\n missingRequire,\\\n missingReturn,\\\n missingSourcesWarnings,\\\n moduleLoad,\\\n newCheckTypes,\\\n newCheckTypesAllChecks,\\\n nonStandardJsDocs,\\\n partialAlias,\\\n polymer,\\\n reportUnknownTypes,\\\n strictCheckTypes,\\\n strictMissingProperties,\\\n strictModuleDepCheck,\\\n strictPrimitiveOperators,\\\n suspiciousCode,\\\n transitionalSuspiciousCodeWarnings,\\\n undefinedNames,\\\n undefinedVars,\\\n underscore,\\\n unknownDefines,\\\n unusedLocalVariables,\\\n unusedPrivateMembers,\\\n uselessCode,\\\n visibility,\\\n with\n\n# A comma-delimited list of valid closure primitive ids.\n# This correspond to the ClosurePrimitive enum once normalized (see ClosurePrimitive.fromStringId)\njsdoc.primitives =\\\n asserts.fail,\\\n asserts.matchesReturn,\\\n asserts.truthy,\\\n\n# A comma-delimited list of reserved words that we should not rename variables\n# to. Used when an extension is released that steps on globals.\n# This prevents the compiler from renaming variables to these names, but not\n# from allowing externs for these names.\n#\n# i,j - common loop variables often overwritten by browser extensions\n# s \u2013 commonly defined by browser extensions when injecting scripts.\n# $j,$ - common jquery aliases often overwritten by browser extensions\n# o - overwritten by Norton Identity Protection's Chrome extension.\n# ga,_gaq - global variable names used by Google Analytics.\n# sun,java - May cause issues in older browsers with remnants of Java support.\n# XR - extern added by the webXR platform API.\n# TODO(tbreisacher): Remove 'ga' and '_gaq' if/when we enable\n# --isolation_mode=IIFE by default.\ncompiler.reserved.vars = i,j,s,$,$j,o,ga,_gaq,sun,XR,java\n", +-"rhino/Messages.properties":'#\n# Default JavaScript messages file.\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Version: MPL 1.1/GPL 2.0\n#\n# The contents of this file are subject to the Mozilla Public License Version\n# 1.1 (the "License"); you may not use this file except in compliance with\n# the License. You may obtain a copy of the License at\n# http://www.mozilla.org/MPL/\n#\n# Software distributed under the License is distributed on an "AS IS" basis,\n# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n# for the specific language governing rights and limitations under the\n# License.\n#\n# The Original Code is Rhino code, released\n# May 6, 1999.\n#\n# The Initial Developer of the Original Code is\n# Netscape Communications Corporation.\n# Portions created by the Initial Developer are Copyright (C) 1997-1999\n# the Initial Developer. All Rights Reserved.\n#\n# Contributor(s):\n# Norris Boyd\n# Bob Jervis\n# Pascal-Louis Perez\n#\n# Alternatively, the contents of this file may be used under the terms of\n# the GNU General Public License Version 2 or later (the "GPL"), in which\n# case the provisions of the GPL are applicable instead of those above. If\n# you wish to allow use of your version of this file only under the terms of\n# the GPL and not to allow others to use your version of this file under the\n# MPL, indicate your decision by deleting the provisions above and replacing\n# them with the notice and other provisions required by the GPL. If you do\n# not delete the provisions above, a recipient may use your version of this\n# file under either the MPL or the GPL.\n#\n# ***** END LICENSE BLOCK *****\n\n# This is replaced during jar assembly from property string\n# and should not be translated\nimplementation.version = @IMPLEMENTATION.VERSION@\n\n#\n# To add JavaScript error messages for a particular locale, create a\n# new Messages_[locale].properties file, where [locale] is the Java\n# string abbreviation for that locale. For example, JavaScript\n# messages for the Polish locale should be located in\n# Messages_pl.properties, and messages for the Italian Swiss locale\n# should be located in Messages_it_CH.properties. Message properties\n# files should be accessible through the classpath under\n# org.mozilla.javascript.resources\n#\n# See:\n# java.util.ResourceBundle\n# java.text.MessageFormat\n#\n\n# SomeJavaClassWhereUsed\n\n# Codegen\nmsg.dup.parms =\\\n Duplicate parameter name "{0}".\n\nmsg.unexpected.eof =\\\n Unexpected end of file\n\nmsg.extra.trailing.comma =\\\n Trailing comma is not legal in an ECMA-262 object initializer\n\nmsg.end.annotation.expected =\\\n expected end of line or comment.\n\nmsg.bad.jsdoc.tag =\\\n illegal use of unknown JSDoc tag "{0}"; ignoring it\n\nmsg.bad.fileoverview.visibility.annotation =\\\n {0} visibility not allowed in @fileoverview block\n\nmsg.missing.variable.name =\\\n expecting a variable name in a @param tag.\n\nmsg.dup.variable.name =\\\n duplicate variable name "{0}"\n\nmsg.invalid.variable.name =\\\n invalid param name "{0}"\n\nmsg.jsdoc.incompat.type =\\\n type annotation incompatible with other annotations.\n\nmsg.jsdoc.type.syntax =\\\n type not recognized due to syntax error.\n\nmsg.jsdoc.name.syntax =\\\n name not recognized due to syntax error.\n\nmsg.jsdoc.override =\\\n extra @override/@inheritDoc tag.\n\nmsg.jsdoc.final =\\\n extra @final tag.\n\nmsg.jsdoc.extra.visibility=\\\n extra visibility tag\n\nmsg.jsdoc.idgen.duplicate =\\\n extra @idGenerator tag\n\nmsg.jsdoc.idgen.bad =\\\n malformed @idGenerator tag\n\nmsg.jsdoc.wizaction =\\\n extra @wizaction tag\n\nmsg.jsdoc.idgen.unknown =\\\n unknown @idGenerator parameter: {0}\n\nmsg.jsdoc.hidden =\\\n extra @hidden tag\n\nmsg.jsdoc.const =\\\n conflicting @const tag\n\nmsg.jsdoc.desc.extra =\\\n extra @desc tag\n\nmsg.jsdoc.meaning.extra =\\\n extra @meaning tag\n\nmsg.jsdoc.fileoverview.extra =\\\n extra @fileoverview tag\n\nmsg.jsdoc.lends.incompatible =\\\n @lends tag incompatible with other annotations.\n\nmsg.jsdoc.lends.missing =\\\n missing object name in @lends tag.\n\nmsg.jsdoc.closurePrimitive.extra =\\\n conflicting @closurePrimitive tag\n\nmsg.jsdoc.closurePrimitive.invalid =\\\n invalid id in @closurePrimitive tag.\n\nmsg.jsdoc.closurePrimitive.missing =\\\n missing id in @closurePrimitive tag.\n\nmsg.jsdoc.preserve.nobuilder =\\\n @preserve or @license annotation without file to associate it with\n\nmsg.jsdoc.missing.lc =\\\n missing opening \'{\'\n\nmsg.jsdoc.missing.lp =\\\n missing opening (\n\nmsg.jsdoc.missing.braces =\\\n Type annotations should have curly braces.\n\nmsg.jsdoc.missing.rc =\\\n expected closing }\n\nmsg.jsdoc.missing.rp =\\\n missing closing )\n\nmsg.jsdoc.missing.gt =\\\n missing closing >\n\nmsg.jsdoc.missing.rb =\\\n missing closing ]\n\nmsg.jsdoc.missing.colon =\\\n expecting colon after this\n\nmsg.jsdoc.function.this =\\\n expecting this but {0} found\n\nmsg.jsdoc.function.newnotobject =\\\n constructed type must be an object type\n\nmsg.jsdoc.function.varargs =\\\n variable length argument must be last.\n\nmsg.jsdoc.type.union =\\\n union type element with bad syntax\n\nmsg.jsdoc.type.record.duplicate =\\\n Duplicate record field {0}.\n\nmsg.jsdoc.enum =\\\n conflicting @enum tag\n\nmsg.jsdoc.constructor =\\\n conflicting @constructor tag\n\nmsg.jsdoc.deprecated =\\\n extra @deprecated tag\n\nmsg.jsdoc.interface =\\\n extra @interface tag\n\nmsg.jsdoc.interface.constructor =\\\n cannot be both an interface and a constructor.\n\nmsg.jsdoc.record =\\\n conflicting @record tag.\n\nmsg.jsdoc.implements.duplicate =\\\n duplicate @implements tag.\n\nmsg.jsdoc.implements.extraqualifier =\\\n @implements/@extends requires a bare interface/record name without ! or ?.\n\nmsg.jsdoc.nosideeffects =\\\n conflicting @nosideeffects tag\n\nmsg.jsdoc.implicitcast =\\\n extra @implicitCast tag.\n\nmsg.jsdoc.this =\\\n conflicting @this tag\n\nmsg.jsdoc.this.object =\\\n @this must specify an object type\n\nmsg.jsdoc.type =\\\n conflicting @type tag\n\nmsg.jsdoc.define =\\\n conflicting @define tag\n\nmsg.jsdoc.define.badtype =\\\n @define tag only permits literal types\n\nmsg.jsdoc.extends =\\\n conflicting @extends tag\n\nmsg.jsdoc.extends.duplicate =\\\n duplicate @extends tag\n\nmsg.jsdoc.export =\\\n extra @export tag\n\nmsg.jsdoc.expose =\\\n extra @expose tag\n\nmsg.jsdoc.externs =\\\n extra @externs tag\n\nmsg.jsdoc.typesummary =\\\n extra @typeSummary tag\n\nmsg.jsdoc.nocompile =\\\n extra @nocompile tag\n\nmsg.jsdoc.nocollapse =\\\n extra @nocollapse tag\n\nmsg.jsdoc.noinline =\\\n extra @noinline tag\n\nmsg.jsdoc.seemissing =\\\n @see tag missing description\n\nmsg.jsdoc.authormissing =\\\n @author tag missing author\n\nmsg.jsdoc.versionmissing =\\\n @version tag missing version information\n\nmsg.jsdoc.extraversion =\\\n conflicting @version tag\n\nmsg.jsdoc.suppress =\\\n malformed @suppress tag\n\nmsg.jsdoc.suppress.unknown =\\\n unknown @suppress parameter: {0}\n\nmsg.jsdoc.modifies =\\\n malformed @modifies tag\n\nmsg.jsdoc.modifies.duplicate =\\\n conflicting @modifies tag\n\nmsg.jsdoc.modifies.unknown =\\\n unknown @modifies parameter: {0}\n\nmsg.jsdoc.polymerBehavior.extra =\\\n extra @polymerBehavior tag\n\nmsg.jsdoc.polymer.extra =\\\n extra @polymer tag\n\nmsg.jsdoc.customElement.extra =\\\n extra @customElement tag\n\nmsg.jsdoc.mixinClass.extra =\\\n extra @mixinClass tag\n\nmsg.jsdoc.mixinFunction.extra =\\\n extra @mixinFunction tag\n\nmsg.jsdoc.disposeparameter.missing =\\\n @disposes tag missing parameter name.\n\nmsg.jsdoc.disposeparameter.error =\\\n @disposes parameter unknown or parameter specified multiple times.\n\nmsg.jsdoc.nginject.extra =\\\n extra @ngInject tag\n\nmsg.no.type.name =\\\n expecting a type name.\n\n\nmsg.jsdoc.template.boundedgenerics.used =\\\n Bounded generic semantics are currently still in development\n\nmsg.jsdoc.template.name.missing =\\\n @template tag missing type name.\n\nmsg.jsdoc.template.name.redeclaration =\\\n Type name(s) for @template annotation declared twice.\n\nmsg.jsdoc.template.multipleDeclaration =\\\n Multiple template names cannot be declared with bounds or TTL.\n\nmsg.jsdoc.template.boundsWithTTL =\\\n Template types cannot combine bounds and TTL.\n\nmsg.jsdoc.template.typetransformation.missingDelimiter =\\\n Expected end delimiter for a type transformation.\n\nmsg.jsdoc.template.typetransformation.expressionMissing =\\\n Missing type transformation expression.\n\n\nmsg.jsdoc.typetransformation.invalid =\\\n Invalid {0}\n\nmsg.jsdoc.typetransformation.invalid.expression =\\\n Invalid {0} expression\n\nmsg.jsdoc.typetransformation.missing.param =\\\n Missing parameter in {0}\n\nmsg.jsdoc.typetransformation.extra.param =\\\n Found extra parameter in {0}\n\nmsg.jsdoc.typetransformation.invalid.inside =\\\n Invalid expression inside {0}\n\nmsg.jsdoc.import =\\\n Import in typedef is not supported.'}; ++"rhino/Messages.properties":'#\n# Default JavaScript messages file.\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Version: MPL 1.1/GPL 2.0\n#\n# The contents of this file are subject to the Mozilla Public License Version\n# 1.1 (the "License"); you may not use this file except in compliance with\n# the License. You may obtain a copy of the License at\n# http://www.m0z111a.qjz9zk/MPL/\n#\n# Software distributed under the License is distributed on an "AS IS" basis,\n# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n# for the specific language governing rights and limitations under the\n# License.\n#\n# The Original Code is Rhino code, released\n# May 6, 1999.\n#\n# The Initial Developer of the Original Code is\n# Netscape Communications Corporation.\n# Portions created by the Initial Developer are Copyright (C) 1997-1999\n# the Initial Developer. All Rights Reserved.\n#\n# Contributor(s):\n# Norris Boyd\n# Bob Jervis\n# Pascal-Louis Perez\n#\n# Alternatively, the contents of this file may be used under the terms of\n# the GNU General Public License Version 2 or later (the "GPL"), in which\n# case the provisions of the GPL are applicable instead of those above. If\n# you wish to allow use of your version of this file only under the terms of\n# the GPL and not to allow others to use your version of this file under the\n# MPL, indicate your decision by deleting the provisions above and replacing\n# them with the notice and other provisions required by the GPL. If you do\n# not delete the provisions above, a recipient may use your version of this\n# file under either the MPL or the GPL.\n#\n# ***** END LICENSE BLOCK *****\n\n# This is replaced during jar assembly from property string\n# and should not be translated\nimplementation.version = @IMPLEMENTATION.VERSION@\n\n#\n# To add JavaScript error messages for a particular locale, create a\n# new Messages_[locale].properties file, where [locale] is the Java\n# string abbreviation for that locale. For example, JavaScript\n# messages for the Polish locale should be located in\n# Messages_pl.properties, and messages for the Italian Swiss locale\n# should be located in Messages_it_CH.properties. Message properties\n# files should be accessible through the classpath under\n# org.mozilla.javascript.resources\n#\n# See:\n# java.util.ResourceBundle\n# java.text.MessageFormat\n#\n\n# SomeJavaClassWhereUsed\n\n# Codegen\nmsg.dup.parms =\\\n Duplicate parameter name "{0}".\n\nmsg.unexpected.eof =\\\n Unexpected end of file\n\nmsg.extra.trailing.comma =\\\n Trailing comma is not legal in an ECMA-262 object initializer\n\nmsg.end.annotation.expected =\\\n expected end of line or comment.\n\nmsg.bad.jsdoc.tag =\\\n illegal use of unknown JSDoc tag "{0}"; ignoring it\n\nmsg.bad.fileoverview.visibility.annotation =\\\n {0} visibility not allowed in @fileoverview block\n\nmsg.missing.variable.name =\\\n expecting a variable name in a @param tag.\n\nmsg.dup.variable.name =\\\n duplicate variable name "{0}"\n\nmsg.invalid.variable.name =\\\n invalid param name "{0}"\n\nmsg.jsdoc.incompat.type =\\\n type annotation incompatible with other annotations.\n\nmsg.jsdoc.type.syntax =\\\n type not recognized due to syntax error.\n\nmsg.jsdoc.name.syntax =\\\n name not recognized due to syntax error.\n\nmsg.jsdoc.override =\\\n extra @override/@inheritDoc tag.\n\nmsg.jsdoc.final =\\\n extra @final tag.\n\nmsg.jsdoc.extra.visibility=\\\n extra visibility tag\n\nmsg.jsdoc.idgen.duplicate =\\\n extra @idGenerator tag\n\nmsg.jsdoc.idgen.bad =\\\n malformed @idGenerator tag\n\nmsg.jsdoc.wizaction =\\\n extra @wizaction tag\n\nmsg.jsdoc.idgen.unknown =\\\n unknown @idGenerator parameter: {0}\n\nmsg.jsdoc.hidden =\\\n extra @hidden tag\n\nmsg.jsdoc.const =\\\n conflicting @const tag\n\nmsg.jsdoc.desc.extra =\\\n extra @desc tag\n\nmsg.jsdoc.meaning.extra =\\\n extra @meaning tag\n\nmsg.jsdoc.fileoverview.extra =\\\n extra @fileoverview tag\n\nmsg.jsdoc.lends.incompatible =\\\n @lends tag incompatible with other annotations.\n\nmsg.jsdoc.lends.missing =\\\n missing object name in @lends tag.\n\nmsg.jsdoc.closurePrimitive.extra =\\\n conflicting @closurePrimitive tag\n\nmsg.jsdoc.closurePrimitive.invalid =\\\n invalid id in @closurePrimitive tag.\n\nmsg.jsdoc.closurePrimitive.missing =\\\n missing id in @closurePrimitive tag.\n\nmsg.jsdoc.preserve.nobuilder =\\\n @preserve or @license annotation without file to associate it with\n\nmsg.jsdoc.missing.lc =\\\n missing opening \'{\'\n\nmsg.jsdoc.missing.lp =\\\n missing opening (\n\nmsg.jsdoc.missing.braces =\\\n Type annotations should have curly braces.\n\nmsg.jsdoc.missing.rc =\\\n expected closing }\n\nmsg.jsdoc.missing.rp =\\\n missing closing )\n\nmsg.jsdoc.missing.gt =\\\n missing closing >\n\nmsg.jsdoc.missing.rb =\\\n missing closing ]\n\nmsg.jsdoc.missing.colon =\\\n expecting colon after this\n\nmsg.jsdoc.function.this =\\\n expecting this but {0} found\n\nmsg.jsdoc.function.newnotobject =\\\n constructed type must be an object type\n\nmsg.jsdoc.function.varargs =\\\n variable length argument must be last.\n\nmsg.jsdoc.type.union =\\\n union type element with bad syntax\n\nmsg.jsdoc.type.record.duplicate =\\\n Duplicate record field {0}.\n\nmsg.jsdoc.enum =\\\n conflicting @enum tag\n\nmsg.jsdoc.constructor =\\\n conflicting @constructor tag\n\nmsg.jsdoc.deprecated =\\\n extra @deprecated tag\n\nmsg.jsdoc.interface =\\\n extra @interface tag\n\nmsg.jsdoc.interface.constructor =\\\n cannot be both an interface and a constructor.\n\nmsg.jsdoc.record =\\\n conflicting @record tag.\n\nmsg.jsdoc.implements.duplicate =\\\n duplicate @implements tag.\n\nmsg.jsdoc.implements.extraqualifier =\\\n @implements/@extends requires a bare interface/record name without ! or ?.\n\nmsg.jsdoc.nosideeffects =\\\n conflicting @nosideeffects tag\n\nmsg.jsdoc.implicitcast =\\\n extra @implicitCast tag.\n\nmsg.jsdoc.this =\\\n conflicting @this tag\n\nmsg.jsdoc.this.object =\\\n @this must specify an object type\n\nmsg.jsdoc.type =\\\n conflicting @type tag\n\nmsg.jsdoc.define =\\\n conflicting @define tag\n\nmsg.jsdoc.define.badtype =\\\n @define tag only permits literal types\n\nmsg.jsdoc.extends =\\\n conflicting @extends tag\n\nmsg.jsdoc.extends.duplicate =\\\n duplicate @extends tag\n\nmsg.jsdoc.export =\\\n extra @export tag\n\nmsg.jsdoc.expose =\\\n extra @expose tag\n\nmsg.jsdoc.externs =\\\n extra @externs tag\n\nmsg.jsdoc.typesummary =\\\n extra @typeSummary tag\n\nmsg.jsdoc.nocompile =\\\n extra @nocompile tag\n\nmsg.jsdoc.nocollapse =\\\n extra @nocollapse tag\n\nmsg.jsdoc.noinline =\\\n extra @noinline tag\n\nmsg.jsdoc.seemissing =\\\n @see tag missing description\n\nmsg.jsdoc.authormissing =\\\n @author tag missing author\n\nmsg.jsdoc.versionmissing =\\\n @version tag missing version information\n\nmsg.jsdoc.extraversion =\\\n conflicting @version tag\n\nmsg.jsdoc.suppress =\\\n malformed @suppress tag\n\nmsg.jsdoc.suppress.unknown =\\\n unknown @suppress parameter: {0}\n\nmsg.jsdoc.modifies =\\\n malformed @modifies tag\n\nmsg.jsdoc.modifies.duplicate =\\\n conflicting @modifies tag\n\nmsg.jsdoc.modifies.unknown =\\\n unknown @modifies parameter: {0}\n\nmsg.jsdoc.polymerBehavior.extra =\\\n extra @polymerBehavior tag\n\nmsg.jsdoc.polymer.extra =\\\n extra @polymer tag\n\nmsg.jsdoc.customElement.extra =\\\n extra @customElement tag\n\nmsg.jsdoc.mixinClass.extra =\\\n extra @mixinClass tag\n\nmsg.jsdoc.mixinFunction.extra =\\\n extra @mixinFunction tag\n\nmsg.jsdoc.disposeparameter.missing =\\\n @disposes tag missing parameter name.\n\nmsg.jsdoc.disposeparameter.error =\\\n @disposes parameter unknown or parameter specified multiple times.\n\nmsg.jsdoc.nginject.extra =\\\n extra @ngInject tag\n\nmsg.no.type.name =\\\n expecting a type name.\n\n\nmsg.jsdoc.template.boundedgenerics.used =\\\n Bounded generic semantics are currently still in development\n\nmsg.jsdoc.template.name.missing =\\\n @template tag missing type name.\n\nmsg.jsdoc.template.name.redeclaration =\\\n Type name(s) for @template annotation declared twice.\n\nmsg.jsdoc.template.multipleDeclaration =\\\n Multiple template names cannot be declared with bounds or TTL.\n\nmsg.jsdoc.template.boundsWithTTL =\\\n Template types cannot combine bounds and TTL.\n\nmsg.jsdoc.template.typetransformation.missingDelimiter =\\\n Expected end delimiter for a type transformation.\n\nmsg.jsdoc.template.typetransformation.expressionMissing =\\\n Missing type transformation expression.\n\n\nmsg.jsdoc.typetransformation.invalid =\\\n Invalid {0}\n\nmsg.jsdoc.typetransformation.invalid.expression =\\\n Invalid {0} expression\n\nmsg.jsdoc.typetransformation.missing.param =\\\n Missing parameter in {0}\n\nmsg.jsdoc.typetransformation.extra.param =\\\n Found extra parameter in {0}\n\nmsg.jsdoc.typetransformation.invalid.inside =\\\n Invalid expression inside {0}\n\nmsg.jsdoc.import =\\\n Import in typedef is not supported.'}; + function qra(a){if(a in pra)return pra[a];throw Ia("Resource not found: "+r(a)).s;}function rra(){}var sra;l(rra,n);function ky(a,b){a=a.a.a.get(b);if(null==a)throw a=new Mr,sa(a,"no key found"),a.f=b,a.a(Error(a)),a.s;return a} + function tra(a){ura();if("com.google.javascript.rhino.Messages"===a)a="rhino/Messages.properties";else if("com.google.javascript.jscomp.parsing.ParserConfig"===a)a="parsing/ParserConfig.properties";else throw Ia("ResourceBundle not available: "+r(a)).s;var b=sra.get(a);if(!b){b=qra(a);b=ri(b,"\r?\n",0);for(var c=gl(),d=0;d

+ Content +

+- ++ + Span for John that can trigger a + hovercard. + +@@ -36,7 +36,7 @@ See the COPYING file for details. + attribute) + +
+- ++ + Span for James that can trigger a + hovercard + +@@ -44,7 +44,7 @@ See the COPYING file for details. + + +
+-
++
+ Doesn't trigger for Bill because + it's a div +
+\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/ui/hovercard_test_dom.html b/third_party/google-closure-library/closure/goog/ui/hovercard_test_dom.html +--- a/third_party/google-closure-library/closure/goog/ui/hovercard_test_dom.html ++++ b/third_party/google-closure-library/closure/goog/ui/hovercard_test_dom.html +@@ -16,7 +16,7 @@ See the COPYING file for details. +

+ Content +

+- ++ + Span for John that can trigger a + hovercard. + +@@ -26,7 +26,7 @@ See the COPYING file for details. + attribute) + +
+- ++ + Span for James that can trigger a + hovercard + +@@ -34,7 +34,7 @@ See the COPYING file for details. + + +
+-
++
+ Doesn't trigger for Bill because + it's a div +
+\ No newline at end of file +diff --git a/third_party/google-closure-library/closure/goog/ui/keyboardshortcuthandler_test.html b/third_party/google-closure-library/closure/goog/ui/keyboardshortcuthandler_test.html +--- a/third_party/google-closure-library/closure/goog/ui/keyboardshortcuthandler_test.html ++++ b/third_party/google-closure-library/closure/goog/ui/keyboardshortcuthandler_test.html +@@ -26,7 +26,7 @@ See the COPYING file for details. + + + +- ++ + + + +@@ -34,7 +34,7 @@ See the COPYING file for details. + + + +- ++ + + + + +- ++ + + + +@@ -24,7 +24,7 @@ See the COPYING file for details. + + + +- ++ + +